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

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.     /**
  101.      * @Route("/informe", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_informe", methods={"GET", "POST"})
  102.      */
  103.     public function informePlanesRealizados(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoRepositoryEntityManagerInterface $em): Response
  104.     {   
  105.         $form $this->createFormBuilder()
  106.                     ->add('desde'
  107.                            DateType::class, 
  108.                            [
  109.                                 'widget' => 'single_text',
  110.                                 'required' => false,
  111.                                 'attr' => ['class' => 'form-control'],
  112.                             ])
  113.                     ->add('hasta'
  114.                            DateType::class, 
  115.                            [
  116.                                 'widget' => 'single_text',
  117.                                 'required' => false,
  118.                                 'attr' => ['class' => 'form-control'],
  119.                             ])
  120.                     ->add('equipo'
  121.                            EntityType::class, 
  122.                            [
  123.                                 'class' => Maquinaria::class,
  124.                                 'required' => false,
  125.                                 'placeholder' => 'Todos los equipos',
  126.                                 'query_builder' => function (EntityRepository $er) {
  127.                                                                                         return $er->createQueryBuilder('u')
  128.                                                                                                   ->andWhere('u.activo = :activo')
  129.                                                                                                   ->setParameter('activo'true)
  130.                                                                                                   ->orderBy('u.nombre''ASC');
  131.                                                                                     },
  132.                                 'group_by' => function($choice$key$value) {
  133.                                                                                     if ($choice && $choice->getSector()) 
  134.                                                                                     {
  135.                                                                                         return $choice->getSector() . '';
  136.                                                                                     }
  137.                                                                                     return 'Sin sector';
  138.                                                                                 },
  139.                             ])
  140.                      ->getForm();
  141.         $form->handleRequest($request);
  142.         if ($form->isSubmitted() && $form->isValid()) 
  143.         {
  144.             $data $form->getData();
  145.             $planes $planMantenimientoRepository->informePlanesPreventivosRealizados($data);
  146.             $response = array();
  147.             foreach ($planes as $plan
  148.             {
  149.                 $planM $plan->getPlanMantenimiento(); 
  150.                 $insumos = [];
  151.                 foreach ($plan->getTareasDiagramadas() as $tareaDiagramada
  152.                 {
  153.                     foreach ($tareaDiagramada->getInsumos() as $insumo)  
  154.                     {
  155.                         foreach ($insumo->getItems() as $item)
  156.                         {
  157.                             $insumos[] = [
  158.                                 'nombre' => $item->getArticulo() . '',
  159.                                 'cantidad' => $item->getCantidad(),
  160.                             ];
  161.                         }
  162.                     }
  163.                 }
  164.                 $response[] = [
  165.                     'id' => $plan->getId(),
  166.                     'equipo' => $plan->getEquipo() . '',
  167.                     'nombre' => $planM->getNombre(),
  168.                     'departamento' => $plan->getDepartamento() . '',
  169.                     'periodicidad' => $planM->getFrecuenciaPlan(),
  170.                     'fechaRealizacion' => $plan->getFechaRealizacion() ? $plan->getFechaRealizacion()->format('d/m/Y') : null,
  171.                     'fechaSort' => $plan->getFechaRealizacion() ? $plan->getFechaRealizacion()->format('Y-m-d') : null,
  172.                     'insumos' => $insumos,
  173.                 ];
  174.                 
  175.             }
  176.             return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/informe.html.twig'
  177.                                 [
  178.                                     'form' => $form->createView(),
  179.                                     'planes' => $response,
  180.                                 ]);
  181.         }
  182.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/informe.html.twig'
  183.                              [
  184.                                 'form' => $form->createView(),
  185.                              ]);
  186.     }
  187.     /**
  188.      * @Route("/proximos/preventivos/realizar", name="app_mantenimiento_preventivo_plan_mantenimiento_proximos", methods={"GET", "POST"})
  189.      */
  190.     public function proximosPreventivos(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoRepository): Response
  191.     {   
  192.         $formFechas $this->getFormFechas();
  193.         $formFechas->handleRequest($request);
  194.         if ($formFechas->isSubmitted() && $formFechas->isValid()) 
  195.         {
  196.             $data $formFechas->getData();
  197.             $desde $data['desde'] ?? new \DateTime('now');
  198.             $hasta $data['hasta'] ?? (new \DateTime('now'))->modify('+1 month');
  199.             $planes $planMantenimientoRepository->proximosPlanesMantenimientoEquipos($desde$hasta);
  200.             return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/proximos.html.twig', [
  201.                 'form' => $formFechas->createView(),
  202.                 'planes' => $planes,
  203.                 'desde' => $desde,
  204.                 'hasta' => $hasta,
  205.             ]);
  206.         }
  207.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/proximos.html.twig', [
  208.                             'form' => $formFechas->createView(),
  209.         ]);
  210.     }
  211.     /**
  212.      * @Route("/gestion/masiva", name="app_mantenimiento_preventivo_plan_mantenimiento_gestion_masiva", methods={"GET", "POST"})
  213.      */
  214.     public function gestionMasiva(Request $requestPlanMantenimientoRepository $planMantenimientoRepository): Response
  215.     {   
  216.         $form $this->getFormSelectPeriodo();
  217.         $form->handleRequest($request);
  218.         if ($form->isSubmitted() && $form->isValid()) 
  219.         {
  220.             $data $form->getData();
  221.             $periodo $data['periodo'];
  222.             $planes $planMantenimientoRepository->findPlanesActivosPorEquipoConUltimaFechaRealizacion($periodo);
  223.             return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/masivo.html.twig', [
  224.                 'form' => $form->createView(),
  225.                 'planes' => $planes,
  226.                 'periodo' => $periodo,
  227.                 'departamentos' => $this->getUser()->getDepartamentos(),
  228.             ]); 
  229.         }
  230.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/masivo.html.twig', [
  231.                             'form' => $form->createView(),
  232.         ]);
  233.     }
  234.     /**
  235.      * @Route("/gestion/masiva/procesar", name="app_mantenimiento_preventivo_plan_mantenimiento_gestion_masiva_procesar", methods={"POST"})
  236.      */
  237.     public function gestionMasivaProcesar(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepositoryEntityManagerInterface $em): Response
  238.     {   
  239.         $all $request->request->all();
  240.         if (!$all['departamento'])
  241.         {
  242.             return new JsonResponse([
  243.                 'status' => false,
  244.                 'message' => 'Debe seleccionar un departamento.',
  245.             ]);
  246.         }
  247.         $departamento $em->find(Departamento::class, $all['departamento']);
  248.         $fechaSeleccionada = \DateTime::createFromFormat('Y-m-d'$all['fecha_diagramacion']);
  249.         $numeroSemana= (int)$fechaSeleccionada->format('W');
  250.         $numeroAnio= (int)$fechaSeleccionada->format('Y');
  251.         $numeroMes = (int)$fechaSeleccionada->format('m');
  252.         $planesDiagramados = [];
  253.         foreach ($all as $key => $value
  254.         {
  255.             $diagramar false;
  256.             if (strpos($key'switch-') === 0
  257.             {
  258.                 $parts explode('-'str_replace('switch-'''$key));
  259.                 if (count($parts) == 3
  260.                 {
  261.                     $periodo $parts[2];
  262.                     $plan $em->find(PlanMantenimiento::class, $parts[0]);
  263.                     $equipo $em->find(Maquinaria::class, $parts[1]);
  264.                     $fechaDiagramado $planMantenimientoDiagramadoRepository->findUltimaFechaDiagramada($plan$equipo$fechaSeleccionada);
  265.                    
  266.                     if (!count($fechaDiagramado) )
  267.                     {
  268.                         $diagramar true;
  269.                     }
  270.                     else
  271.                     {
  272.                         if ($periodo == 7)
  273.                         {
  274.                                 $planesDiagramados[$key] = ["El plan se encuentra diagramado esta semana."false];
  275.                         }
  276.                         elseif ($periodo == 30)
  277.                         {
  278.                                 $planesDiagramados[$key] = ["El plan se encuentra diagramado este mes."false];
  279.                         }
  280.                         elseif ($periodo == 365)
  281.                         {
  282.                                 $planesDiagramados[$key] = ["El plan se encuentra diagramado este año."false];
  283.                             
  284.                         }
  285.                     }
  286.                     if ($diagramar)
  287.                     {
  288.                         $planDiagramado = new PlanMantenimientoDiagramado();
  289.                         $planDiagramado->setPlanMantenimiento($plan)
  290.                                         ->setEquipo($equipo)
  291.                                         ->setFechaDiagrama($fechaSeleccionada)
  292.                                         ->setDepartamento($departamento);
  293.                         $em->persist($planDiagramado);
  294.                         foreach ($plan->getTareas() as $tarea
  295.                         {
  296.                             $tareaPlanDiagramada = new TareaPlanDiagramada();
  297.                             $tareaPlanDiagramada->setTareaPlan($tarea)
  298.                                                 ->setDetalle($tarea->getDetalle())
  299.                                                 ->setPlanMantenimientoDiagramado($planDiagramado)
  300.                                                 ->setRealizada(false);
  301.                             $em->persist($tareaPlanDiagramada);
  302.                         }  
  303.                         
  304.                         $planesDiagramados[$key] = ["Plan mantenimineto diagramado exitosamente."true];
  305.                     }
  306.                     
  307.                 }
  308.             }
  309.         }
  310.         $em->flush();
  311.         if (count($planesDiagramados) === 0
  312.         {
  313.             return new JsonResponse([
  314.                 'status' => false,
  315.                 'message' => 'No se seleccionaron planes para diagramar.',
  316.             ]);
  317.         }
  318.         return new JsonResponse([
  319.             'status' => true,
  320.             'planesDiagramados' => $planesDiagramados,
  321.             'fecha' => $fechaSeleccionada->format('d/m/Y'),
  322.         ]);
  323.     }
  324.     /**
  325.      * @Route("/marcar/{id}/diagramado", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_realizar", methods={"GET", "POST"})
  326.      */
  327.     public function marcarDiagramado(PlanMantenimientoDiagramado $planDiagramadoEntityManagerInterface $em): Response
  328.     {   
  329.         if ($planDiagramado->isRealizado()) 
  330.         {
  331.             return new JsonResponse([
  332.                 'status' => false,
  333.                 'message' => 'El plan de mantenimiento ya ha sido realizado.',
  334.             ]);
  335.         }
  336.         $dias $planDiagramado->getPlanMantenimiento()->getPeriodicidad();
  337.         $proximaFecha = new \DateTime();
  338.         $proximaFecha->modify("+$dias days");       
  339.         $planDiagramado->setFechaProximaRealizacion($proximaFecha);
  340.         $planDiagramado->setRealizado(true);
  341.         $planDiagramado->setFechaRealizacion(new \DateTime());
  342.         $em->flush();
  343.         return new JsonResponse([
  344.             'status' => true,
  345.             'message' => 'Plan de mantenimiento marcado como realizado.',
  346.             'fechaProximaRealizacion' => $proximaFecha->format('d/m/Y'),
  347.         ]);
  348.     
  349.     }
  350.     /**
  351.      * @Route("/print/{id}/plan", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_print", methods={"GET", "POST"})
  352.      */
  353.     public function pdfAction(PlanMantenimientoDiagramado $planMantenimientoDiagramadoPdf $knpSnappyPdf)
  354.     {
  355.         $html $this->twig->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/imprimir.html.twig', [ 'plan' => $planMantenimientoDiagramado ]);
  356.         $this->pdf->setTimeout(600);
  357.         return new PdfResponse(
  358.             $this->pdf->getOutputFromHtml($html),
  359.             'file.pdf'
  360.         );
  361.     }
  362.         /**
  363.      * @Route("/print/pendiente", name="app_mantenimiento_preventivo_plan_mantenimiento_pendiente_realizar_print", methods={"GET", "POST"})
  364.      */
  365.     public function pdfActionListaPendientes(Pdf $knpSnappyPdfPlanMantenimientoDiagramadoRepository $planMantenimientoRepository)
  366.     {
  367.         $planes $planMantenimientoRepository->planesMantenimientoEquiposPendientes();
  368.         $html $this->twig->render('mantenimiento/diagrama_tarea/imprimirPlanesPendientes.html.twig', [ 'planes' => $planes ]);
  369.         $this->pdf->setTimeout(600);
  370.         return new PdfResponse(
  371.             $this->pdf->getOutputFromHtml($html),
  372.             'planes_pendientes.pdf'
  373.         );
  374.     }
  375.     /**
  376.      * @Route("/pendientes/realizar", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_pendientes_index", methods={"GET", "POST"})
  377.      */
  378.     public function planesPendientes(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoRepository): Response
  379.     {   
  380.         $planes $planMantenimientoRepository->planesMantenimientoEquiposPendientes();
  381.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/administrar.html.twig', [
  382.                             'planes' => $planes,
  383.         ]);
  384.     }
  385.     /**
  386.      * @Route("/pendientes/{id}/gestionar", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_administrar_tareas", methods={"GET", "POST"})
  387.      */
  388.     public function gestionarPlanDiagramado(PlanMantenimientoDiagramado $planMantenimientoDiagramado): Response
  389.     {   
  390.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/administrarTareas.html.twig', [
  391.                             'plan' => $planMantenimientoDiagramado,
  392.         ]);
  393.     } 
  394.     /**
  395.      * @Route("/pendientes/{id}/gestionar/procesar/tareas", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_procesar_tareas", methods={"GET", "POST"})
  396.      */
  397.     public function gestionarTareasDiagramado(Request $requestEntityManagerInterface $emPlanMantenimientoDiagramado $planMantenimientoDiagramado): Response
  398.     {   
  399.         if ($planMantenimientoDiagramado->isRealizado()) 
  400.         {
  401.             return new JsonResponse([
  402.                 'status' => false,
  403.                 'message' => 'El plan de mantenimiento ya ha sido realizado.',
  404.             ]);
  405.         }
  406.         $all $request->request->all();
  407.         try{
  408.                 foreach ($all as $key => $value
  409.                 {
  410.                     if (strpos($key'observa_') === 0
  411.                     {
  412.                         $tareaId str_replace('observa_'''$key);
  413.                         $tarea $em->find(TareaPlanDiagramada::class, $tareaId);
  414.                         if ($tarea
  415.                         {
  416.                             $realizada = isset($all['realizada_' $tareaId]) ? true false;
  417.                             $tarea->setRealizada($realizada)
  418.                                     ->setDetalle($value);
  419.                             if (isset($all['diagramar_' $tareaId]))
  420.                             {
  421.                                 $pedidoReparacion = new PedidoReparacion();
  422.                                 $pedidoReparacion->setTareaPlanDiagramada($tarea)
  423.                                                 ->setFecha(new \DateTimeImmutable())
  424.                                                 ->setDetalle($tarea->getTareaPlan()->getTarea())
  425.                                                 ->setSector($planMantenimientoDiagramado->getEquipo()->getSector())
  426.                                                 ->setEquipo($planMantenimientoDiagramado->getEquipo())
  427.                                                 ->setUsuarioAlta($this->getUser());
  428.                                 $em->persist($pedidoReparacion);
  429.                             }
  430.                         }
  431.                     }
  432.                 }
  433.                 $dias $planMantenimientoDiagramado->getPlanMantenimiento()->getPeriodicidad();
  434.                 $proximaFecha = new \DateTime();
  435.                 $proximaFecha->modify("+$dias days");       
  436.                 $planMantenimientoDiagramado->setFechaProximaRealizacion($proximaFecha);
  437.                 $planMantenimientoDiagramado->setRealizado(true);
  438.                 $planMantenimientoDiagramado->setFechaRealizacion(new \DateTime());
  439.                 $em->flush();
  440.                 return new JsonResponse([
  441.                     'status' => true,
  442.                     'message' => 'Tareas procesadas exitosamente.',
  443.                     'fechaProximaRealizacion' => $proximaFecha->format('d/m/Y'),
  444.                 ]);
  445.         } catch (\Exception $e) {
  446.             return new JsonResponse([
  447.                 'status' => false,
  448.                 'message' => 'Error al procesar las tareas: ' $e->getMessage(),
  449.             ]);
  450.         }    
  451.     }
  452.     /**
  453.      * @Route("/", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index", methods={"GET", "POST"})
  454.      */
  455.     public function pleaseGo(Request $requestPlanMantenimientoRepository $planMantenimientoRepositoryEntityManagerInterface $em): Response
  456.     {   
  457.         $form $this->getFormSelectEquipo();
  458.         if ($request->isMethod('POST')) 
  459.         {
  460.             $form->handleRequest($request);
  461.             if ($form->isValid()) 
  462.             {
  463.                 
  464.                 $equipo $form->get('equipo')->getData();
  465.                 $planes $planMantenimientoRepository->planesMantenimientoEquipos($equipo);
  466.                 $dptos $em->getRepositoryDepartamento::class  )->findAll();
  467.                 return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  468.                     'form' => $form->createView(),
  469.                     'planes' => $planes,
  470.                     'equipo' => $equipo,
  471.                     'dptos' => $dptos
  472.                 ]);
  473.             }
  474.         }
  475.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  476.             'form' => $form->createView(),
  477.         ]);
  478.     }
  479.     /**
  480.      * @Route("/home", name="app_mantenimiento_preventivo_plx", methods={"GET", "POST"})
  481.      */
  482.     public function indiceHome(Request $requestPlanMantenimientoRepository $planMantenimientoRepositoryEntityManagerInterface $em): Response
  483.     {   
  484.         $form $this->getFormSelectEquipo();
  485.   /////
  486.         if ($request->isMethod('POST')) 
  487.         {
  488.             $form->handleRequest($request);
  489.             if ($form->isValid()) 
  490.             {
  491.                 $equipo $form->get('equipo')->getData();
  492.                 $planes $planMantenimientoRepository->planesMantenimientoEquipos($equipo);
  493.                 $dptos $em->getRepositoryDepartamento::class  )->findAll();
  494.                 return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  495.                     'form' => $form->createView(),
  496.                     'planes' => $planes,
  497.                     'equipo' => $equipo,
  498.                     'dptos' => $dptos
  499.                 ]);
  500.             }
  501.         }
  502.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/index.html.twig', [
  503.             'form' => $form->createView(),
  504.         ]);
  505.     }
  506.     /**
  507.      * @Route("/diagramar/{plan}/equipo/{equipo}/departamento/{depto}", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramar", methods={"GET", "POST"})
  508.      */
  509.     public function diagramarPlan(PlanMantenimiento $planEquipo $equipoEntityManagerInterface $em$deptoPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  510.     {
  511.         
  512.         $existingPlan $planMantenimientoDiagramadoRepository->findPlanMantenimiento($plan$equipo);
  513.         $depto $em->find(Departamento::class, $depto);
  514.         if ($existingPlan
  515.         {
  516.             return new JsonResponse([
  517.                 'status' => false,
  518.                 'message' => 'El plan de mantenimiento ya ha sido diagramado para este equipo. ' ,
  519.             ]);
  520.         }
  521.         
  522.         $planMantenimientoDiagramado = new PlanMantenimientoDiagramado();
  523.         $planMantenimientoDiagramado->setPlanMantenimiento($plan)
  524.                                     ->setEquipo($equipo)
  525.                                     ->setFechaDiagrama(new \DateTime())
  526.                                     ->setDepartamento($depto)
  527.                                     ->setRealizado(false);
  528.         foreach ($plan->getTareas() as $tarea
  529.         {
  530.             $tareaPlanDiagramada = new TareaPlanDiagramada();
  531.             $tareaPlanDiagramada->setTareaPlan($tarea)
  532.                                 ->setPlanMantenimientoDiagramado($planMantenimientoDiagramado)
  533.                                 ->setRealizada(false);
  534.             $em->persist($tareaPlanDiagramada);
  535.         }   
  536.         $em->persist($planMantenimientoDiagramado);
  537.         $em->flush();   
  538.         return new JsonResponse([
  539.             'status' => true,
  540.             'message' => 'Plan de mantenimiento diagramado exitosamente.',
  541.             'idPlan' => $planMantenimientoDiagramado->getId(),
  542.         ]);
  543.     }
  544.     /**
  545.      * @Route("/new", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_new", methods={"GET", "POST"})
  546.      */
  547.     public function new(Request $requestPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  548.     {
  549.         $planMantenimientoDiagramado = new PlanMantenimientoDiagramado();
  550.         $form $this->createForm(PlanMantenimientoDiagramadoType::class, $planMantenimientoDiagramado);
  551.         $form->handleRequest($request);
  552.         if ($form->isSubmitted() && $form->isValid()) {
  553.             $planMantenimientoDiagramadoRepository->add($planMantenimientoDiagramadotrue);
  554.             return $this->redirectToRoute('app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index', [], Response::HTTP_SEE_OTHER);
  555.         }
  556.         return $this->renderForm('mantenimiento/preventivo/plan_mantenimiento_diagramado/new.html.twig', [
  557.             'plan_mantenimiento_diagramado' => $planMantenimientoDiagramado,
  558.             'form' => $form,
  559.         ]);
  560.     }
  561.     /**
  562.      * @Route("/{id}", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_show", methods={"GET", "POST"})
  563.      */
  564.     public function show(PlanMantenimientoDiagramado $planMantenimientoDiagramado): Response
  565.     {
  566.         return $this->render('mantenimiento/preventivo/plan_mantenimiento_diagramado/show.html.twig', [
  567.             'plan_mantenimiento_diagramado' => $planMantenimientoDiagramado,
  568.         ]);
  569.     }
  570.        /**
  571.      * @Route("/{id}/edit", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_edit", methods={"GET", "POST"})
  572.      */
  573.     public function edit(Request $requestPlanMantenimientoDiagramado $planMantenimientoDiagramadoPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  574.     {
  575.         $form $this->createForm(PlanMantenimientoDiagramadoType::class, $planMantenimientoDiagramado);
  576.         $form->handleRequest($request);
  577.         if ($form->isSubmitted() && $form->isValid()) {
  578.             $planMantenimientoDiagramadoRepository->add($planMantenimientoDiagramadotrue);
  579.             return $this->redirectToRoute('app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index', [], Response::HTTP_SEE_OTHER);
  580.         }
  581.         return $this->renderForm('mantenimiento/preventivo/plan_mantenimiento_diagramado/edit.html.twig', [
  582.             'plan_mantenimiento_diagramado' => $planMantenimientoDiagramado,
  583.             'form' => $form,
  584.         ]);
  585.     }
  586.        /**
  587.      * @Route("/{id}", name="app_mantenimiento_preventivo_plan_mantenimiento_diagramado_delete", methods={"GET", "POST"})
  588.      */
  589.     public function delete(Request $requestPlanMantenimientoDiagramado $planMantenimientoDiagramadoPlanMantenimientoDiagramadoRepository $planMantenimientoDiagramadoRepository): Response
  590.     {
  591.         if ($this->isCsrfTokenValid('delete'.$planMantenimientoDiagramado->getId(), $request->request->get('_token'))) {
  592.             $planMantenimientoDiagramadoRepository->remove($planMantenimientoDiagramadotrue);
  593.         }
  594.         return $this->redirectToRoute('app_mantenimiento_preventivo_plan_mantenimiento_diagramado_index', [], Response::HTTP_SEE_OTHER);
  595.     }
  596. }