src/Controller/Mantenimiento/Preventivo/PlanMantenimientoDiagramadoController.php line 515

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mantenimiento\Preventivo;
  3. use App\Entity\Equipos\Maquinaria;
  4. use App\Entity\Mantenimiento\Preventivo\PlanMantenimientoDiagramado;
  5. use App\Form\Mantenimiento\Preventivo\PlanMantenimientoDiagramadoType;
  6. use App\Repository\Mantenimiento\Preventivo\PlanMantenimientoDiagramadoRepository;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Doctrine\ORM\EntityRepository;
  12. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  13. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  14. use App\Repository\Mantenimiento\Preventivo\PlanMantenimientoRepository;
  15. use App\Entity\Mantenimiento\Preventivo\PlanMantenimiento;
  16. use App\Entity\Equipos\Maquinaria as Equipo;
  17. use App\Entity\Mantenimiento\Departamento;
  18. use App\Entity\Mantenimiento\PedidoReparacion;
  19. use App\Entity\Mantenimiento\Preventivo\TareaPlan;
  20. use App\Entity\Mantenimiento\Preventivo\TareaPlanDiagramada;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Symfony\Component\Form\Extension\Core\Type\DateType;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Knp\Snappy\Pdf;
  25. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  26. use Twig\Environment;
  27. /**
  28.  * @Route("/mantenimiento/preventivo/plan/diagramado")
  29.  */
  30. class PlanMantenimientoDiagramadoController extends AbstractController
  31. {
  32.      private $twig;
  33.     private $pdf;
  34.     public function __construct(Environment $twigPdf $pdf)
  35.     {
  36.         $this->twig $twig;
  37.         $this->pdf $pdf;
  38.     }
  39.     private function getFormFechas()
  40.     {
  41.         return $this->createFormBuilder()
  42.                     ->add('desde'
  43.                            DateType::class, 
  44.                            [
  45.                                 'widget' => 'single_text',
  46.                                 'required' => false,
  47.                                 'attr' => ['class' => 'form-control'],
  48.                             ])
  49.                     ->add('hasta'
  50.                            DateType::class, 
  51.                            [
  52.                                 'widget' => 'single_text',
  53.                                 'required' => false,
  54.                                 'attr' => ['class' => 'form-control'],
  55.                             ])
  56.                      ->getForm();
  57.     }
  58.     private function getFormSelectPeriodo()
  59.     {
  60.         return $this->createFormBuilder()
  61.                     ->add('periodo', \Symfony\Component\Form\Extension\Core\Type\ChoiceType::class, [
  62.                         'choices' => [
  63.                             'Semanal' => 7,
  64.                             'Mensual' => 30,
  65.                             'Semestral' => 180,
  66.                             'Anual' => 365,
  67.                         ],
  68.                         'attr' => ['class' => 'form-control form-select'],
  69.                     ])
  70.                     ->add('submit'
  71.                           SubmitType::class, [
  72.                                                 'label' => 'Cargar Planes',
  73.                                                 'attr' => ['class' => 'btn btn-primary mt-4']
  74.                                                 ])
  75.                      ->getForm();
  76.     }
  77.     private function getFormSelectEquipo()
  78.     {
  79.         return $this->createFormBuilder()
  80.                     ->add('equipo'
  81.                            EntityType::class, 
  82.                            [
  83.                                 'class' => Maquinaria::class,
  84.                                 'query_builder' => function (EntityRepository $er) {
  85.                                                                                         return $er->createQueryBuilder('u')
  86.                                                                                                   ->andWhere('u.activo = :activo')
  87.                                                                                                   ->setParameter('activo'true)
  88.                                                                                                   ->orderBy('u.nombre''ASC');
  89.                                                                                     },
  90.                                 'group_by' => function($choice$key$value) {
  91.                                                                                     if ($choice && $choice->getSector()) 
  92.                                                                                     {
  93.                                                                                         return $choice->getSector() . '';
  94.                                                                                     }
  95.                                                                                     return 'Sin sector';
  96.                                                                                 },
  97.                             ])
  98.                      ->getForm();
  99.     }
  100.     private function getDataInformeMantPreventivo($dataPlanMantenimientoDiagramadoRepository $planMantenimientoRepository)
  101.     {
  102.             $planes $planMantenimientoRepository->informePlanesPreventivosRealizados($data);
  103.             $response = array();
  104.             foreach ($planes as $plan
  105.             {
  106.                 $planM $plan->getPlanMantenimiento(); 
  107.                 $tareas = [];
  108.                 foreach ($plan->getTareasDiagramadas() as $tareaDiagramada
  109.                 {
  110.                     $id $tareaDiagramada->getId();
  111.                     $tareas[$id] = [
  112.                         'nombre' => $tareaDiagramada->getTareaPlan()->getTarea(),
  113.                         'detalle' => $tareaDiagramada->getDetalle(),
  114.                         'realizada' => $tareaDiagramada->isRealizada()
  115.                     ];
  116.                     $insumos "";
  117.                     foreach ($tareaDiagramada->getInsumos() as $insumo)  
  118.                     {
  119.                         foreach ($insumo->getItems() as $item)
  120.                         {
  121.                             $insumos.= "Articulo: ".$item->getArticulo() . " Cant: " .$item->getCantidad() . ")  // ";
  122.                             
  123.                         }                        
  124.                     }
  125.                     $tareas[$id]['insumos'] = $insumos;
  126.                 }
  127.                 $response[] = [
  128.                     'id' => $plan->getId(),
  129.                     'equipo' => $plan->getEquipo() . '',
  130.                     'nombre' => $planM->getNombre(),
  131.                     'departamento' => $plan->getDepartamento() . '',
  132.                     'periodicidad' => $planM->getFrecuenciaPlan(),
  133.                     'fechaRealizacion' => $plan->getFechaRealizacion() ? $plan->getFechaRealizacion()->format('d/m/Y') : null,
  134.                     'fechaSort' => $plan->getFechaRealizacion() ? $plan->getFechaRealizacion()->format('Y-m-d') : null,
  135.                     'tareas' => $tareas,
  136.                 ];      
  137.             }
  138.             return $response;
  139.     }
  140.     /**
  141.      * @Route("/print/informe/from/{from}/to/{to}/equipo/{equipo}/pdf", name="app_mantenimiento_preventivo_plan_mantenimiento_realizado_print", methods={"GET", "POST"})
  142.      */
  143.     public function informeToPdf($from$to$equipoPdf $knpSnappyPdfPlanMantenimientoDiagramadoRepository $planMantenimientoRepositoryEntityManagerInterface $em)
  144.     {
  145.         $data = [
  146.             'desde' => $from != ? new \DateTime($from) : null,
  147.             'hasta' => $to != ? new \DateTime($to) : null,
  148.             'equipo' => $equipo != $em->getRepository(Maquinaria::class)->find($equipo) : null,
  149.         ];
  150.         $planes $this->getDataInformeMantPreventivo($data$planMantenimientoRepository);
  151.         $html $this->twig->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/exportar_mant_realizado.html.twig', [ 'planes' => $planes'desde' => $data['desde'], 'hasta' => $data['hasta'], 'equipo' => $data['equipo'] ]);
  152.         $html mb_encode_numericentity($html, [0x800x10FFFF00xFFFF], 'UTF-8');
  153.         $this->pdf->setTimeout(600);
  154.         return new PdfResponse(
  155.             $this->pdf->getOutputFromHtml($html, [
  156.                 'margin-top'    => 10,
  157.                 'margin-right'  => 10,
  158.                 'margin-bottom' => 10,
  159.                 'margin-left'   => 10,
  160.                 'encoding'      => 'UTF-8',
  161.                 'page-size'     => 'A4',
  162.                 'orientation'   => 'Landscape',
  163.             ]),
  164.             'planes_pendientes.pdf'
  165.         );
  166.     }
  167.     /**
  168.      * @Route("/informe", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_informe", methods={"GET", "POST"})
  169.      */
  170.     public function informePlanesRealizados(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoRepositoryEntityManagerInterface $em): Response
  171.     {   
  172.         $form $this->createFormBuilder()
  173.                     ->add('desde'
  174.                            DateType::class, 
  175.                            [
  176.                                 'widget' => 'single_text',
  177.                                 'required' => false,
  178.                                 'attr' => ['class' => 'form-control'],
  179.                             ])
  180.                     ->add('hasta'
  181.                            DateType::class, 
  182.                            [
  183.                                 'widget' => 'single_text',
  184.                                 'required' => false,
  185.                                 'attr' => ['class' => 'form-control'],
  186.                             ])
  187.                     ->add('equipo'
  188.                            EntityType::class, 
  189.                            [
  190.                                 'class' => Maquinaria::class,
  191.                                 'required' => false,
  192.                                 'placeholder' => 'Todos los equipos',
  193.                                 'query_builder' => function (EntityRepository $er) {
  194.                                                                                         return $er->createQueryBuilder('u')
  195.                                                                                                   ->andWhere('u.activo = :activo')
  196.                                                                                                   ->setParameter('activo'true)
  197.                                                                                                   ->orderBy('u.nombre''ASC');
  198.                                                                                     },
  199.                                 'group_by' => function($choice$key$value) {
  200.                                                                                     if ($choice && $choice->getSector()) 
  201.                                                                                     {
  202.                                                                                         return $choice->getSector() . '';
  203.                                                                                     }
  204.                                                                                     return 'Sin sector';
  205.                                                                                 },
  206.                             ])
  207.                      ->getForm();
  208.         $form->handleRequest($request);
  209.         if ($form->isSubmitted() && $form->isValid()) 
  210.         {
  211.             $data $form->getData();
  212.             $url $this->generateUrl('app_mantenimiento_preventivo_plan_mantenimiento_realizado_print', [
  213.                 'from' => $data['desde'] ? $data['desde']->format('Y-m-d') : 0,
  214.                 'to' => $data['hasta'] ? $data['hasta']->format('Y-m-d') : 0,
  215.                 'equipo' => $data['equipo'] ? $data['equipo']->getId() : 0,
  216.             ]);
  217.             $response $this->getDataInformeMantPreventivo($data$planMantenimientoRepository);
  218.             return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/informe.html.twig'
  219.                                 [
  220.                                     'form' => $form->createView(),
  221.                                     'planes' => $response,
  222.                                     'url' => $url
  223.                                 ]);
  224.         }
  225.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/informe.html.twig'
  226.                              [
  227.                                 'form' => $form->createView(),
  228.                              ]);
  229.     }
  230.     /**
  231.      * @Route("/proximos/preventivos/realizar", name="app_mantenimiento_preventivo_plan_mantenimiento_proximos", methods={"GET", "POST"})
  232.      */
  233.     public function proximosPreventivos(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoRepository): Response
  234.     {   
  235.         $formFechas $this->getFormFechas();
  236.         $formFechas->handleRequest($request);
  237.         if ($formFechas->isSubmitted() && $formFechas->isValid()) 
  238.         {
  239.             $data $formFechas->getData();
  240.             $desde $data['desde'] ?? new \DateTime('now');
  241.             $hasta $data['hasta'] ?? (new \DateTime('now'))->modify('+1 month');
  242.             $planes $planMantenimientoRepository->proximosPlanesMantenimientoEquipos($desde$hasta);
  243.             return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/proximos.html.twig', [
  244.                 'form' => $formFechas->createView(),
  245.                 'planes' => $planes,
  246.                 'desde' => $desde,
  247.                 'hasta' => $hasta,
  248.             ]);
  249.         }
  250.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/proximos.html.twig', [
  251.                             'form' => $formFechas->createView(),
  252.         ]);
  253.     }
  254.     /**
  255.      * @Route("/gestion/masiva", name="app_mantenimiento_preventivo_plan_mantenimiento_gestion_masiva", methods={"GET", "POST"})
  256.      */
  257.     public function gestionMasiva(Request $requestPlanMantenimientoRepository $planMantenimientoRepository): Response
  258.     {   
  259.         $form $this->getFormSelectPeriodo();
  260.         $form->handleRequest($request);
  261.         if ($form->isSubmitted() && $form->isValid()) 
  262.         {
  263.             $data $form->getData();
  264.             $periodo $data['periodo'];
  265.             $planes $planMantenimientoRepository->findPlanesActivosPorEquipoConUltimaFechaRealizacion($periodo);
  266.             return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/masivo.html.twig', [
  267.                 'form' => $form->createView(),
  268.                 'planes' => $planes,
  269.                 'periodo' => $periodo,
  270.                 'departamentos' => $this->getUser()->getDepartamentos(),
  271.             ]); 
  272.         }
  273.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/masivo.html.twig', [
  274.                             'form' => $form->createView(),
  275.         ]);
  276.     }
  277.     /**
  278.      * @Route("/gestion/masiva/procesar", name="app_mantenimiento_preventivo_plan_mantenimiento_gestion_masiva_procesar", methods={"POST"})
  279.      */
  280.     public function gestionMasivaProcesar(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepositoryEntityManagerInterface $em): Response
  281.     {   
  282.         $all $request->request->all();
  283.         if (!$all['departamento'])
  284.         {
  285.             return new JsonResponse([
  286.                 'status' => false,
  287.                 'message' => 'Debe seleccionar un departamento.',
  288.             ]);
  289.         }
  290.         $departamento $em->find(Departamento::class, $all['departamento']);
  291.         $fechaSeleccionada = \DateTime::createFromFormat('Y-m-d'$all['fecha_diagramacion']);
  292.         $numeroSemana= (int)$fechaSeleccionada->format('W');
  293.         $numeroAnio= (int)$fechaSeleccionada->format('Y');
  294.         $numeroMes = (int)$fechaSeleccionada->format('m');
  295.         $planesDiagramados = [];
  296.         foreach ($all as $key => $value
  297.         {
  298.             $diagramar false;
  299.             if (strpos($key'switch-') === 0
  300.             {
  301.                 $parts explode('-'str_replace('switch-'''$key));
  302.                 if (count($parts) == 3
  303.                 {
  304.                     $periodo $parts[2];
  305.                     $plan $em->find(PlanMantenimiento::class, $parts[0]);
  306.                     $equipo $em->find(Maquinaria::class, $parts[1]);
  307.                     $fechaDiagramado $planMantenimientoDiagramadoRepository->findUltimaFechaDiagramada($plan$equipo$fechaSeleccionada);
  308.                    
  309.                     if (!count($fechaDiagramado) )
  310.                     {
  311.                         $diagramar true;
  312.                     }
  313.                     else
  314.                     {
  315.                         if ($periodo == 7)
  316.                         {
  317.                                 $planesDiagramados[$key] = ["El plan se encuentra diagramado esta semana."false];
  318.                         }
  319.                         elseif ($periodo == 30)
  320.                         {
  321.                                 $planesDiagramados[$key] = ["El plan se encuentra diagramado este mes."false];
  322.                         }
  323.                         elseif ($periodo == 365)
  324.                         {
  325.                                 $planesDiagramados[$key] = ["El plan se encuentra diagramado este año."false];
  326.                             
  327.                         }
  328.                     }
  329.                     if ($diagramar)
  330.                     {
  331.                         $planDiagramado = new PlanMantenimientoDiagramado();
  332.                         $planDiagramado->setPlanMantenimiento($plan)
  333.                                         ->setEquipo($equipo)
  334.                                         ->setFechaDiagrama($fechaSeleccionada)
  335.                                         ->setDepartamento($departamento);
  336.                         $em->persist($planDiagramado);
  337.                         foreach ($plan->getTareas() as $tarea
  338.                         {
  339.                             $tareaPlanDiagramada = new TareaPlanDiagramada();
  340.                             $tareaPlanDiagramada->setTareaPlan($tarea)
  341.                                                 ->setDetalle($tarea->getDetalle())
  342.                                                 ->setPlanMantenimientoDiagramado($planDiagramado)
  343.                                                 ->setRealizada(false);
  344.                             $em->persist($tareaPlanDiagramada);
  345.                         }  
  346.                         
  347.                         $planesDiagramados[$key] = ["Plan mantenimineto diagramado exitosamente."true];
  348.                     }
  349.                     
  350.                 }
  351.             }
  352.         }
  353.         $em->flush();
  354.         if (count($planesDiagramados) === 0
  355.         {
  356.             return new JsonResponse([
  357.                 'status' => false,
  358.                 'message' => 'No se seleccionaron planes para diagramar.',
  359.             ]);
  360.         }
  361.         return new JsonResponse([
  362.             'status' => true,
  363.             'planesDiagramados' => $planesDiagramados,
  364.             'fecha' => $fechaSeleccionada->format('d/m/Y'),
  365.         ]);
  366.     }
  367.     /**
  368.      * @Route("/marcar/{id}/diagramado", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_realizar", methods={"GET", "POST"})
  369.      */
  370.     public function marcarDiagramado(PlanMantenimientoDiagramado $planDiagramadoEntityManagerInterface $em): Response
  371.     {   
  372.         if ($planDiagramado->isRealizado()) 
  373.         {
  374.             return new JsonResponse([
  375.                 'status' => false,
  376.                 'message' => 'El plan de mantenimiento ya ha sido realizado.',
  377.             ]);
  378.         }
  379.         $dias $planDiagramado->getPlanMantenimiento()->getPeriodicidad();
  380.         $proximaFecha = new \DateTime();
  381.         $proximaFecha->modify("+$dias days");       
  382.         $planDiagramado->setFechaProximaRealizacion($proximaFecha);
  383.         $planDiagramado->setRealizado(true);
  384.         $planDiagramado->setFechaRealizacion(new \DateTime());
  385.         $em->flush();
  386.         return new JsonResponse([
  387.             'status' => true,
  388.             'message' => 'Plan de mantenimiento marcado como realizado.',
  389.             'fechaProximaRealizacion' => $proximaFecha->format('d/m/Y'),
  390.         ]);
  391.     
  392.     }
  393.     /**
  394.      * @Route("/print/{id}/plan", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_print", methods={"GET", "POST"})
  395.      */
  396.     public function pdfAction(PlanMantenimientoDiagramado $planMantenimientoDiagramadoPdf $knpSnappyPdf)
  397.     {
  398.         $html $this->twig->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/imprimir.html.twig', [ 'plan' => $planMantenimientoDiagramado ]);
  399.         $this->pdf->setTimeout(600);
  400.         return new PdfResponse(
  401.             $this->pdf->getOutputFromHtml($html),
  402.             'file.pdf'
  403.         );
  404.     }
  405.         /**
  406.      * @Route("/print/pendiente", name="app_mantenimiento_preventivo_plan_mantenimiento_pendiente_realizar_print", methods={"GET", "POST"})
  407.      */
  408.     public function pdfActionListaPendientes(Pdf $knpSnappyPdfPlanMantenimientoDiagramadoRepository $planMantenimientoRepository)
  409.     {
  410.         $planes $planMantenimientoRepository->planesMantenimientoEquiposPendientes();
  411.         $html $this->twig->render('mantenimiento/diagrama_tarea/imprimirPlanesPendientes.html.twig', [ 'planes' => $planes ]);
  412.         $this->pdf->setTimeout(600);
  413.         return new PdfResponse(
  414.             $this->pdf->getOutputFromHtml($html),
  415.             'planes_pendientes.pdf'
  416.         );
  417.     }
  418.     /**
  419.      * @Route("/pendientes/realizar", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_pendientes_index", methods={"GET", "POST"})
  420.      */
  421.     public function planesPendientes(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoRepository): Response
  422.     {   
  423.         $planes $planMantenimientoRepository->planesMantenimientoEquiposPendientes();
  424.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/administrar.html.twig', [
  425.                             'planes' => $planes,
  426.         ]);
  427.     }
  428.     /**
  429.      * @Route("/pendientes/{id}/gestionar", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_administrar_tareas", methods={"GET", "POST"})
  430.      */
  431.     public function gestionarPlanDiagramado(PlanMantenimientoDiagramado $planMantenimientoDiagramado): Response
  432.     {   
  433.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/administrarTareas.html.twig', [
  434.                             'plan' => $planMantenimientoDiagramado,
  435.         ]);
  436.     } 
  437.     /**
  438.      * @Route("/pendientes/{id}/gestionar/procesar/tareas", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_procesar_tareas", methods={"GET", "POST"})
  439.      */
  440.     public function gestionarTareasDiagramado(Request $requestEntityManagerInterface $emPlanMantenimientoDiagramado $planMantenimientoDiagramado): Response
  441.     {   
  442.         if ($planMantenimientoDiagramado->isRealizado()) 
  443.         {
  444.             return new JsonResponse([
  445.                 'status' => false,
  446.                 'message' => 'El plan de mantenimiento ya ha sido realizado.',
  447.             ]);
  448.         }
  449.         $all $request->request->all();
  450.         try{
  451.                 foreach ($all as $key => $value
  452.                 {
  453.                     if (strpos($key'observa_') === 0
  454.                     {
  455.                         $tareaId str_replace('observa_'''$key);
  456.                         $tarea $em->find(TareaPlanDiagramada::class, $tareaId);
  457.                         if ($tarea
  458.                         {
  459.                             $realizada = isset($all['realizada_' $tareaId]) ? true false;
  460.                             $tarea->setRealizada($realizada)
  461.                                     ->setDetalle($value);
  462.                             if (isset($all['diagramar_' $tareaId]))
  463.                             {
  464.                                 $pedidoReparacion = new PedidoReparacion();
  465.                                 $pedidoReparacion->setTareaPlanDiagramada($tarea)
  466.                                                 ->setFecha(new \DateTimeImmutable())
  467.                                                 ->setDetalle($tarea->getTareaPlan()->getTarea())
  468.                                                 ->setSector($planMantenimientoDiagramado->getEquipo()->getSector())
  469.                                                 ->setEquipo($planMantenimientoDiagramado->getEquipo())
  470.                                                 ->setUsuarioAlta($this->getUser());
  471.                                 $em->persist($pedidoReparacion);
  472.                             }
  473.                         }
  474.                     }
  475.                 }
  476.                 $dias $planMantenimientoDiagramado->getPlanMantenimiento()->getPeriodicidad();
  477.                 $proximaFecha = new \DateTime();
  478.                 $proximaFecha->modify("+$dias days");       
  479.                 $planMantenimientoDiagramado->setFechaProximaRealizacion($proximaFecha);
  480.                 $planMantenimientoDiagramado->setRealizado(true);
  481.                 $planMantenimientoDiagramado->setFechaRealizacion(new \DateTime());
  482.                 $em->flush();
  483.                 return new JsonResponse([
  484.                     'status' => true,
  485.                     'message' => 'Tareas procesadas exitosamente.',
  486.                     'fechaProximaRealizacion' => $proximaFecha->format('d/m/Y'),
  487.                 ]);
  488.         } catch (\Exception $e) {
  489.             return new JsonResponse([
  490.                 'status' => false,
  491.                 'message' => 'Error al procesar las tareas: ' $e->getMessage(),
  492.             ]);
  493.         }    
  494.     }
  495.     /**
  496.      * @Route("/", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index", methods={"GET", "POST"})
  497.      */
  498.     public function pleaseGo(Request $requestPlanMantenimientoRepository $planMantenimientoRepositoryEntityManagerInterface $em): Response
  499.     {   
  500.         $form $this->getFormSelectEquipo();
  501.         if ($request->isMethod('POST')) 
  502.         {
  503.             $form->handleRequest($request);
  504.             if ($form->isValid()) 
  505.             {
  506.                 
  507.                 $equipo $form->get('equipo')->getData();
  508.                 $planes $planMantenimientoRepository->planesMantenimientoEquipos($equipo);
  509.                 $dptos $em->getRepositoryDepartamento::class  )->findAll();
  510.                 return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  511.                     'form' => $form->createView(),
  512.                     'planes' => $planes,
  513.                     'equipo' => $equipo,
  514.                     'dptos' => $dptos
  515.                 ]);
  516.             }
  517.         }
  518.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  519.             'form' => $form->createView(),
  520.         ]);
  521.     }
  522.     /**
  523.      * @Route("/home", name="app_mantenimiento_preventivo_plx", methods={"GET", "POST"})
  524.      */
  525.     public function indiceHome(Request $requestPlanMantenimientoRepository $planMantenimientoRepositoryEntityManagerInterface $em): Response
  526.     {   
  527.         $form $this->getFormSelectEquipo();
  528.   /////
  529.         if ($request->isMethod('POST')) 
  530.         {
  531.             $form->handleRequest($request);
  532.             if ($form->isValid()) 
  533.             {
  534.                 $equipo $form->get('equipo')->getData();
  535.                 $planes $planMantenimientoRepository->planesMantenimientoEquipos($equipo);
  536.                 $dptos $em->getRepositoryDepartamento::class  )->findAll();
  537.                 return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  538.                     'form' => $form->createView(),
  539.                     'planes' => $planes,
  540.                     'equipo' => $equipo,
  541.                     'dptos' => $dptos
  542.                 ]);
  543.             }
  544.         }
  545.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  546.             'form' => $form->createView(),
  547.         ]);
  548.     }
  549.     /**
  550.      * @Route("/diagramar/{plan}/equipo/{equipo}/departamento/{depto}", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramar", methods={"GET", "POST"})
  551.      */
  552.     public function diagramarPlan(PlanMantenimiento $planEquipo $equipoEntityManagerInterface $em$deptoPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  553.     {
  554.         
  555.         $existingPlan $planMantenimientoDiagramadoRepository->findPlanMantenimiento($plan$equipo);
  556.         $depto $em->find(Departamento::class, $depto);
  557.         if ($existingPlan
  558.         {
  559.             return new JsonResponse([
  560.                 'status' => false,
  561.                 'message' => 'El plan de mantenimiento ya ha sido diagramado para este equipo. ' ,
  562.             ]);
  563.         }
  564.         
  565.         $planMantenimientoDiagramado = new PlanMantenimientoDiagramado();
  566.         $planMantenimientoDiagramado->setPlanMantenimiento($plan)
  567.                                     ->setEquipo($equipo)
  568.                                     ->setFechaDiagrama(new \DateTime())
  569.                                     ->setDepartamento($depto)
  570.                                     ->setRealizado(false);
  571.         foreach ($plan->getTareas() as $tarea
  572.         {
  573.             $tareaPlanDiagramada = new TareaPlanDiagramada();
  574.             $tareaPlanDiagramada->setTareaPlan($tarea)
  575.                                 ->setPlanMantenimientoDiagramado($planMantenimientoDiagramado)
  576.                                 ->setRealizada(false);
  577.             $em->persist($tareaPlanDiagramada);
  578.         }   
  579.         $em->persist($planMantenimientoDiagramado);
  580.         $em->flush();   
  581.         return new JsonResponse([
  582.             'status' => true,
  583.             'message' => 'Plan de mantenimiento diagramado exitosamente.',
  584.             'idPlan' => $planMantenimientoDiagramado->getId(),
  585.         ]);
  586.     }
  587.     /**
  588.      * @Route("/new", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_new", methods={"GET", "POST"})
  589.      */
  590.     public function new(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  591.     {
  592.         $planMantenimientoDiagramado = new PlanMantenimientoDiagramado();
  593.         $form $this->createForm(PlanMantenimientoDiagramadoType::class, $planMantenimientoDiagramado);
  594.         $form->handleRequest($request);
  595.         if ($form->isSubmitted() && $form->isValid()) {
  596.             $planMantenimientoDiagramadoRepository->add($planMantenimientoDiagramadotrue);
  597.             return $this->redirectToRoute('app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index', [], Response::HTTP_SEE_OTHER);
  598.         }
  599.         return $this->renderForm('mantenimiento/preventivo/plan_mantenimiento_diagramado/new.html.twig', [
  600.             'plan_mantenimiento_diagramado' => $planMantenimientoDiagramado,
  601.             'form' => $form,
  602.         ]);
  603.     }
  604.     /**
  605.      * @Route("/{id}", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_show", methods={"GET", "POST"})
  606.      */
  607.     public function show(PlanMantenimientoDiagramado $planMantenimientoDiagramado): Response
  608.     {
  609.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/show.html.twig', [
  610.             'plan_mantenimiento_diagramado' => $planMantenimientoDiagramado,
  611.         ]);
  612.     }
  613.        /**
  614.      * @Route("/{id}/edit", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_edit", methods={"GET", "POST"})
  615.      */
  616.     public function edit(Request $requestPlanMantenimientoDiagramado $planMantenimientoDiagramadoPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  617.     {
  618.         $form $this->createForm(PlanMantenimientoDiagramadoType::class, $planMantenimientoDiagramado);
  619.         $form->handleRequest($request);
  620.         if ($form->isSubmitted() && $form->isValid()) {
  621.             $planMantenimientoDiagramadoRepository->add($planMantenimientoDiagramadotrue);
  622.             return $this->redirectToRoute('app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index', [], Response::HTTP_SEE_OTHER);
  623.         }
  624.         return $this->renderForm('mantenimiento/preventivo/plan_mantenimiento_diagramado/edit.html.twig', [
  625.             'plan_mantenimiento_diagramado' => $planMantenimientoDiagramado,
  626.             'form' => $form,
  627.         ]);
  628.     }
  629.        /**
  630.      * @Route("/{id}", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_delete", methods={"GET", "POST"})
  631.      */
  632.     public function delete(Request $requestPlanMantenimientoDiagramado $planMantenimientoDiagramadoPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  633.     {
  634.         if ($this->isCsrfTokenValid('delete'.$planMantenimientoDiagramado->getId(), $request->request->get('_token'))) {
  635.             $planMantenimientoDiagramadoRepository->remove($planMantenimientoDiagramadotrue);
  636.         }
  637.         return $this->redirectToRoute('app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index', [], Response::HTTP_SEE_OTHER);
  638.     }
  639. }