src/Controller/Mantenimiento/DiagramaTareaController.php line 371

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mantenimiento;
  3. use App\Entity\Mantenimiento\DiagramaTarea;
  4. use App\Form\Mantenimiento\DiagramaTareaType;
  5. use App\Repository\Mantenimiento\DiagramaTareaRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use App\Repository\Mantenimiento\PedidoReparacionRepository;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use App\Entity\Mantenimiento\PedidoReparacionDiagramado;
  14. use App\Repository\Mantenimiento\PedidoReparacionDiagramadoRepository;
  15. use Knp\Snappy\Pdf;
  16. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  17. use Twig\Environment;
  18. use App\Repository\Equipos\MaquinariaRepository;
  19. use  App\Entity\Equipos\Maquinaria;
  20. use App\Entity\Mantenimiento\Departamento;
  21. use App\Entity\Mantenimiento\SectorPlanta;
  22. use Doctrine\ORM\EntityRepository;
  23. use Doctrine\ORM\QueryBuilder;
  24. use Symfony\Component\Form\Extension\Core\Type\DateType;
  25. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  26. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  27. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  28. use Symfony\Component\Validator\Constraints\Choice;
  29. /**
  30.  * @Route("/mantenimiento/organigrama/tarea")
  31.  */
  32. class DiagramaTareaController extends AbstractController
  33. {
  34.     private $twig;
  35.     private $pdf;
  36.     public function __construct(Environment $twigPdf $pdf)
  37.     {
  38.         $this->twig $twig;
  39.         $this->pdf $pdf;
  40.     }
  41.     private function getFormSelect()
  42.     {
  43.         $user $this->getUser();
  44.         return $this->createFormBuilder()
  45.                     ->add('from'DateType::class, [
  46.                                 'widget' => 'single_text',
  47.                             ])
  48.                     ->add('to'DateType::class, [
  49.                                 'widget' => 'single_text',
  50.                             ])
  51.                     ->add('equipo',  
  52.                             EntityType::class, 
  53.                             [
  54.                                 'class' => Maquinaria::class,
  55.                                 'group_by' => function($choice$key$value) {
  56.                                                                                     if ($choice->getSector()) 
  57.                                                                                     {
  58.                                                                                         return $choice->getSector() . '';
  59.                                                                                     }
  60.                                                                                     return 'Sin Sector';
  61.                                                                                 },
  62.                                 'query_builder' => function (EntityRepository $er) use ($user): QueryBuilder {
  63.                                                                                                     return $er->createQueryBuilder('u')
  64.                                                                                                               ->andWhere('u.sector IN (:sectores)')
  65.                                                                                                               ->setParameter('sectores'$user->getSectores())
  66.                                                                                                               ->orderBy('u.nombre''ASC');
  67.                                                                                                  }
  68.                             ]
  69.                         )
  70.                     ->add('cargar'SubmitType::class)
  71.                      ->getForm();
  72.     }
  73.     /**
  74.      * @Route("/informe", name="app_mantenimiento_informe_mantenimiento", methods={"GET", "POST"})
  75.      */
  76.     public function informeMantenimiento(Request $requestDiagramaTareaRepository $diagramaTareaRepository): Response
  77.     {
  78.         $form $this->getFormSelect();
  79.         if ($request->isMethod('POST'))
  80.         {
  81.             $form->handleRequest($request);
  82.             if ($form->isValid())
  83.             {
  84.                 $data $form->getData();
  85.                 $history $diagramaTareaRepository->getHitorialTrabajosEquipo($data);
  86.                 return $this->render('mantenimiento/informes/index.html.twig'
  87.                                     [
  88.                                         'form' => $form->createView(),
  89.                                         'history' => $history
  90.                                     ]);
  91.             }
  92.         }
  93.         return $this->render('mantenimiento/informes/index.html.twig'
  94.                             [
  95.                                 'form' => $form->createView(),
  96.                             ]);
  97.     }
  98.     /**
  99.      * @Route("/print/{id}/diagrama", name="app_mantenimiento_diagrama_tarea_imprimir", methods={"GET"})
  100.      */
  101.     public function pdfAction(DiagramaTarea $diagramaTareaPdf $knpSnappyPdf)
  102.     {
  103.         $html $this->twig->render('mantenimiento/diagrama_tarea/imprimir.html.twig', [ 'diagrama' => $diagramaTarea ]);
  104.         $this->pdf->setTimeout(600);
  105.         return new PdfResponse(
  106.             $this->pdf->getOutputFromHtml($html),
  107.             'file.pdf'
  108.         );
  109.     }
  110.     /**
  111.      * @Route("/", name="app_mantenimiento_diagrama_tarea_index", methods={"GET", "POST"})
  112.      */
  113.     public function index(Request $requestDiagramaTareaRepository $diagramaTareaRepositoryEntityManagerInterface $entityManager): Response
  114.     {
  115.         $user $this->getUser();
  116.         $form $this->createFormBuilder()
  117.                      ->add('estado'ChoiceType::class, [
  118.                                 'choices'  => [
  119.                                     'Todos' => 0,
  120.                                     'Pendientes' => 1,
  121.                                     'Procesados' => 2,
  122.                                 ],
  123.                                 'data' => true,
  124.                             ])
  125.                      ->add('departamento'EntityType::class, [
  126.                                 'class' => Departamento::class,
  127.                                 'required' => false,
  128.                                 'placeholder' => 'Todos',
  129.                                 'choices' => $user->getDepartamentos(),
  130.                             ])
  131.                     ->add('desde'DateType::class, [
  132.                                 'widget' => 'single_text',
  133.                             ])
  134.                     ->add('hasta'DateType::class, [
  135.                                 'widget' => 'single_text',
  136.                             ])
  137.                      ->getForm();
  138.         if ($request->isMethod('POST'))
  139.         {
  140.             $form->handleRequest($request);
  141.             $data $form->getData();
  142.             return $this->render('mantenimiento/diagrama_tarea/index.html.twig', [
  143.                 'diagrama_tareas' => $diagramaTareaRepository->getDiagramas($this->getUser(), $data),
  144.                 'form' => $form->createView()
  145.             ]);
  146.             
  147.         }
  148.         else
  149.         {
  150.             $queryParams $request->query->all();
  151.             if (count($queryParams) > 0)
  152.             {
  153.                 $data = array();
  154.                 $data['desde'] = array_key_exists('desde'$queryParams) && $queryParams['desde'] ? \DateTime::createFromFormat('U'$queryParams['desde']) : null;
  155.                 $data['hasta'] = array_key_exists('hasta'$queryParams) && $queryParams['hasta'] ? \DateTime::createFromFormat('U'$queryParams['hasta']) : null;
  156.                 $data['departamento'] = array_key_exists('departamento'$queryParams) && $queryParams['departamento'] ? $queryParams['departamento'] : null;
  157.                 $data['estado'] = array_key_exists('procesado'$queryParams) && $queryParams['procesado'] ? $queryParams['procesado'] : null;
  158.                 $form $this->createFormBuilder()
  159.                             ->add('estado'ChoiceType::class, [
  160.                                         'choices'  => [
  161.                                             'Todos' => 0,
  162.                                             'Pendientes' => 1,
  163.                                             'Procesados' => 2,
  164.                                         ],
  165.                                         'data' => $data['estado'],
  166.                                     ])
  167.                             ->add('departamento'EntityType::class, [
  168.                                         'class' => Departamento::class,
  169.                                         'required' => false,
  170.                                         'placeholder' => 'Todos',
  171.                                         'choices' => $user->getDepartamentos(),
  172.                                                     'data' => $data['departamento'] ? $entityManager->getRepository(Departamento::class)->find($data['departamento']) : null,
  173.                   
  174.                                     ])
  175.                             ->add('desde'DateType::class, [
  176.                                         'widget' => 'single_text',
  177.                                         'data' => $data['desde'],
  178.                                     ])
  179.                             ->add('hasta'DateType::class, [
  180.                                         'widget' => 'single_text',
  181.                                         'data' => $data['hasta'],
  182.                                     ])
  183.                             ->getForm();
  184.                 return $this->render('mantenimiento/diagrama_tarea/index.html.twig', [
  185.                     'diagrama_tareas' => $diagramaTareaRepository->getDiagramas($this->getUser(), $data),
  186.                     'form' => $form->createView()
  187.                 ]);
  188.             }
  189.         }
  190.         return $this->render('mantenimiento/diagrama_tarea/index.html.twig', [
  191.             'diagrama_tareas' => $diagramaTareaRepository->getDiagramas($this->getUser(), array('estado' => 1)),
  192.             'form' => $form->createView()
  193.         ]);
  194.     }
  195.     /**
  196.      * @Route("/new", name="app_mantenimiento_diagrama_tarea_new", methods={"GET", "POST"})
  197.      */
  198.     public function new(Request $request
  199.                         DiagramaTareaRepository $diagramaTareaRepository
  200.                         PedidoReparacionRepository $pedidoReparacionRepository,
  201.                         EntityManagerInterface $entityManager,
  202.                         MaquinariaRepository $repoEquipo): Response
  203.     {
  204.         
  205.         
  206.         $listaEquipos $repoEquipo->listEquiposActivos();
  207.         $equipos = array();
  208.         foreach ($listaEquipos as $e)
  209.         {
  210.             $key $e['sector'] ? $e['sector'] : 'Sin sector asignado';
  211.             if (!array_key_exists($key$equipos))
  212.             {
  213.                 $equipos[$key] = array();
  214.             }
  215.             $equipos[$key][] = $e;
  216.         }
  217.         $diagramaTarea = new DiagramaTarea();
  218.         $diagramaTarea->setFecha(new \DateTime());
  219.         $form $this->createForm(DiagramaTareaType::class, $diagramaTarea, ['user' => $this->getUser()] );
  220.         $form->handleRequest($request);
  221.         $departamentos $this->getUser()->getDepartamentos();
  222.         $sectores $this->getUser()->getSectores();
  223.         if ($request->isMethod('POST')) 
  224.         {
  225.             if ($form->isValid())
  226.             {
  227.                 $all $request->request->all();
  228.                 $emptySelect true;
  229.                 $emptyDetail false;
  230.                 $emptyDate false;
  231.                 ///Usado para validar la informacion 
  232.                     foreach ($all as $k => $v)
  233.                     {
  234.                         $key explode('-'$k);
  235.                         if ($key[0] == 'pedido')//Esta marcado el swith para diagramar la tarea, debe verificar si esta diagramada la tarea
  236.                         {
  237.                             $emptySelect false;
  238.                             $detail $all["task-" $key[1]];
  239.                             if (!$detail)
  240.                             {
  241.                                 $emptyDetail true;
  242.                             }
  243.                             $date $all["date-" $key[1]];
  244.                             if (!$date)
  245.                             {
  246.                                 $emptyDate true;
  247.                             }
  248.                         }
  249.                     }
  250.                 ///Fin validar informacion
  251.                 if ($emptySelect)
  252.                 {
  253.                     return new JsonResponse(['ok' => false'message' => 'Debe seleccionar al menos una tarea a realizar']);
  254.                 }
  255.                 elseif($emptyDetail)
  256.                 {
  257.                     return new JsonResponse(['ok' => false'message' => 'Todas las tareas deben ser completadas con las acciones a realizar']);
  258.                 }
  259.                 elseif($emptyDate)
  260.                 {
  261.                     return new JsonResponse(['ok' => false'message' => 'Todas las tareas deben tener la fecha de ejecucion']);
  262.                 }     
  263.                 foreach ($all as $k => $v)
  264.                 {
  265.                     $key explode('-'$k);
  266.                     if ($key[0] == 'pedido')
  267.                     {
  268.                         $detail $all["task-" $key[1]];
  269.                         $pedido $pedidoReparacionRepository->find($key[1]);
  270.                         if ($pedido)
  271.                         {
  272.                             $pedido->setDiagramada(true);
  273.                             
  274.                             $date $all["date-" $key[1]];
  275.                             $fecha = \DateTime::createFromFormat("Y-m-d"$date);
  276.                             $pedidoDiagramado = new PedidoReparacionDiagramado();
  277.                             $pedidoDiagramado->setObservacionResponsable($detail)
  278.                                              ->setDiagrama($diagramaTarea)
  279.                                              ->setPedido($pedido)
  280.                                              ->setFecha($fecha);
  281.                             
  282.                             $idEquipo $all["team-" $key[1]];
  283.                             if ($idEquipo)
  284.                             {
  285.                                 $team $repoEquipo->find($idEquipo);
  286.                                 if ($team)
  287.                                 {
  288.                                     $pedidoDiagramado->setEquipo($team);
  289.                                 }
  290.                             } 
  291.                             $entityManager->persist($pedidoDiagramado);
  292.                             //$diagramaTarea->addPedido($pedido);
  293.                         }
  294.                     }
  295.                 }
  296.                 $entityManager->persist($diagramaTarea);
  297.                 $entityManager->flush();
  298.                 return new JsonResponse( ['ok' => true] );
  299.               //  return $this->redirectToRoute('app_mantenimiento_diagrama_tarea_index', [], Response::HTTP_SEE_OTHER);
  300.             }
  301.             return new JsonResponse(['ok' => false'message' => 'Debe completar todos los campos para realizar la diagramacion de las tareas']);
  302.         }
  303.         $departamento $request->query->get('departamento'0);
  304.         $sector $request->query->get('sector'0);
  305.         $pedidos $pedidoReparacionRepository->pedidosPendienteDiagramarWithSectorYDepartamento($this->getUser(), $departamento$sector);
  306.         return $this->renderForm('mantenimiento/diagrama_tarea/new.html.twig', [
  307.             'diagrama_tarea' => $diagramaTarea,
  308.             'pedidosReparacion' => $pedidos,
  309.             'equipos' => $equipos,
  310.             'form' => $form,
  311.             'departamentos' => $departamentos,
  312.             'sectores' => $sectores,
  313.             'filtroDepartamento' => $departamento,
  314.             'filtroSector' => $sector
  315.         ]); 
  316.     }
  317.     /**
  318.      * @Route("/{id}", name="app_mantenimiento_diagrama_tarea_show", methods={"GET"})
  319.      */
  320.     public function show(DiagramaTarea $diagramaTareaRequest $request): Response
  321.     {
  322.         $parameteres $request->query->all();
  323.         //throw new \Exception(print_r($queryParams, true));
  324.         return $this->render('mantenimiento/diagrama_tarea/show.html.twig', [
  325.             'diagrama_tarea' => $diagramaTarea,
  326.             'params' => $parameteres
  327.         ]);
  328.     }
  329.     /**
  330.      * @Route("/{id}/procesar", name="app_mantenimiento_diagrama_tarea_procesar", methods={"GET", "POST"})
  331.      */
  332.     public function procesar(DiagramaTarea $diagramaTarea
  333.                             Request $request
  334.                             EntityManagerInterface $entityManager
  335.                             PedidoReparacionDiagramadoRepository $pedidoReparacionRepository): Response
  336.     {
  337.             $parameteres $request->query->all();
  338.           //  throw new \Exception(print_r($parameteres, true));
  339.             $all $request->request->all();
  340.             foreach ($all as $k => $v)
  341.             {
  342.                 $key explode('-'$k);
  343.                 if ($key[0] == 'pedido')
  344.                 {
  345.                     $detail $all["task-" $key[1]];
  346.                     $pedido $pedidoReparacionRepository->find($key[1]);
  347.                     if ($pedido)
  348.                     {
  349.                         $pedidoOriginal $pedido->getPedido();
  350.                         $pedidoOriginal->setRealizada(true);
  351.                         $pedido->setRealizada(true)
  352.                                 ->setObservacionReparacion($detail);
  353.                     }
  354.                 }
  355.             }
  356.             $diagramaTarea->setProcesado(true);
  357.             $entityManager->flush();
  358.       //      {desde : params.desde, hasta : params.hasta, departamento : params.departamento, procesado : params.procesad
  359.             return $this->redirectToRoute('app_mantenimiento_diagrama_tarea_index'
  360.                                           [
  361.                                             'desde' => $parameteres['desde'],
  362.                                             'hasta' => $parameteres['hasta'],
  363.                                             'departamento' => $parameteres['departamento'],
  364.                                             'procesado' => $parameteres['procesado']
  365.                                           ], 
  366.                                           Response::HTTP_SEE_OTHER);
  367.             return new JsonResponse( ['ok' => true] );
  368.     }
  369.     /**
  370.      * @Route("/{id}/edit", name="app_mantenimiento_diagrama_tarea_edit", methods={"GET", "POST"})
  371.      */
  372.     public function edit(Request $request
  373.                          DiagramaTarea $diagramaTarea
  374.                          EntityManagerInterface $entityManager,
  375.                          PedidoReparacionDiagramadoRepository $pedidoReparacionDiagramadaRepository,
  376.                          PedidoReparacionRepository $pedidoReparacionRepository): Response
  377.     {
  378.         $ids = array();
  379.         $all $request->request->all();
  380.         foreach ($diagramaTarea->getTareas() as $t)
  381.         {
  382.             $p $t->getPedido();
  383.             $ids[] = $p->getId();
  384.         }
  385.         $pedidos $pedidoReparacionRepository->pedidosPendienteDiagramar($this->getUser(), $ids);
  386.         $form $this->createForm(DiagramaTareaType::class, $diagramaTarea, ['user' => $this->getUser()] );
  387.         $form->handleRequest($request);
  388.         if ($form->isSubmitted() && $form->isValid()) 
  389.         {
  390.             foreach ($all as $k => $v)
  391.             {
  392.                 $key explode('-'$k);
  393.                 if ($key[0] == 'task')
  394.                 {
  395.                     
  396.                     $detail $v;
  397.                     $pedido $pedidoReparacionDiagramadaRepository->find($key[1]);
  398.                     if ($pedido)
  399.                     {
  400.                        // throw new \Exception(print_r($k .' encontro ' . $detail));
  401.                         $pedido->setObservacionResponsable($detail);
  402.                     }
  403.                 }
  404.             }
  405.             $entityManager->flush();
  406.             
  407.             return $this->redirectToRoute('app_mantenimiento_diagrama_tarea_index', [], Response::HTTP_SEE_OTHER);
  408.         }
  409.         return $this->renderForm('mantenimiento/diagrama_tarea/edit.html.twig', [
  410.             'diagrama_tarea' => $diagramaTarea,
  411.             'form' => $form,
  412.             'pedidos' => $pedidos
  413.         ]);
  414.     }
  415.     /**
  416.      * @Route("/{id}/remove/tarea", name="app_mantenimiento_diagrama_tarea_quitar_de_diagrama", methods={"GET", "POST"})
  417.      */
  418.     public function removePedido(Request $request
  419.                                  PedidoReparacionDiagramado $pedido
  420.                                  EntityManagerInterface $entityManager): Response
  421.     {
  422.         $diagrama $pedido->getDiagrama();
  423.         if ($diagrama->isProcesado())
  424.         {
  425.             return new JsonResponse([ 'ok' => false'msg' => 'El diagrama ya ha sido procesado' ]); 
  426.         }
  427.         $entityManager->remove($pedido);
  428.         $entityManager->flush();
  429.         return new JsonResponse(['ok' => true]);
  430.     }
  431.     /**
  432.      * @Route("/{id}/add/pedido", name="app_mantenimiento_diagrama_tarea_agregar_a_diagrama", methods={"GET", "POST"})
  433.      */
  434.     public function addPedido(Request $request
  435.                               DiagramaTarea $diagramaTarea
  436.                               EntityManagerInterface $entityManager,
  437.                               PedidoReparacionRepository $pedidoReparacionRepository): Response
  438.     {
  439.         if ($diagramaTarea->isProcesado())
  440.         {
  441.             return new JsonResponse([ 'ok' => false'msg' => 'El diagrama ya ha sido procesado' ]); 
  442.         }
  443.         $task $request->request->get('id');
  444.         $detail $request->request->get('detail');
  445.         if (!$detail)
  446.         {
  447.             return new JsonResponse([ 'ok' => false'msg' => 'El campo Tarea a Realizar no puede permanecer en blanco' ]);
  448.         }
  449.         $pedido $pedidoReparacionRepository->find($task);
  450.         if (!$pedido)
  451.         {
  452.             
  453.             return new JsonResponse([ 'ok' => false'msg' => 'No se encuentra la tarea a diagramar' ]);
  454.         
  455.         }
  456.         $pedidoDiagramado = new PedidoReparacionDiagramado();
  457.         $pedidoDiagramado->setObservacionResponsable($detail)
  458.                          ->setDiagrama($diagramaTarea)
  459.                          ->setPedido($pedido);
  460.         $entityManager->persist($pedidoDiagramado);
  461.         $pedido->setDiagramada(true);  
  462.         $entityManager->flush();
  463.         return new JsonResponse(['ok' => true]);
  464.     }
  465.     /**
  466.      * @Route("/{id}/eliminar", name="app_mantenimiento_diagrama_tarea_delete", methods={"POST"})
  467.      */
  468.     public function delete(Request $requestDiagramaTarea $diagramaTareaDiagramaTareaRepository $diagramaTareaRepository): Response
  469.     {
  470.         if ($diagramaTarea->isProcesado())
  471.         {
  472.             if ( $diagramaTarea->getTareas()->count() > )
  473.             {
  474.                 return new JsonResponse([ 'ok' => false'msg' => 'El diagrama tiene tareas asignadas, debe primero eliminar las mismas' ]);            
  475.             }
  476.            // return new JsonResponse([ 'ok' => false, 'msg' => 'El diagrama ya ha sido procesado. No es posible la eliminacion' ]);            
  477.         }
  478.         $diagramaTareaRepository->remove($diagramaTareatrue);
  479.         
  480.         return new JsonResponse(['ok' => true]);
  481.     }
  482. }