src/Controller/ProgManttoPreventivoController.php line 937

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Red;
  4. use App\Entity\Otro;
  5. use App\Entity\Equipo;
  6. use App\Entity\Impresora;
  7. use App\Entity\Periodo;
  8. use App\Entity\Solicitud;
  9. use App\Entity\Ubicacion;
  10. use App\Entity\Usuario;
  11. use App\Form\PAMPFiltroType;
  12. use App\Form\SolicitudType;
  13. use App\Repository\SolicitudRepository;
  14. use DateTime;
  15. use Doctrine\DBAL\Exception;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Doctrine\ORM\EntityRepository;
  18. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. #[Route('/programacion/preventivo')]
  26. class ProgManttoPreventivoController extends AbstractController
  27. {
  28.     public EntityManagerInterface $entityManager;
  29.     /**
  30.      * @param EntityManagerInterface $entityManager
  31.      */
  32.     public function __construct(EntityManagerInterface $entityManager)
  33.     {
  34.         $this->entityManager $entityManager;
  35.     }
  36.     #[Route('/'name'prog_preventivo_index')]
  37.     public function index(Request $request): Response
  38.     {
  39.         /** @var Usuario $user */
  40.         $user $this->getUser();
  41.         $perfil $request->getSession()->get('perfil');
  42.         $nivel $perfil[8]['nivel'];
  43.         if ($nivel == 0) {
  44.             $this->addFlash('danger''El acceso al módulo de "Programación de Mantenimiento Preventivo" está restringido.');
  45.             return $this->redirectToRoute('homepage');
  46.         }
  47.         $equipo $this->entityManager->getRepository(Equipo::class)->findBy([
  48.             'unidad' => $user->getUnidad()->getIdUni()
  49.         ]);
  50.         $red $this->entityManager->getRepository(Red::class)->findBy([
  51.             'unidad' => $user->getUnidad()->getIdUni()
  52.         ]);
  53.         $impresora $this->entityManager->getRepository(Impresora::class)->findBy([
  54.             'unidad' => $user->getUnidad()->getIdUni()
  55.         ]);
  56.         $otro $this->entityManager->getRepository(Otro::class)->findBy([
  57.             'unidad' => $user->getUnidad()->getIdUni()
  58.         ]);
  59.         $solicitud $this->entityManager->getRepository(Solicitud::class)->findBy([
  60.             'unidad' => $user->getUnidad()->getIdUni()
  61.         ]);
  62.         $cTodoEquipo $this->vistaContador();
  63.         $form $this->createFormBuilder()
  64.             ->add('ubicacion'EntityType::class, [
  65.                 'class' => Ubicacion::class,
  66.                 'attr' => ['class' => 'form-control'],
  67.                 'placeholder' => 'Todo',
  68.                 'query_builder' => function (EntityRepository $er) use ($user) {
  69.                     return $er->createQueryBuilder('u')
  70.                         ->where('u.unidad = :unidad')
  71.                         ->andWhere('u.activo = :estatus')
  72.                         ->orderBy('u.area''ASC')
  73.                         ->setParameter('unidad'$user->getUnidad()->getIdUni())
  74.                         ->setParameter('estatus'1)
  75.                         ;
  76.                 }
  77.             ])
  78.             ->getForm();
  79.         $form->handleRequest($request);
  80.         if ($request->isMethod('POST')) {
  81.             if (empty($form['ubicacion']->getData())) {
  82.                 $equipos $this->entityManager->getRepository(Equipo::class)->findBy([
  83.                     'unidad' => $user->getUnidad()->getIdUni()
  84.                 ]);
  85.                 $impresoras $this->entityManager->getRepository(Impresora::class)->findBy([
  86.                     'unidad' => $user->getUnidad()->getIdUni()
  87.                 ]);
  88.                 $redes $this->entityManager->getRepository(Red::class)->findBy([
  89.                     'unidad' => $user->getUnidad()->getIdUni()
  90.                 ]);
  91.                 $otros $this->entityManager->getRepository(Otro::class)->findBy([
  92.                     'unidad' => $user->getUnidad()->getIdUni()
  93.                 ]);
  94.             } else {
  95.                 $equipos $this->entityManager->getRepository(Equipo::class)->findBy([
  96.                     'unidad' => $user->getUnidad()->getIdUni(),
  97.                     'ubicacion' => $form['ubicacion']->getData()
  98.                 ]);
  99.                 $impresoras $this->entityManager->getRepository(Impresora::class)->findBy([
  100.                     'unidad' => $user->getUnidad()->getIdUni(),
  101.                     'ubicacion' => $form['ubicacion']->getData()
  102.                 ]);
  103.                 $redes $this->entityManager->getRepository(Red::class)->findBy([
  104.                     'unidad' => $user->getUnidad()->getIdUni(),
  105.                     'ubicacion' => $form['ubicacion']->getData()
  106.                 ]);
  107.                 $otros $this->entityManager->getRepository(Otro::class)->findBy([
  108.                     'unidad' => $user->getUnidad()->getIdUni(),
  109.                     'ubicacion' => $form['ubicacion']->getData()
  110.                 ]);
  111.             }
  112.             $data = [];
  113.             foreach ($equipos as $e){
  114.                 $newUrl $this->generateUrl('prog_preventivo_solicitud_tipoa', ['id' => $e->getIdEqu()], UrlGeneratorInterface::ABSOLUTE_URL);
  115.                 $viewUrl $this->generateUrl('prog_preventivo_programada_tipoa', ['id' => $e->getIdEqu()], UrlGeneratorInterface::ABSOLUTE_URL);
  116.                 $data[] = [
  117.                     'tipo' => 'Equipo',
  118.                     'id' => $e->getIdEqu(),
  119.                     'marbete' => $e->getMarbete(),
  120.                     'descripcion' => $e->getDescripcion(),
  121.                     'marca' => $e->getMarca(),
  122.                     'ubicacion' => substr($e->getUnidad()->getIdUni(), 33) . " - " $e->getUbicacion()->getArea(),
  123.                     'usuario' => $e->getUsuario()->getNombre() . " " $e->getUsuario()->getPapellido() . " " $e->getUsuario()->getSapellido(),
  124.                     'mpe' => 'Por hacer',
  125.                     'nuevo' => $newUrl,
  126.                     'ver' => $viewUrl
  127.                 ];
  128.             }
  129.             foreach ($impresoras as $e){
  130.                 $newUrl $this->generateUrl('prog_preventivo_solicitud_tipob', ['id' => $e->getIdImp()], UrlGeneratorInterface::ABSOLUTE_URL);
  131.                 $viewUrl $this->generateUrl('prog_preventivo_programada_tipob', ['id' => $e->getIdImp()], UrlGeneratorInterface::ABSOLUTE_URL);
  132.                 $data[] = [
  133.                     'tipo' => 'Impresora',
  134.                     'id' => $e->getIdImp(),
  135.                     'marbete' => $e->getMarbete(),
  136.                     'descripcion' => $e->getDescripcion(),
  137.                     'marca' => $e->getMarca(),
  138.                     'ubicacion' => substr($e->getUnidad()->getIdUni(), 33) . " - " $e->getUbicacion()->getArea(),
  139.                     'usuario' => $e->getUsuario()->getNombre() . " " $e->getUsuario()->getPapellido() . " " $e->getUsuario()->getSapellido(),
  140.                     'mpe' => 'Por hacer',
  141.                     'nuevo' => $newUrl,
  142.                     'ver' => $viewUrl
  143.                 ];
  144.             }
  145.             foreach ($redes as $e){
  146.                 $newUrl $this->generateUrl('prog_preventivo_solicitud_tipoc', ['id' => $e->getIdRed()], UrlGeneratorInterface::ABSOLUTE_URL);
  147.                 $viewUrl $this->generateUrl('prog_preventivo_programada_tipoc', ['id' => $e->getIdRed()], UrlGeneratorInterface::ABSOLUTE_URL);
  148.                 $data[] = [
  149.                     'tipo' => 'Red',
  150.                     'id' => $e->getIdRed(),
  151.                     'marbete' => $e->getMarbete(),
  152.                     'descripcion' => $e->getDescripcion(),
  153.                     'marca' => $e->getMarca(),
  154.                     'ubicacion' => substr($e->getUnidad()->getIdUni(), 33) . " - " $e->getUbicacion()->getArea(),
  155.                     'usuario' => $e->getUsuario()->getNombre() . " " $e->getUsuario()->getPapellido() . " " $e->getUsuario()->getSapellido(),
  156.                     'mpe' => 'Por hacer',
  157.                     'nuevo' => $newUrl,
  158.                     'ver' => $viewUrl
  159.                 ];
  160.             }
  161.             foreach ($otros as $e){
  162.                 $newUrl $this->generateUrl('prog_preventivo_solicitud_tipod', ['id' => $e->getIdOtro()], UrlGeneratorInterface::ABSOLUTE_URL);
  163.                 $viewUrl $this->generateUrl('prog_preventivo_programada_tipod', ['id' => $e->getIdOtro()], UrlGeneratorInterface::ABSOLUTE_URL);
  164.                 $data[] = [
  165.                     'tipo' => 'Otro',
  166.                     'id' => $e->getIdOtro(),
  167.                     'marbete' => $e->getMarbete(),
  168.                     'descripcion' => $e->getDescripcion(),
  169.                     'marca' => $e->getMarca(),
  170.                     'ubicacion' => substr($e->getUnidad()->getIdUni(), 33) . " - " $e->getUbicacion()->getArea(),
  171.                     'usuario' => $e->getUsuario()->getNombre() . " " $e->getUsuario()->getPapellido() . " " $e->getUsuario()->getSapellido(),
  172.                     'mpe' => 'Por hacer',
  173.                     'nuevo' => $newUrl,
  174.                     'ver' => $viewUrl
  175.                 ];
  176.             }
  177.             return new JsonResponse($dataResponse::HTTP_OK);
  178.         }
  179.         return $this->render('prog_preventivo/index.html.twig', [
  180.             'equipo' => $equipo,
  181.             'red' => $red,
  182.             'impresora' => $impresora,
  183.             'otro' => $otro,
  184.             'cTodoEquipo' => $cTodoEquipo,
  185.             'form' => $form->createView()
  186.         ]);
  187.     }
  188.     /**
  189.      * Programa Anual de Mantenimiento Preventivo
  190.      * @throws Exception
  191.      */
  192.     #[Route('/pamp'name'pamp'methods: ['GET''POST'])]
  193.     public function pamp(SolicitudRepository $solRepRequest $request): Response
  194.     {
  195.         # Se obtiene el nivel de acceso
  196.         $perfil $request->getSession()->get('perfil');
  197.         $nivel $perfil[9]["nivel"];
  198.         # Si el nivel de acceso es 0 entonces se retorna a página de inicio
  199.         if ($nivel == 0) {
  200.             $this->addFlash('danger''El acceso al "Programa Anual de Mantenimiento Preventivo" está restringido.');
  201.             return $this->redirectToRoute('homepage');
  202.         }
  203.         date_default_timezone_set("America/Mexico_City");
  204.         /** @var Usuario $user */
  205.         $user $this->getUser();
  206.         $parameters $request->request->get('pamp_filtro');
  207.         if (empty($parameters)) {
  208.             $uni "";
  209.             $year date('Y');
  210.         } else {
  211.             $uni = (array_key_exists('unidad'$request->request->all()['pamp_filtro'])) ? $parameters['unidad'] : "";
  212.             $year $parameters['anio'];
  213.         }
  214.         $data = [];
  215.         if ($nivel == 2) {
  216.             $unidad true;
  217.             $solicitud $solRep->findByAnioUnidad($year$uni);
  218.             $conteo $solRep->countByUnidad($uni);
  219.         } else {
  220.             $unidad false;
  221.             $solicitud $solRep->findByAnioUnidad($year$user->getUnidad()->getIdUni());
  222.             $conteo $solRep->countByUnidad($user->getUnidad()->getIdUni());
  223.         }
  224.         if ($request->isMethod('POST')) {
  225.             $response = [];
  226.             $cont 1;
  227.             foreach ($solicitud as $i) {
  228.                 $url $this->generateUrl('prog_preventivo_reprogramar', ['id' => $i['id_sol']]);
  229.                 $mesP date('m'strtotime($i['fatencion']));
  230.                 $diaP date('d'strtotime($i['fatencion']));
  231.                 if (empty($i['fevaluacion'])) {
  232.                     $mesR "00";
  233.                     $diaR "00";
  234.                 } else {
  235.                     $mesR date('m'strtotime($i['fevaluacion']));
  236.                     $diaR date('d'strtotime($i['fevaluacion']));
  237.                 }
  238.                 $response[] = [
  239.                     'n' => $cont,
  240.                     'id_sol' => $i['id_sol'],
  241.                     'marbete' => $i['marbete'],
  242.                     'usuario' => $i['usuario'],
  243.                     'tipo_equipo' => $i['tipo_equipo'],
  244.                     'falla' => $i['falla'],
  245.                     'estatus' => $i['estatus'],
  246.                     'emhv' => $i['emhv'],
  247.                     'mesP' => $mesP,
  248.                     'diaP' => $diaP,
  249.                     'mesR' => $mesR,
  250.                     'diaR' => $diaR,
  251.                     'url' => $url
  252.                 ];
  253.                 $cont++;
  254.             }
  255.             return new JsonResponse(['conteo' => $conteo'data' => $response], Response::HTTP_OK);
  256.         }
  257.         #Se construye el formulario
  258.         $anios $solRep->obtenerAnios();
  259.         foreach ($anios as $anio) {
  260.             $data[$anio[1]] = $anio[1];
  261.         }
  262.         $form $this->createForm(PAMPFiltroType::class, null, ['anios' => $data'unidad' => $unidad]);
  263.         $form->handleRequest($request);
  264.         return $this->render('prog_preventivo/pamp.html.twig', [
  265.             'solicitud' => $solicitud,
  266.             'conteo' => $conteo,
  267.             'form' => $form->createView(),
  268.             'nivel' => $nivel
  269.         ]);
  270.     }
  271.     #[Route('/vista/contador'name'prog_preventivo_vista')]
  272.     public function vistaContador() :JsonResponse
  273.     {
  274.         $em $this->getDoctrine()->getManager();
  275.         $query $em->createQuery(
  276.             'SELECT s.tipoEquipo, s.idEquipo, count(s) AS equipoCont 
  277.             FROM App:Solicitud s
  278.             WHERE s.tipoMantenimiento = :mantenimiento
  279.             AND YEAR(s.fatencion) = :anio
  280.             GROUP BY s.idEquipo, s.tipoEquipo
  281.         '
  282.         );
  283.         $query->setParameter(':mantenimiento''MP');
  284.         $query->setParameter(':anio'date('Y'));
  285.         $cTodoEquipo $query->getResult();
  286.         return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);
  287.         /*$em = $this->getDoctrine()->getManager();
  288.         $query = $em->createQuery(
  289.             'SELECT s.tipoEquipo, s.idEquipo, count(s) AS equipoCont 
  290.                 FROM App:Solicitud s
  291.                 WHERE s.tipoMantenimiento = :mantenimiento
  292.                 GROUP BY s.idEquipo, s.tipoEquipo
  293.             '
  294.         );
  295.         $query->setParameter(':mantenimiento', 'MP');
  296.         $cTodoEquipo = $query->getResult();
  297.         return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);*/
  298.     }
  299.     /**
  300.      * Programar solicitudes en relación con los checkbox activos, sin importar el tipo de equipo
  301.      * @Route("/solicitud/lote", name="prog_preventivo_solicitud_lote", methods={"GET", "POST"})
  302.      * @param Request $request
  303.      * @return JsonResponse
  304.      */
  305.     public function programarSolicitudLote(Request $request) :JsonResponse
  306.     {
  307.         $a = (array)$request->request->get('equipo');
  308.         $b = (array)$request->request->get('impresora');
  309.         $c = (array)$request->request->get('red');
  310.         $d = (array)$request->request->get('otro');
  311.         $nSolicitud[count($a) + count($b) + count($c) + count($d)][] = [];
  312.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  313.         $accion $request->request->get('accion');
  314.         $fatencion $request->request->get('fecha');
  315.         $fecha = new DateTime($fatencion);
  316.         //$currentYear = date("d M Y");
  317.         $mensaje '';
  318.         $ns 0;
  319.         $estatus Response::HTTP_OK;
  320.         if ($accion == ""){
  321.             $mensaje 'El campo "Acción a realizar" no debe estar vacío';
  322.             $estatus Response::HTTP_NOT_FOUND;
  323.             return new JsonResponse(['mensaje' => $mensaje], $estatus);
  324.         }
  325.         /*if (substr($fatencion, 0, 4) >= $currentYear){
  326.             $mensaje = $mensaje . ' La fecha introducida debe coincidir con el año en curso';
  327.             $estatus = Response::HTTP_NOT_FOUND;
  328.             return new JsonResponse(['mensaje' => $mensaje], $estatus);
  329.         }*/
  330.         if ($fatencion == ""){
  331.             $mensaje $mensaje ' El campo "Fecha de registro" no debe estar vacío';
  332.             $estatus Response::HTTP_NOT_FOUND;
  333.             return new JsonResponse(['mensaje' => $mensaje], $estatus);
  334.         }
  335.         if ($request->request->get('equipo'))
  336.         {
  337.             $equipos = (array)$request->request->get('equipo');
  338.             $limite count($equipos);
  339.             for ($i 0$i $limite$i++){
  340.                 $equipo $this->entityManager->getRepository(Equipo::class)->findOneBy(['idEqu' => $equipos[$i]]);
  341.                 $data = [
  342.                     "accion" => $accion,
  343.                     "fatencion" => $fecha,
  344.                     "periodo" => $periodo->getIdPrd()
  345.                 ];
  346.                 $ids $this->solicitudProgramacionTipoA($equipo$data);
  347.                 $reproUrl $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
  348.                 $nSolicitud[$ns] = [
  349.                     'tipoequipo' => 'Equipo',
  350.                     'idequipo' => $equipo->getIdEqu(),
  351.                     'fregistro' => $fecha->format('d M Y'),
  352.                     'tipomantenimiento' => 'MP',
  353.                     'accion' => $accion,
  354.                     'unidad' => $equipo->getUnidad()->getNombre(),
  355.                     'reprogramar' => $reproUrl
  356.                 ];
  357.                 $ns++;
  358.             }
  359.             $mensaje $mensaje ' Se programarón ' $limite ' servicios de mantenimiento a equipos de computo';
  360.         }
  361.         if ($request->request->get('impresora'))
  362.         {
  363.             $impresoras = (array)$request->request->get('impresora');
  364.             $limite count($impresoras);
  365.             for ($i 0$i $limite$i++)
  366.             {
  367.                 $impresora $this->entityManager->getRepository(Impresora::class)->findOneBy(['idImp' => $impresoras[$i]]);
  368.                 $data = [
  369.                     "accion" => $accion,
  370.                     "fatencion" => $fecha,
  371.                     "periodo" => $periodo->getIdPrd()
  372.                 ];
  373.                 $ids $this->solicitudProgramacionTipoB($impresora$data);
  374.                 $reproUrl $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
  375.                 $nSolicitud[$ns] = [
  376.                     'tipoequipo' => 'Impresora',
  377.                     'idequipo' => $impresora->getIdImp(),
  378.                     'fregistro' => $fecha->format('d M Y'),
  379.                     'tipomantenimiento' => 'MP',
  380.                     'accion' => $accion,
  381.                     'unidad' => $impresora->getUnidad()->getNombre(),
  382.                     'reprogramar' => $reproUrl
  383.                 ];
  384.                 $ns++;
  385.             }
  386.             $mensaje $mensaje ' Se programarón ' $limite ' servicios de mantenimiento a impresoras';
  387.         }
  388.         if ($request->request->get('red'))
  389.         {
  390.             $redes = (array)$request->request->get('red');
  391.             $limite count($redes);
  392.             for ($i 0$i $limite$i++)
  393.             {
  394.                 $red $this->entityManager->getRepository(Red::class)->findOneBy(['idRed' => $redes[$i]]);
  395.                 $data = [
  396.                     "accion" => $accion,
  397.                     "fatencion" => $fecha,
  398.                     "periodo" => $periodo->getIdPrd()
  399.                 ];
  400.                 $ids $this->solicitudProgramacionTipoC($red$data);
  401.                 $reproUrl $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
  402.                 $nSolicitud[$ns] = [
  403.                     'tipoequipo' => 'Red',
  404.                     'idequipo' => $red->getIdRed(),
  405.                     'fregistro' => $fecha->format('d M Y'),
  406.                     'tipomantenimiento' => 'MP',
  407.                     'accion' => $accion,
  408.                     'unidad' => $red->getUnidad()->getNombre(),
  409.                     'reprogramar' => $reproUrl
  410.                 ];
  411.                 $ns++;
  412.             }
  413.             $mensaje $mensaje ' Se programarón ' $limite ' servicios de mantenimiento a equipos de red';
  414.         }
  415.         if ($request->request->get('otro'))
  416.         {
  417.             $otros = (array)$request->request->get('otro');
  418.             $limite count($otros);
  419.             for ($i 0$i $limite$i++)
  420.             {
  421.                 $otro $this->entityManager->getRepository(Otro::class)->findOneBy(['idOtro' => $otros[$i]]);
  422.                 $data = [
  423.                     "accion" => $accion,
  424.                     "fatencion" => $fecha,
  425.                     "periodo" => $periodo->getIdPrd()
  426.                 ];
  427.                 $ids $this->solicitudProgramacionTipoD($otro$data);
  428.                 $reproUrl $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
  429.                 $nSolicitud[$ns] = [
  430.                     'tipoequipo' => 'Otro',
  431.                     'idequipo' => $otro->getIdOtro(),
  432.                     'fregistro' => $fecha->format('d M Y'),
  433.                     'tipomantenimiento' => 'MP',
  434.                     'accion' => $accion,
  435.                     'unidad' => $otro->getUnidad()->getNombre(),
  436.                     'reprogramar' => $reproUrl
  437.                 ];
  438.                 $ns++;
  439.             }
  440.             $mensaje $mensaje ' Se programarón ' $limite ' servicios de mantenimiento a otros';
  441.         }
  442.         return new JsonResponse([
  443.             'mensaje' => $mensaje,
  444.             'info' => $nSolicitud,
  445.         ], $estatus);
  446.     }
  447.     /**
  448.      * Programar solicitud por equipo, solo tipo equipo
  449.      * @Route("/solicitud/equipo/{id}", name="prog_preventivo_solicitud_tipoa", methods={"GET", "POST"})
  450.      * @param Equipo $equipo
  451.      * @param Request $request
  452.      * @return Response
  453.      */
  454.     public function programarSolicitudTipoA(Request $requestEquipo $equipo) :Response
  455.     {
  456.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  457.         $info = [
  458.             'tipoEquipo' => 'Equipo',
  459.             'tipoMantenimiento' => 'Preventivo',
  460.             'marbete' => $equipo->getMarbete()
  461.         ];
  462.         $form $this->createForm(SolicitudType::class);
  463.         $form->remove('tipoEquipo');
  464.         $form->remove('idEquipo');
  465.         $form->remove('periodo');
  466.         $form->remove('tipoMantenimiento');
  467.         $form->remove('fregistro');
  468.         $form->remove('ffin');
  469.         $form->remove('fevaluacion');
  470.         $form->remove('refacciones');
  471.         $form->remove('estatus');
  472.         $form->remove('usuario');
  473.         $form->remove('ubicacion');
  474.         $form->remove('gestor');
  475.         $form->handleRequest($request);
  476.         if ($form->isSubmitted() && $form->isValid()) {
  477.             if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == ""){
  478.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  479.             }
  480.             $y $form->get('fatencion')->getData()->format('Y/m/d');
  481.             $fecha = new DateTime($y);
  482.             $data = [
  483.                 "accion" => $form->get('falla')->getData(),
  484.                 "fatencion" => $fecha,
  485.                 "periodo" => $periodo->getIdPrd()
  486.             ];
  487.             $this->solicitudProgramacionTipoA($equipo$data);
  488.             return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para equipo de cómputo']);
  489.         }
  490.         if ($form->isSubmitted() && !$form->isValid()) {
  491.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  492.                 'form' => $form->createView(),
  493.                 'info' => $info
  494.             ]);
  495.             $response = new JsonResponse(['form' => $view]);
  496.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  497.             return $response;
  498.         }
  499.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  500.             'form' => $form,
  501.             'info' => $info
  502.         ]);
  503.     }
  504.     /**
  505.      * Programar solicitud por equipo, solo tipo impresora
  506.      * @Route("/solicitud/impresora/{id}", name="prog_preventivo_solicitud_tipob", methods={"GET", "POST"})
  507.      * @param Impresora $impresora
  508.      * @param Request $request
  509.      * @return Response
  510.      */
  511.     public function programarSolicitudTipoB(Request $requestImpresora $impresora) :Response
  512.     {
  513.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  514.         $info = [
  515.             'tipoEquipo' => 'Impresora',
  516.             'tipoMantenimiento' => 'Preventivo',
  517.             'marbete' => $impresora->getMarbete()
  518.         ];
  519.         $form $this->createForm(SolicitudType::class);
  520.         $form->remove('tipoEquipo');
  521.         $form->remove('idEquipo');
  522.         $form->remove('periodo');
  523.         $form->remove('tipoMantenimiento');
  524.         $form->remove('fregistro');
  525.         $form->remove('ffin');
  526.         $form->remove('fevaluacion');
  527.         $form->remove('refacciones');
  528.         $form->remove('estatus');
  529.         $form->remove('usuario');
  530.         $form->remove('ubicacion');
  531.         $form->remove('gestor');
  532.         $form->handleRequest($request);
  533.         if ($form->isSubmitted() && $form->isValid()) {
  534.             if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == null){
  535.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  536.             }
  537.             $y $form->get('fatencion')->getData()->format('Y/m/d');
  538.             $fecha = new DateTime($y);
  539.             $data = [
  540.                 "accion" => $form->get('falla')->getData(),
  541.                 "fatencion" => $fecha,
  542.                 "periodo" => $periodo->getIdPrd()
  543.             ];
  544.             $this->solicitudProgramacionTipoB($impresora$data);
  545.             return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para impresora']);
  546.         }
  547.         if ($form->isSubmitted() && !$form->isValid()) {
  548.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  549.                 'form' => $form->createView(),
  550.                 'info' => $info
  551.             ]);
  552.             $response = new JsonResponse(['form' => $view]);
  553.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  554.             return $response;
  555.         }
  556.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  557.             'form' => $form,
  558.             'info' => $info
  559.         ]);
  560.     }
  561.     /**
  562.      * Programar solicitud por equipo, solo tipo red
  563.      * @Route("/solicitud/red/{id}", name="prog_preventivo_solicitud_tipoc", methods={"GET", "POST"})
  564.      * @param Red $red
  565.      * @param Request $request
  566.      * @return Response
  567.      */
  568.     public function programarSolicitudTipoC(Request $requestRed $red) :Response
  569.     {
  570.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  571.         $info = [
  572.             'tipoEquipo' => 'Red',
  573.             'tipoMantenimiento' => 'Preventivo',
  574.             'marbete' => $red->getMarbete()
  575.         ];
  576.         $form $this->createForm(SolicitudType::class);
  577.         $form->remove('tipoEquipo');
  578.         $form->remove('idEquipo');
  579.         $form->remove('periodo');
  580.         $form->remove('tipoMantenimiento');
  581.         $form->remove('fregistro');
  582.         $form->remove('ffin');
  583.         $form->remove('fevaluacion');
  584.         $form->remove('refacciones');
  585.         $form->remove('estatus');
  586.         $form->remove('usuario');
  587.         $form->remove('ubicacion');
  588.         $form->remove('gestor');
  589.         $form->handleRequest($request);
  590.         if ($form->isSubmitted() && $form->isValid()) {
  591.             if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == null){
  592.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  593.             }
  594.             $y $form->get('fatencion')->getData()->format('Y/m/d');
  595.             $fecha = new DateTime($y);
  596.             $data = [
  597.                 "accion" => $form->get('falla')->getData(),
  598.                 "fatencion" => $fecha,
  599.                 "periodo" => $periodo->getIdPrd()
  600.             ];
  601.             $this->solicitudProgramacionTipoC($red$data);
  602.             return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para red']);
  603.         }
  604.         if ($form->isSubmitted() && !$form->isValid()) {
  605.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  606.                 'form' => $form->createView(),
  607.                 'info' => $info
  608.             ]);
  609.             $response = new JsonResponse(['form' => $view]);
  610.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  611.             return $response;
  612.         }
  613.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  614.             'form' => $form,
  615.             'info' => $info
  616.         ]);
  617.     }
  618.     /**
  619.      * Programar solicitud por equipo, solo tipo otro
  620.      * @Route("/solicitud/otro/{id}", name="prog_preventivo_solicitud_tipod", methods={"GET", "POST"})
  621.      * @param Otro $otro
  622.      * @param Request $request
  623.      * @return Response
  624.      */
  625.     public function programarSolicitudTipoD(Request $requestOtro $otro) :Response
  626.     {
  627.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  628.         $info = [
  629.             'tipoEquipo' => 'Otro',
  630.             'tipoMantenimiento' => 'Correctivo',
  631.             'marbete' => $otro->getMarbete()
  632.         ];
  633.         $form $this->createForm(SolicitudType::class);
  634.         $form->remove('tipoEquipo');
  635.         $form->remove('idEquipo');
  636.         $form->remove('periodo');
  637.         $form->remove('tipoMantenimiento');
  638.         $form->remove('fregistro');
  639.         $form->remove('ffin');
  640.         $form->remove('fevaluacion');
  641.         $form->remove('refacciones');
  642.         $form->remove('estatus');
  643.         $form->remove('usuario');
  644.         $form->remove('ubicacion');
  645.         $form->remove('gestor');
  646.         $form->handleRequest($request);
  647.         if ($form->isSubmitted() && $form->isValid()) {
  648.             if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == null){
  649.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  650.             }
  651.             $y $form->get('fatencion')->getData()->format('Y/m/d');
  652.             $fecha = new DateTime($y);
  653.             $data = [
  654.                 "accion" => $form->get('falla')->getData(),
  655.                 "fatencion" => $fecha,
  656.                 "periodo" => $periodo->getIdPrd()
  657.             ];
  658.             $this->solicitudProgramacionTipoD($otro$data);
  659.             return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para otro tipo de equipo']);
  660.         }
  661.         if ($form->isSubmitted() && !$form->isValid()) {
  662.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  663.                 'form' => $form->createView(),
  664.                 'info' => $info
  665.             ]);
  666.             $response = new JsonResponse(['form' => $view]);
  667.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  668.             return $response;
  669.         }
  670.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  671.             'form' => $form,
  672.             'info' => $info
  673.         ]);
  674.     }
  675.     /**
  676.      * Reprogramar solicitud, solo disponibilidad de modificación para el campo falla
  677.      * @Route("/reprogramar/solicitud/{id}", name="prog_preventivo_reprogramar", methods={"GET", "POST"})
  678.      * @param Solicitud $solicitud
  679.      * @param Request $request
  680.      * @return JsonResponse
  681.      */
  682.     public function reprogramarSolicitud(Request $requestSolicitud $solicitud) :JsonResponse
  683.     {
  684.         $a $request->request->get($request->get('id'). '-falla');
  685.         $b $request->request->get($request->get('id'). '-fregistro');
  686.         $solicitud->setFalla($a);
  687.         $solicitud->setFatencion(new DateTime($b));
  688.         $this->entityManager->persist($solicitud);
  689.         $this->entityManager->flush();
  690.         return new JsonResponse([
  691.             'mensaje' => 'Se ha editado la solicitud ' $solicitud->getIdSol() . ', Acción a realizar: ' $a '.',
  692.             'idsol' => $solicitud->getIdSol(),
  693.             'falla' => $a,
  694.             'fregistro' => $solicitud->getFregistro()->format('d M Y'),
  695.         ], Response::HTTP_OK);
  696.     }
  697.     /**
  698.      * Función para crear objeto tipo equipo e insertar en la base de datos
  699.      * @param Equipo $equipo Referencia a la entidad
  700.      * @param array $data Array con la información específica a complementar
  701.      * @return string Para creación de botón en la vista
  702.      */
  703.     private function solicitudProgramacionTipoA(Equipo $equipo$data)
  704.     {
  705.         date_default_timezone_set("America/Mexico_City");
  706.         /** @var Usuario $user */
  707.         $user $this->getUser();
  708.         # Identificador de solicitud
  709.         $partA date("y");
  710.         $partB substr($equipo->getUnidad()->getIdUni(), 33);
  711.         $partC str_pad($equipo->getUnidad()->getConsecutivo(), 4,"0"STR_PAD_LEFT);
  712.         $idSolicitud $partA.$partB.$partC;
  713.         $save = new Solicitud();
  714.         $save->setIdSol($idSolicitud);
  715.         $save->setIdEquipo($equipo->getIdEqu());
  716.         $save->setTipoEquipo("Equipo");
  717.         $save->setTipoMantenimiento("MP");
  718.         $save->setUnidad($equipo->getUnidad());
  719.         $save->setUsuario($equipo->getUsuario());
  720.         $save->setUbicacion($equipo->getUbicacion());
  721.         $save->setGestor($user);
  722.         $save->setPeriodo($data['periodo']);
  723.         $save->setFalla($data['accion']);
  724.         $save->setFregistro(new DateTime());
  725.         $save->setFatencion($data['fatencion']);
  726.         $save->setEstatus(1);
  727.         $this->entityManager->persist($save);
  728.         $this->entityManager->flush();
  729.         $unidad $equipo->getUnidad();
  730.         $unidad->setConsecutivo($unidad->getConsecutivo() + 1);
  731.         $this->entityManager->persist($unidad);
  732.         $this->entityManager->flush();
  733.         return $idSolicitud;
  734.     }
  735.     /**
  736.      * Función para crear objeto tipo impresora e insertar en la base de datos
  737.      * @param Impresora $impresora Referencia a la entidad
  738.      * @param array $data Array con la información específica a complementar
  739.      * @return string Para creación de botón en la vista
  740.      */
  741.     private function solicitudProgramacionTipoB(Impresora $impresora$data)
  742.     {
  743.         date_default_timezone_set("America/Mexico_City");
  744.         /** @var Usuario $user */
  745.         $user $this->getUser();
  746.         # Identificador de solicitud
  747.         $partA date("y");
  748.         $partB substr($impresora->getUnidad()->getIdUni(), 33);
  749.         $partC str_pad($impresora->getUnidad()->getConsecutivo(), 4,"0"STR_PAD_LEFT);
  750.         $idSolicitud $partA.$partB.$partC;
  751.         $save = new Solicitud();
  752.         $save->setIdSol($idSolicitud);
  753.         $save->setIdEquipo($impresora->getIdImp());
  754.         $save->setTipoEquipo("Impresora");
  755.         $save->setTipoMantenimiento("MP");
  756.         $save->setUnidad($impresora->getUnidad());
  757.         $save->setUsuario($impresora->getUsuario());
  758.         $save->setUbicacion($impresora->getUbicacion());
  759.         $save->setGestor($user);
  760.         $save->setPeriodo($data['periodo']);
  761.         $save->setFalla($data['accion']);
  762.         $save->setFregistro(new DateTime());
  763.         $save->setFatencion($data['fatencion']);
  764.         $save->setEstatus(1);
  765.         $this->entityManager->persist($save);
  766.         $this->entityManager->flush();
  767.         $unidad $impresora->getUnidad();
  768.         $unidad->setConsecutivo($unidad->getConsecutivo() + 1);
  769.         $this->entityManager->persist($unidad);
  770.         $this->entityManager->flush();
  771.         return $idSolicitud;
  772.     }
  773.     /**
  774.      * Función para crear objeto tipo red e insertar en la base de datos
  775.      * @param Red $red Referencia a la entidad
  776.      * @param array $data Array con la información específica a complementar
  777.      * @return string Para creación de botón en la vista
  778.      */
  779.     private function solicitudProgramacionTipoC(Red $red$data)
  780.     {
  781.         date_default_timezone_set("America/Mexico_City");
  782.         /** @var Usuario $user */
  783.         $user $this->getUser();
  784.         # Identificador de solicitud
  785.         $partA date("y");
  786.         $partB substr($red->getUnidad()->getIdUni(), 33);
  787.         $partC str_pad($red->getUnidad()->getConsecutivo(), 4,"0"STR_PAD_LEFT);
  788.         $idSolicitud $partA.$partB.$partC;
  789.         $save = new Solicitud();
  790.         $save->setIdSol($idSolicitud);
  791.         $save->setIdEquipo($red->getIdRed());
  792.         $save->setTipoEquipo("Red");
  793.         $save->setTipoMantenimiento("MP");
  794.         $save->setUnidad($red->getUnidad());
  795.         $save->setUsuario($red->getUsuario());
  796.         $save->setUbicacion($red->getUbicacion());
  797.         $save->setGestor($user);
  798.         $save->setPeriodo($data['periodo']);
  799.         $save->setFalla($data['accion']);
  800.         $save->setFregistro(new DateTime());
  801.         $save->setFatencion($data['fatencion']);
  802.         $save->setEstatus(1);
  803.         $this->entityManager->persist($save);
  804.         $this->entityManager->flush();
  805.         $unidad $red->getUnidad();
  806.         $unidad->setConsecutivo($unidad->getConsecutivo() + 1);
  807.         $this->entityManager->persist($unidad);
  808.         $this->entityManager->flush();
  809.         return $idSolicitud;
  810.     }
  811.     /**
  812.      * Función para crear objeto tipo otro e insertar en la base de datos
  813.      * @param Otro $otro Referencia a la entidad
  814.      * @param array $data Array con la información específica a complementar
  815.      * @return string Para creación de botón en la vista
  816.      */
  817.     private function solicitudProgramacionTipoD(Otro $otro$data)
  818.     {
  819.         date_default_timezone_set("America/Mexico_City");
  820.         /** @var Usuario $user */
  821.         $user $this->getUser();
  822.         # Identificador de solicitud
  823.         $partA date("y");
  824.         $partB substr($otro->getUnidad()->getIdUni(), 33);
  825.         $partC str_pad($otro->getUnidad()->getConsecutivo(), 4,"0"STR_PAD_LEFT);
  826.         $idSolicitud $partA.$partB.$partC;
  827.         $save = new Solicitud();
  828.         $save->setIdSol($idSolicitud);
  829.         $save->setIdEquipo($otro->getIdOtro());
  830.         $save->setTipoEquipo("Otro");
  831.         $save->setTipoMantenimiento("MP");
  832.         $save->setUnidad($otro->getUnidad());
  833.         $save->setUsuario($otro->getUsuario());
  834.         $save->setUbicacion($otro->getUbicacion());
  835.         $save->setGestor($user);
  836.         $save->setPeriodo($data['periodo']);
  837.         $save->setFalla($data['accion']);
  838.         $save->setFregistro(new DateTime());
  839.         $save->setFatencion($data['fatencion']);
  840.         $save->setEstatus(1);
  841.         $this->entityManager->persist($save);
  842.         $this->entityManager->flush();
  843.         $unidad $otro->getUnidad();
  844.         $unidad->setConsecutivo($unidad->getConsecutivo() + 1);
  845.         $this->entityManager->persist($unidad);
  846.         $this->entityManager->flush();
  847.         return $idSolicitud;
  848.     }
  849.     /**
  850.      * Consulta de solicitudes programadas por equipo, de tipo equipo
  851.      * @Route("/programada/consulta/equipo/{id}", name="prog_preventivo_programada_tipoa", methods={"GET", "POST"})
  852.      * @param Equipo $equipo
  853.      * @param Request $request
  854.      * @return Response
  855.      */
  856.     public function consultaProgramadaTipoA(Request $requestEquipo $equipo) :Response
  857.     {
  858.         $info = [
  859.             'tipoEquipo' => 'Equipo',
  860.             'tipoMantenimiento' => 'Preventivo'
  861.         ];
  862.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($equipo->getIdEqu(), $info['tipoEquipo'], 'MP');
  863.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  864.             'info' => $info,
  865.             'solicitud' => $programadas
  866.         ]);
  867.     }
  868.     /**
  869.      * Consulta de solicitudes programadas por equipo, de tipo impresora
  870.      * @Route("/programada/consulta/impresora/{id}", name="prog_preventivo_programada_tipob", methods={"GET", "POST"})
  871.      * @param impresora $impresora
  872.      * @param Request $request
  873.      * @return Response
  874.      */
  875.     public function consultaProgramadaTipoB(Request $requestImpresora $impresora) :Response
  876.     {
  877.         $info = [
  878.             'tipoEquipo' => 'Impresora',
  879.             'tipoMantenimiento' => 'Preventivo'
  880.         ];
  881.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($impresora->getIdImp(), $info['tipoEquipo'], 'MP');
  882.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  883.             'info' => $info,
  884.             'solicitud' => $programadas
  885.         ]);
  886.     }
  887.     /**
  888.      * Consulta de solicitudes programadas por equipo, de tipo red
  889.      * @Route("/programada/consulta/red/{id}", name="prog_preventivo_programada_tipoc", methods={"GET", "POST"})
  890.      * @param Red $red
  891.      * @param Request $request
  892.      * @return Response
  893.      */
  894.     public function consultaProgramadaTipoC(Request $requestRed $red) :Response
  895.     {
  896.         $info = [
  897.             'tipoEquipo' => 'Red',
  898.             'tipoMantenimiento' => 'Preventivo'
  899.         ];
  900.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($red->getIdRed(), $info['tipoEquipo'], 'MP');
  901.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  902.             'info' => $info,
  903.             'solicitud' => $programadas
  904.         ]);
  905.     }
  906.     /**
  907.      * Consulta de solicitudes programadas por equipo, de tipo otro
  908.      * @Route("/programada/consulta/otro/{id}", name="prog_preventivo_programada_tipod", methods={"GET", "POST"})
  909.      * @param Otro $otro
  910.      * @param Request $request
  911.      * @return Response
  912.      */
  913.     public function consultaProgramadaTipoD(Request $requestOtro $otro) :Response
  914.     {
  915.         $info = [
  916.             'tipoEquipo' => 'Otro',
  917.             'tipoMantenimiento' => 'Preventivo'
  918.         ];
  919.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($otro->getIdOtro(), $info['tipoEquipo'], 'MP');
  920.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  921.             'info' => $info,
  922.             'solicitud' => $programadas
  923.         ]);
  924.     }
  925. }