Licitator 1.0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
12 KiB

5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Controller\ChatController;
  4. use App\Entity\Comentarios;
  5. use App\Entity\ComentariosHistorico;
  6. use App\RuleEngine\Service\AcdrContext;
  7. use Zitec\RuleEngineBundle\Service\RuleEvaluator;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Sonata\AdminBundle\Controller\CRUDController;
  10. use App\Entity\TareaGreenEnterpreneur;
  11. use App\Entity\Respuestas;
  12. use App\Entity\RespuestasHistoricas;
  13. use Zitec\RuleEngineBundle\Traits\ActionsTrait;
  14. use App\Traits\SaveTasks;
  15. use Symfony\Component\HttpKernel\KernelInterface;
  16. use \TCPDF;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. class RespuestasTareaAdminController extends CRUDController
  19. {
  20. use ActionsTrait;
  21. use SaveTasks;
  22. protected $requestStack;
  23. /**
  24. * @var RuleEvaluator
  25. */
  26. protected $evaluator;
  27. /**
  28. * @var AcdrContext
  29. */
  30. protected $context;
  31. /**
  32. * @var KernelInterface
  33. */
  34. private $kernel;
  35. protected $translator;
  36. private $chatController;
  37. public function setRuleEvaluator(RuleEvaluator $evaluator){
  38. $this->evaluator = $evaluator;
  39. }
  40. public function setContext(AcdrContext $context){
  41. $this->context = $context;
  42. }
  43. public function setKernel(KernelInterface $kernel){
  44. $this->kernel = $kernel;
  45. }
  46. public function __construct(
  47. RequestStack $requestStack,
  48. RuleEvaluator $evaluator,
  49. AcdrContext $context,
  50. KernelInterface $kernel,
  51. ChatController $chatController,
  52. TranslatorInterface $translator
  53. ) {
  54. $this->requestStack = $requestStack;
  55. $this->evaluator = $evaluator;
  56. $this->context = $context;
  57. $this->kernel = $kernel;
  58. $this->chatController = $chatController;
  59. $this->translator = $translator;
  60. }
  61. /**
  62. * @param $tarea
  63. * @param $preguntas
  64. * @param $request
  65. * @param $em
  66. * @return mixed
  67. */
  68. private function trainerSave($tarea, $preguntas, $request,$em)
  69. {
  70. //Check if load on innerframe
  71. $modal=0;
  72. if (!empty($request->request->get('modal'))){
  73. $modal=1;
  74. }
  75. if (empty($request->request->get('ge'))) {
  76. $res['error'] = 'Unidentified Green Entrepreneur';
  77. return $this->renderWithExtraParams('admin/errorprecondition_view.html.twig', ['tarea' => $tarea, 'preguntas' => $preguntas, 'error' => $res['error']]);
  78. }
  79. //die('Llega hasta desvio'.print_r($request->request->get('ge')));
  80. $ge = $em->getRepository('App:Licitador')->findOneById([$request->request->get('ge')]);
  81. $tareasRealizadas = $em->getRepository('App:TareaGreenEnterpreneur')
  82. ->findBy(['greenEntrepreneur'=> $ge]);
  83. $sendMessage = $this->trainerSaveOnly($preguntas, $request, $ge, $em);
  84. if($sendMessage){
  85. $trainer = $this->getUser();
  86. $this->createChatAlert($trainer, $ge, $tarea->getId());
  87. }
  88. $tareasRealizadasGe = $em->getRepository('App:TareaGreenEnterpreneur')
  89. ->findBy(['greenEntrepreneur'=> $ge]);
  90. $tareasRealizadas=[];
  91. if ($tarea[0]->getId() ==$tarea[0]->getProcesosId()->getTareafinal()->getId()){
  92. return $this->renderWithExtraParams('admin/tarea_completada_view.html.twig', ['tarea' => $tarea, 'preguntas' => $preguntas]);
  93. }
  94. foreach($tareasRealizadasGe as $t){
  95. if($tarea[0]->getProcesosId()->getId()!==$t->getTarea()->getProcesosId()->getId())
  96. continue;
  97. $tareasRealizadas[]=$t->getTarea();
  98. }
  99. usort($tareasRealizadas, [$this,'comparator']);
  100. foreach($tarea[0]->getPostCondition() as $postcondition)
  101. {
  102. $acciones=json_decode($postcondition->getAction(), true);
  103. foreach($acciones as $accion){
  104. if($accion['tipo']==='redireccion'){
  105. return $this->redirectToRoute('realizar_tarea_comentar', ['id' => $accion['valor'], 'userge'=>$ge->getId(), 'modal'=>$modal], 307);
  106. }
  107. }
  108. }
  109. // foreach ($tareasRealizadas as $tareaRea) {
  110. // if($tarea[0]->getPosition()<$tareaRea->getPosition()){
  111. //// echo $tarea[0]->getPosition().'position=>'.$tareaRea->getPosition();
  112. //// die($this->generateUrl('realizar_tarea_comentar', ['id' => $tareaRea->getId(), 'userge'=>$ge->getId()]));
  113. // return $this->redirectToRoute('realizar_tarea_comentar', ['id' => $tareaRea->getId(), 'userge'=>$ge->getId()], 307);
  114. // }
  115. // }
  116. }
  117. /**
  118. * @param $tareaRealizada2
  119. * @param $preguntas
  120. * @param $em
  121. */
  122. private function fillRulesContext($tareaRealizada2,$preguntas,$em){
  123. if(!empty($tareaRealizada2)){
  124. $this->context->setMyDataSource($tareaRealizada2);
  125. }else{
  126. $this->context->setMyDataSource(null);
  127. }
  128. if(!empty($this->getUser())){
  129. $this->context->setMyUserContext($this->getUser());
  130. }else{
  131. $this->context->setMyUserContext(null);
  132. }
  133. $preguntasfiltered=null;
  134. foreach($preguntas as $pregunta){
  135. if($pregunta->getIsBifurcation()){
  136. $preguntasfiltered=$pregunta;
  137. }
  138. }
  139. $respuestasContext = $em->getRepository('App:Respuestas')
  140. ->findOneBy(['preguntas'=>$preguntasfiltered,'greenEntrepreneur'=> $this->getUser() ]);
  141. if(!empty($respuestasContext)){
  142. $this->context->setRespuestasContext($respuestasContext);
  143. }else{
  144. $this->context->setRespuestasContext(null);
  145. }
  146. }
  147. /**
  148. * @param $em
  149. * @param $tarea
  150. * @param $user
  151. * @param $preguntas
  152. * @param $request
  153. * @return mixed
  154. */
  155. private function geSave($em, $tarea, $user, $preguntas, $request){
  156. $tareaRealizada = $em->getRepository('App:TareaGreenEnterpreneur')
  157. ->findBy(['tarea'=>$tarea[0], 'greenEntrepreneur'=> $user]);
  158. $tareaRealizada2 = $em->getRepository('App:TareaGreenEnterpreneur')
  159. ->findBy(['greenEntrepreneur'=> $user]);
  160. $currentTaskId=$tarea[0]->getId();
  161. $currentTask = $em->getRepository('App:Tarea')->findOneById($currentTaskId);
  162. $respuestas=$this->geSaveOnly($preguntas, $request,$user, $em, false);
  163. $currentTask = $em->getRepository('App:Tarea')->findOneById($currentTaskId);
  164. if(empty($tareaRealizada[0])){
  165. $tareaRealizada=new TareaGreenEnterpreneur();
  166. $tareaRealizada->setCompletada(1);
  167. $tareaRealizada->setGreenEntrepreneur($user);
  168. $tareaRealizada->setTarea($currentTask);
  169. }else{
  170. $tareaRealizada[0]->setCompletada(1);
  171. $tareaRealizada=$tareaRealizada[0];
  172. }
  173. $em->persist($tareaRealizada);
  174. $em->flush();
  175. $this->fillRulesContext($tareaRealizada2,$preguntas,$em);
  176. $resultados=[];
  177. $resultado='';
  178. if ($currentTask->getId() == $currentTask->getProcesosId()->getTareafinal()->getId()){
  179. return $this->renderWithExtraParams('admin/tarea_completada_view.html.twig', ['tarea' => $tarea, 'preguntas' => $preguntas, 'respuestas' => $respuestas]);
  180. }
  181. $respos=[];
  182. if($currentTask->getPostcondition()) {
  183. foreach ($currentTask->getPostcondition() as $postcondicion) {
  184. if (!$postcondicion->getActive()) continue;
  185. if ($this->evaluator->evaluate($postcondicion, $this->context)) {
  186. $resultado = $this->executeConditionActions($user->getId(), $postcondicion->getId(), 'true');
  187. if (!empty($resultado)) {
  188. $respos[]='Si'.$postcondicion->getId().' '.$resultado;
  189. $resultados[] = $resultado;
  190. $res = json_decode($resultado, true);
  191. if (isset($res['error'])) {
  192. return $this->renderWithExtraParams('admin/errorprecondition_view.html.twig', ['tarea' => $tarea, 'preguntas' => $preguntas, 'respuestas' => $respuestas, 'error' => $res['error']]);
  193. }
  194. }
  195. } else {
  196. $resultado = $this->executeConditionActions($user->getId(), $postcondicion->getId(), 'false');
  197. if (!empty($resultado)) {
  198. $respos[]='No'.$postcondicion->getId().' '.$resultado;
  199. $resultados[] = $resultado;
  200. $res = json_decode($resultado, true);
  201. if (isset($res['error'])) {
  202. return $this->renderWithExtraParams('admin/errorprecondition_view.html.twig', ['tarea' => $tarea, 'preguntas' => $preguntas, 'respuestas' => $respuestas, 'error' => $res['error']]);
  203. }
  204. }
  205. }
  206. }
  207. foreach ($resultados as $resultado) {
  208. $res = json_decode($resultado, true);
  209. if (isset($res['route'])) {
  210. // die('llega aqui'.$user->getId().'-'.$postcondicion->getId().'-'.$res['route'].$res['id']);
  211. $this->executePrePostCondicions($currentTask, $user, $em);
  212. return $this->redirectToRoute($res['route'], ['id' => $res['id']], 307);
  213. }
  214. }
  215. }
  216. if($currentTask->getRepetible()){
  217. return $this->renderWithExtraParams($tarea[0]->getTemplateId()->getFilename(), ['tarea' =>$tarea, 'preguntas'=>$preguntas, 'respuestas'=>$respuestas, /*'respuestasarray'=>$respuestasArray, 'casoestudio'=>$respuestasCasoEstudio*/]);
  218. }
  219. return $this->renderWithExtraParams($tarea[0]->getTemplateId()->getFilename(), ['tarea' => $tarea, 'preguntas' => $preguntas, 'respuestas' => $respuestas]);
  220. }
  221. /**
  222. * @param $object1
  223. * @param $object2
  224. * @return bool
  225. */
  226. private function comparator($object1, $object2) {
  227. return $object1->getPosition() > $object2->getPosition();
  228. }
  229. /**
  230. * @param null $id
  231. */
  232. public function editAction($id=null)
  233. {
  234. $request = $this->requestStack->getCurrentRequest();
  235. $em = $this->getDoctrine()->getManager();
  236. $tarea = $em->getRepository('App:Tarea')
  237. ->findById($id);
  238. $preguntas = $tarea[0]->getPreguntasId();
  239. /** @var \App\Entity\Licitador $user */
  240. $user = $this->getUser();
  241. switch ($user->getType()) {
  242. case 'trainer':
  243. return $this->trainerSave($tarea,$preguntas, $request,$em);
  244. break;
  245. case 'green_entrepreneur':
  246. return $this->geSave($em, $tarea, $user, $preguntas, $request);
  247. break;
  248. default:
  249. $res['error']='User Type Not Allowed';
  250. return $this->renderWithExtraParams('admin/errorusuario_view.html.twig', ['tarea' => $tarea, 'preguntas' => $preguntas, 'error' => $res['error']]);
  251. break;
  252. }
  253. }
  254. private function createChatAlert($trainer, $receptor, $tareaId){
  255. $a1=$trainer->getSalas()->toArray();
  256. $a2=$receptor->getSalas()->toArray();
  257. $sala = array_uintersect($a1, $a2, function ($a,$b)
  258. {
  259. if ($a->getId() === $b->getId() && strtolower($b->getDenominacion()) === 'my trainer')
  260. {
  261. return 0;
  262. }
  263. return ($a>$b)?1:-1;
  264. });// end array_uintersect
  265. if(empty($sala)){
  266. return;
  267. }// end if
  268. if(is_array($sala)){
  269. $sala = array_shift($sala);
  270. }// end if
  271. $route = 'realizar_tarea_edit';
  272. $url = $this->generateUrl($route, ['id' => $tareaId]);
  273. $mensaje = $this->translator->trans("Tu trainer a realizado comentarios en la siguiente tarea:");
  274. $mensaje .= '<br><a href="'.$url.'">';
  275. $mensaje .=$this->translator->trans("Ver tarea").'</a>';
  276. // $mensaje = "Tu trainer a realizado comentarios en la siguiente tarea:" . '<br><a href="'.$url.'">Ver tarea</a>';
  277. $this->chatController->publishMessage($mensaje, $trainer, $sala);
  278. }
  279. }