src/Controller/SolicitudController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Bitacora;
  4. use App\Entity\BitacoraMovimientos;
  5. use App\Entity\CatComponentes;
  6. use App\Entity\CatTiposMovimientos;
  7. use App\Entity\Equipo;
  8. use App\Entity\Impresora;
  9. use App\Entity\Inventario;
  10. use App\Entity\Otro;
  11. use App\Entity\Periodo;
  12. use App\Entity\Red;
  13. use App\Entity\Solicitud;
  14. use App\Entity\Unidad;
  15. use App\Entity\Usuario;
  16. use App\Form\SolicitudType;
  17. use App\Repository\SolicitudRepository;
  18. use App\Security\EmailVerifier;
  19. use App\Service\VistaTipoEquipo;
  20. use DateTime;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  28. use Symfony\Component\Mailer\MailerInterface;
  29. use Symfony\Component\Mime\Address;
  30. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  31. #[Route('/solicitud')]
  32. class SolicitudController extends AbstractController
  33. {
  34.     private $mailer;
  35.     private EmailVerifier $emailVerifier;
  36.     public function __construct(EntityManagerInterface $entityManagerMailerInterface $mailer)
  37.     {
  38.         $this->entityManager $entityManager;
  39.         $this->mailer $mailer;
  40.     }
  41.     public EntityManagerInterface $entityManager;
  42.     /**
  43.      * @param EntityManagerInterface $entityManager
  44.      */
  45.     #[Route('/'name'app_solicitud_index'methods: ['GET''POST'])]
  46.     public function index(SolicitudRepository $solicitudRepositoryRequest $request): Response
  47.     {
  48.         //Seccion filtro
  49.         date_default_timezone_set('America/Mexico_City');
  50.         setlocale(LC_ALL'es_MX');
  51.         /** @var Usuario $user */
  52.         $user $this->getUser();
  53.         //Seccion filtro
  54.         $perfil $request->getSession()->get('perfil');
  55.         $nivel $perfil[12]["nivel"];
  56.         if($user->getRol()->getIdRol() == 3){
  57.             $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(06$user->getUnidad()->getIdUni());
  58.         }
  59.         return $this->render('solicitud/index.html.twig', [
  60.             'solicitudes' => $solicitudes
  61.         ]);
  62.     }
  63.     #[Route('/{idSol}/edit'name'app_solicitud_edit'methods: ['GET''POST'])]
  64.     public function edit(Request $requestSolicitud $solicitudSolicitudRepository $solicitudRepositoryEntityManagerInterface $entityManager): Response
  65.     {
  66.         /** @var Usuario $user */
  67.         $user $this->getUser();
  68.         date_default_timezone_set('America/Mexico_City');
  69.         setlocale(LC_ALL'es_MX');
  70.         $factual = new DateTime();
  71.         $form $this->createForm(SolicitudType::class, $solicitud);
  72.         $form->remove('fregistro');
  73.         $form->remove('fatencion');
  74.         $form->remove('ffin');
  75.         $form->remove('gestor');
  76.         $form->remove('usuario');
  77.         $form->remove('ubicacion');
  78.         $form->remove('periodo');
  79.         $form->remove('idEquipo');
  80.         if ($solicitud ->getTipoMantenimiento() == 'MP'){
  81.             $form->remove('tipoMantenimiento');
  82.         }
  83.         $form->handleRequest($request);
  84.         $equipo $entityManager->getRepository(Equipo::class)->findOneBy(['idEqu' => $solicitud->getIdEquipo()]);
  85.         if($form->isSubmitted() && !$form->isValid()){
  86.             $view $this->renderView('solicitud/modal.html.twig', [
  87.                 'solicitud' => $solicitud,
  88.                 'form' => $form->createView()
  89.             ]);
  90.             $response = new JsonResponse(['form' => $view]);
  91.             $response->setStatusCode(Response::HTTP_UNPROCESSABLE_ENTITY);
  92.             return $response;
  93.         }
  94.         if ($form->isSubmitted() && $form->isValid()) {
  95.             if ($solicitud->getEstatus()==1){
  96.                 $estatus="Pendiente";
  97.             }else if ($solicitud->getEstatus()==2){
  98.                 $estatus="En proceso";
  99.             }else if ($solicitud->getEstatus()==3){
  100.                 $estatus="Atendido";
  101.                 // Modificación para enviar correo a una dirección específica
  102.                 $correo $solicitud->getUsuario()->getCorreo();
  103.     
  104.                 if(!filter_var($correoFILTER_VALIDATE_EMAIL)){
  105.                     return new JsonResponse(['message' => '0'], Response::HTTP_CONFLICT);
  106.                 }else{
  107.                     $correoDestino $solicitud->getUsuario()->getCorreo();
  108.                     $gestor $solicitud->getGestor();
  109.                     $tecnicoResponsable $gestor sprintf(
  110.                         '%s %s %s',
  111.                         $gestor->getNombre() ?? '',
  112.                         $gestor->getPapellido() ?? '',
  113.                         $gestor->getSApellido() ?? ''
  114.                         ) : 'No tiene un técnico responsable';
  115.                         $rutaImagen $request->server->get('CONTEXT_DOCUMENT_ROOT') . '/img/sistema/CGTI_EMAIL.png';
  116.                         
  117.                         $email = (new TemplatedEmail())
  118.                         ->from(new Address('no-reply-ti@conalepmex.edu.mx''Sistema de Gestión de Mantenimiento para Equipos de Computo'))
  119.                         ->to($correoDestino)
  120.                         ->subject('Solicitud Atendida')
  121.                         ->embedFromPath($rutaImagen'firma_cid')
  122.                         ->htmlTemplate('solicitud/estatus.html.twig')
  123.                         ->context([
  124.                             'solicitud' => $solicitud,
  125.                             'usuarioNombre' => sprintf(
  126.                                 '%s %s %s',
  127.                                 $solicitud->getUsuario()->getNombre(),
  128.                                 $solicitud->getUsuario()->getPapellido(),
  129.                                 $solicitud->getUsuario()->getSApellido()
  130.                             ),
  131.                             'numeroSolicitud' => $solicitud->getIdSol(),
  132.                             'fechaSolicitud' => $solicitud->getFregistro()->format('d-m-Y'),
  133.                             'descripcionProblema' => $solicitud->getFalla(),
  134.                             'tipoProblema' => (
  135.                                 ($solicitud->getTipoMantenimiento() == 'MP'
  136.                                 ? 'Mantenimiento Preventivo' 
  137.                                 : (
  138.                                     ($solicitud->getTipoMantenimiento() == 'MC'
  139.                                     ? 'Mantenimiento Correctivo' 
  140.                                     'Soporte Técnico'
  141.                                 )
  142.                             ),   
  143.                             'tecnicoResponsable' => $tecnicoResponsable,
  144.                             'enlaceEncuesta' => 'https://mi.conalepmex.edu.mx/?redirect=/prog_correctivo_index',
  145.                             
  146.                             // 2. Pasar el CID a Twig para usarlo en el src="cid:..."
  147.                             'firmaCid' => 'firma_cid'
  148.                         ]);
  149.                         
  150.                     $this->mailer->send($email);
  151.                 }
  152.     
  153.             }else if ($solicitud->getEstatus()==4){
  154.                 $estatus="Evaluado";
  155.             }
  156.             if ($request->request->has('componente')){
  157.                 date_default_timezone_set('America/Mexico_City');
  158.                 
  159.                 $condicion implode(',',$request->request->get('componente'));
  160.                 $usuario $this->entityManager->getRepository(Usuario::class)->findOneBy(['idUsu' => $user->getIdUsu()]);
  161.                 $unidad $this->entityManager->getRepository(Unidad::class)->findOneBy(['idUni' => $user->getUnidad()]);
  162.                 $tMovimiento $this->entityManager->getRepository(CatTiposMovimientos::class)->findOneBy(['idMov' => 5]);
  163.                 
  164.                 $conn $this->entityManager->getConnection();
  165.                 $sql "SELECT * 
  166.                     FROM inventario i
  167.                     JOIN cat_componentes cc ON i.id_componente = cc.id_componente WHERE i.id_inventario IN (" $condicion ")
  168.                 ";
  169.                 $stmt $conn->prepare($sql);
  170.                 $resultSet $stmt->executeQuery();
  171.                 $componentes $resultSet->fetchAll();
  172.                 $factual = new DateTime();
  173.                 foreach ($componentes as $componente){
  174.                     $comp $entityManager->getRepository(CatComponentes::class)->findOneBy(['idComponente' => $componente['id_componente']]);
  175.                     if($componente['id_componente'] == 2){
  176.                         $equipo->setNucleos($componente['nucleos']);
  177.                         $equipo->setCpuVelocidad($componente['velocidad']);
  178.                     }
  179.                     if($componente['id_componente'] == 4){
  180.                         $equipo->setRam($componente['capacidad_memoria']);
  181.                     }
  182.                     if($componente['id_componente'] == 5){
  183.                         $equipo->setHhd($componente['capacidad_memoria']);
  184.                     }if($componente['id_componente'] == 6){
  185.                         $equipo->setSsd($componente['capacidad_memoria']);
  186.                     }
  187.                     if($componente['id_componente'] == 12){
  188.                         $equipo->setTecladoMarca($componente['marca']);
  189.                         $equipo->setTecladoModelo($componente['modelo']);
  190.                     }
  191.                     if($componente['id_componente'] == 13){
  192.                         $equipo->setMouseMarca($componente['marca']);
  193.                         $equipo->setMouseModelo($componente['modelo']);
  194.                     }if($componente['id_componente'] == 14){
  195.                         $equipo->setMonitorMarca($componente['marca']);
  196.                         $equipo->setMonitorModelo($componente['modelo']);
  197.                     }
  198.                     $c = new BitacoraMovimientos();
  199.                     $c->setTipoMov($tMovimiento);
  200.                     $c->setFechaMov($factual);
  201.                     $c->setIdUsu($usuario);
  202.                     $c->setIdComponente($comp);
  203.                     $c->setIdUni($unidad);
  204.                     $c->setIdSolicitud($solicitud);
  205.                     $c->setTipoEquipo($solicitud->getTipoEquipo());
  206.                     $c->setIdEqu($solicitud->getIdEquipo());
  207.                     $entityManager->persist($c);
  208.                     $entityManager->flush();
  209.                     // Actualizar el campo en_uso en el registro de inventario
  210.                     $inventario $entityManager->getRepository(Inventario::class)->find($componente['id_inventario']);
  211.                     if ($inventario) {
  212.                         $inventario->setEnUso(0);
  213.                         $entityManager->persist($inventario);
  214.                         $entityManager->flush();
  215.                     }
  216.                 }
  217.             }
  218.             if ($solicitud->getEstatus() == 3){
  219.                 $solicitud->setGestor($user);
  220.                 $solicitud->setFfin($factual);
  221.             }
  222.             $entityManager->persist($solicitud);
  223.             $entityManager->flush();
  224.             //dump($solicitud); die();
  225.             //$solicitudRepository->add($solicitud, true);
  226.             switch ($solicitud->getTipoEquipo()){
  227.                 case 'Equipo':
  228.                     $info $entityManager->getRepository(Equipo::class)->findOneBy([
  229.                         'idEqu' => $solicitud->getIdEquipo()
  230.                     ]);
  231.                     $marca $info->getIdMarca()->getMarca();
  232.                     break;
  233.                 case 'Impresora':
  234.                     $info $entityManager->getRepository(Impresora::class)->findOneBy([
  235.                         'idImp' => $solicitud->getIdEquipo()
  236.                     ]);
  237.                     $marca $info->getMarca();
  238.                     break;
  239.                 case 'Red':
  240.                     $info $entityManager->getRepository(Red::class)->findOneBy([
  241.                         'idRed' => $solicitud->getIdEquipo()
  242.                     ]);
  243.                     $marca $info->getMarca();
  244.                     break;
  245.                 case 'Otro':
  246.                     $info $entityManager->getRepository(Otro::class)->findOneBy([
  247.                         'idOtro' => $solicitud->getIdEquipo()
  248.                     ]);
  249.                     $marca $info->getMarca();
  250.                     break;
  251.             }
  252.             $data = array(
  253.                 'idSol' => $solicitud->getIdSol(),
  254.                 'tipoEquipo' => $solicitud->getTipoEquipo(),
  255.                 'idEquipo' => $info->getMarbete(),
  256.                 'marca' => $marca,
  257.                 'modelo' => $info->getModelo(),
  258.                 'tipoMantenimiento' => $solicitud->getTipoMantenimiento(),
  259.                 'falla' => $solicitud->getFalla(),
  260.                 'estatus' => $estatus,
  261.                 'mensaje' => 'Se actualizo correctamente',
  262.             );
  263.             return new JsonResponse($data);
  264.             //return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
  265.         }
  266.         return $this->renderForm('solicitud/modal.html.twig', [
  267.             'solicitud' => $solicitud,
  268.             'equipo' => $equipo,
  269.             'form' => $form
  270.         ]);
  271.     }
  272.     #[Route('/new'name'app_solicitud_new'methods: ['GET''POST'])]
  273.     public function new(Request $requestSolicitudRepository $solicitudRepository): Response
  274.     {
  275.         $solicitud = new Solicitud();
  276.         $form $this->createForm(SolicitudType::class, $solicitud);
  277.         $form->remove('fregistro');
  278.         $form->remove('fatencion');
  279.         $form->remove('ffin');
  280.         $form->handleRequest($request);
  281.         if ($form->isSubmitted() && $form->isValid()) {
  282.             $solicitudRepository->add($solicitudtrue);
  283.             return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
  284.         }
  285.         return $this->renderForm('solicitud/new.html.twig', [
  286.             'solicitud' => $solicitud,
  287.             'form' => $form,
  288.         ]);
  289.     }
  290.     #[Route('/{idSol}'name'app_solicitud_show'methods: ['GET'])]
  291.     public function show(Request $requestSolicitud $solicitudSolicitudRepository $solicitudRepositoryEntityManagerInterface $entityManager): Response
  292.     {
  293.         return $this->render('solicitud/show.html.twig', [
  294.             'solicitud' => $solicitud,
  295.         ]);
  296.     }
  297.     #[Route('/{idSol}'name'app_solicitud_delete'methods: ['POST'])]
  298.     public function delete(Request $requestSolicitud $solicitudSolicitudRepository $solicitudRepository): Response
  299.     {
  300.         if ($this->isCsrfTokenValid('delete'.$solicitud->getIdSol(), $request->request->get('_token'))) {
  301.             $solicitudRepository->remove($solicitudtrue);
  302.         }
  303.         return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
  304.     }
  305.     #[Route('/modal/componente'name'app_solicitud_modal')]
  306.     public function modalComponente(Request $request) :JsonResponse
  307.     {
  308.         /** @var Usuario $user */
  309.         // $user = $this->getUser();
  310.         // if($user->getRol()->getIdRol() == 3) {
  311.             $conn $this->entityManager->getConnection();
  312.             $sql "SELECT cc.*, i.*
  313.                 FROM inventario i
  314.                 LEFT JOIN cat_componentes cc ON cc.id_componente = i.id_componente
  315.                 WHERE i.en_uso = 1
  316.                 ORDER BY cc.tipo ASC
  317.             ";
  318.             $stmt $conn->prepare($sql);
  319.             $resultSet $stmt->executeQuery();
  320.         // }
  321.         return new JsonResponse(['catComponente' => $resultSet->fetchAll()], Response::HTTP_OK);
  322.     }
  323.     #[Route('/vista/contador'name'app_solicitud_vista')]
  324.     public function vistaContador() :JsonResponse
  325.     {
  326.         /** @var Usuario $user */
  327.         $user $this->getUser();
  328.         if($user->getRol()->getIdRol() == 3) {
  329.             $cTodoEquipo $this->entityManager->getRepository(Solicitud::class)->conteoEstatusTipoEquipoUsuario(05$user->getUnidad()->getIdUni());
  330.         }
  331.         return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);
  332.     }
  333.     #[Route('/vista/solicitud/{id}'name'app_solicitud_vista_detalle')]
  334.     public function vistaSolicitud(Request $requestSolicitud $solicitud,EntityManagerInterface $entityManager) :Response
  335.     {
  336.         $a $this->entityManager->getRepository(Solicitud::class)->findOneBy(['idSol' => $request->get('id')]);
  337.         if ($a->getEstatus() == 1) {
  338.             $a->setEstatus(2);
  339.             $this->entityManager->persist($a);
  340.             $this->entityManager->flush();
  341.         }
  342.         $solicitud $this->entityManager->getRepository(Solicitud::class)->detalleTipoEquipoSolicitud($request->get('id'));
  343.         return $this->render('prog_solicitud/informacion_solicitud.html.twig', ['info' => $solicitud]);
  344.     }
  345.     #[Route('/registro/vista'name'app_solicitud_actualiza_vista'methods: ['GET''POST'])]
  346.     public function infoSolicitud(EntityManagerInterface $entityManager): Response
  347.     {
  348.         $solicitudes $entityManager->getRepository(Solicitud::class)->findAll();
  349.         $data = [];
  350.         $i 0;
  351.         foreach ($solicitudes as $s) {
  352.             $data[$i]['ver_equipo'] = $this->generateUrl('prog_correctivo_vista_tipo', ['tipo' => $s['tipo_equipo'], 'id' => $s['id_equipo']], UrlGeneratorInterface::ABSOLUTE_URL);
  353.             $data[$i]['ver_solicitud'] = $this->generateUrl('consulta_solicitud_vista_solicitud', ['id' => $s['id_sol']], UrlGeneratorInterface::ABSOLUTE_URL);
  354.             $data[$i]['editar'] = $this->generateUrl('app_solicitud_edit', ['idSol' => $s['id_sol']], UrlGeneratorInterface::ABSOLUTE_URL);
  355.             $data[$i]['id_sol'] = $s['id_sol'];
  356.             $data[$i]['tipo_equipo'] = $s['tipo_equipo'];
  357.             $data[$i]['marbete'] = $s['marbete'];
  358.             $data[$i]['marca'] = $s['marca'];
  359.             $data[$i]['modelo'] = $s['modelo'];
  360.             $data[$i]['tipo_mantenimiento'] = $s['tipo_mantenimiento'];
  361.             $data[$i]['falla'] = $s['falla'];
  362.             $data[$i]['estatus'] = $s['estatus'];
  363.             $data[$i]['id_equipo'] = $s['id_equipo'];
  364.             $i++;
  365.         }
  366.         return new JsonResponse($data);
  367.     }
  368.     /**
  369.      * Vista detallada por tipo, equipo, impresora, red, otro
  370.      * @Route("/vista/{tipo}/{id}", name="app_solicitud_vista_tipo", methods={"GET", "POST"})
  371.      * @param Request $request
  372.      * @return Response
  373.      */
  374.     public function vistaTipo(Request $request) :Response
  375.     {
  376.         $service = new VistaTipoEquipo($this->entityManager);
  377.         $info $service->consultaInformacion($request->get('tipo'), $request->get('id'));
  378.         return $this->render('prog_solicitud/informacion_tipo.html.twig', ['tipo' => $request->get('tipo'),'info' => $info]);
  379.     }
  380.     /**
  381.      * Consulta de solicitudes programadas por equipo, de tipo equipo
  382.      * @Route("/programada/consulta/equipo/{id}", name="prog_correctivo_programada_tipoa", methods={"GET", "POST"})
  383.      * @param Equipo $equipo
  384.      * @return Response
  385.      */
  386.     public function consultaProgramadaTipoA(Equipo $equipo) :Response
  387.     {
  388.         $info = [
  389.             'tipoEquipo' => 'Equipo',
  390.             'tipoMantenimiento' => 'Correctivo',
  391.             'siglasMantenimiento' => 'MC'
  392.         ];
  393.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($equipo->getIdEqu(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  394.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  395.             'info' => $info,
  396.             'solicitud' => $programadas
  397.         ]);
  398.     }
  399.     /**
  400.      * Consulta de solicitudes programadas por equipo, de tipo impresora
  401.      * @Route("/programada/consulta/impresora/{id}", name="prog_correctivo_programada_tipob", methods={"GET", "POST"})
  402.      * @param impresora $impresora
  403.      * @return Response
  404.      */
  405.     public function consultaProgramadaTipoB(Impresora $impresora) :Response
  406.     {
  407.         $info = [
  408.             'tipoEquipo' => 'Impresora',
  409.             'tipoMantenimiento' => 'Correctivo',
  410.             'siglasMantenimiento' => 'MC'
  411.         ];
  412.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($impresora->getIdImp(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  413.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  414.             'info' => $info,
  415.             'solicitud' => $programadas
  416.         ]);
  417.     }
  418.     /**
  419.      * Consulta de solicitudes programadas por equipo, de tipo red
  420.      * @Route("/programada/consulta/red/{id}", name="prog_correctivo_programada_tipoc", methods={"GET", "POST"})
  421.      * @param Red $red
  422.      * @return Response
  423.      */
  424.     public function consultaProgramadaTipoC(Red $red) :Response
  425.     {
  426.         $info = [
  427.             'tipoEquipo' => 'Red',
  428.             'tipoMantenimiento' => 'Correctivo',
  429.             'siglasMantenimiento' => 'MC'
  430.         ];
  431.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($red->getIdRed(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  432.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  433.             'info' => $info,
  434.             'solicitud' => $programadas
  435.         ]);
  436.     }
  437.     /**
  438.      * Consulta de solicitudes programadas por equipo, de tipo otro
  439.      * @Route("/programada/consulta/otro/{id}", name="prog_correctivo_programada_tipod", methods={"GET", "POST"})
  440.      * @param Otro $otro
  441.      * @return Response
  442.      */
  443.     public function consultaProgramadaTipoD(Otro $otro) :Response
  444.     {
  445.         $info = [
  446.             'tipoEquipo' => 'Otro',
  447.             'tipoMantenimiento' => 'Correctivo',
  448.             'siglasMantenimiento' => 'MC'
  449.         ];
  450.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($otro->getIdOtro(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  451.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  452.             'info' => $info,
  453.             'solicitud' => $programadas
  454.         ]);
  455.     }
  456.     /**
  457.      * Programar solicitud por equipo, solo tipo equipo
  458.      * @Route("/solicitud/equipo/{id}", name="app_solicitud_tipoa", methods={"GET", "POST"})
  459.      * @param Equipo $equipo
  460.      * @param Request $request
  461.      * @return Response
  462.      */
  463.     public function programarSolicitudTipoA(Request $requestEquipo $equipo) :Response
  464.     {
  465.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  466.         $info = [
  467.             'tipoEquipo' => 'Equipo',
  468.             'tipoMantenimiento' => 'Correctivo',
  469.             'marbete' => $equipo->getMarbete()
  470.         ];
  471.         $form $this->createForm(SolicitudType::class);
  472.         $form->remove('tipoEquipo');
  473.         $form->remove('idEquipo');
  474.         $form->remove('periodo');
  475.         $form->remove('tipoMantenimiento');
  476.         $form->remove('srealizado');
  477.         $form->remove('fregistro');
  478.         $form->remove('fatencion');
  479.         $form->remove('ffin');
  480.         $form->remove('evaluacion');
  481.         $form->remove('refacciones');
  482.         $form->remove('estatus');
  483.         $form->remove('usuario');
  484.         $form->remove('ubicacion');
  485.         $form->remove('gestor');
  486.         $form->handleRequest($request);
  487.         if ($form->isSubmitted() && $form->isValid()) {
  488.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  489.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  490.             }
  491.             $equipo->incrementMantenimientoCount();
  492.             $data = [
  493.                 "tipo" => $info['tipoEquipo'],
  494.                 "id" => $equipo->getIdEqu(),
  495.                 "marbete" => $equipo->getMarbete(),
  496.                 "iduni" => $equipo->getUnidad()->getIdUni(),
  497.                 "consuni" => $equipo->getUnidad()->getConsecutivo(),
  498.                 "unidad" => $equipo->getUnidad(),
  499.                 "usuario" => $equipo->getUsuario(),
  500.                 "ubicacion" => $equipo->getUbicacion(),
  501.                 "accion" => $form->get('falla')->getData(),
  502.                 "periodo" => $periodo
  503.             ];
  504.             $info $this->solicitudProgramacion($data);
  505.             return new JsonResponse($info);
  506.         }
  507.         if ($form->isSubmitted() && !$form->isValid()) {
  508.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  509.                 'form' => $form->createView(),
  510.                 'info' => $info
  511.             ]);
  512.             $response = new JsonResponse(['form' => $view]);
  513.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  514.             return $response;
  515.         }
  516.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  517.             'form' => $form,
  518.             'info' => $info
  519.         ]);
  520.     }
  521.     /**
  522.      * Programar solicitud por equipo, solo tipo impresora
  523.      * @Route("/solicitud/impresora/{id}", name="app_solicitud_tipob", methods={"GET", "POST"})
  524.      * @param Impresora $impresora
  525.      * @param Request $request
  526.      * @return Response
  527.      */
  528.     public function programarSolicitudTipoB(Request $requestImpresora $impresora) :Response
  529.     {
  530.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  531.         $info = [
  532.             'tipoEquipo' => 'Impresora',
  533.             'tipoMantenimiento' => 'Correctivo',
  534.             'marbete' => $impresora->getMarbete()
  535.         ];
  536.         $form $this->createForm(SolicitudType::class);
  537.         $form->remove('tipoEquipo');
  538.         $form->remove('idEquipo');
  539.         $form->remove('periodo');
  540.         $form->remove('tipoMantenimiento');
  541.         $form->remove('srealizado');
  542.         $form->remove('fregistro');
  543.         $form->remove('fatencion');
  544.         $form->remove('ffin');
  545.         $form->remove('evaluacion');
  546.         $form->remove('refacciones');
  547.         $form->remove('estatus');
  548.         $form->remove('usuario');
  549.         $form->remove('ubicacion');
  550.         $form->remove('gestor');
  551.         $form->handleRequest($request);
  552.         if ($form->isSubmitted() && $form->isValid()) {
  553.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  554.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  555.             }
  556.             $impresora->incrementMantenimientoCount();
  557.             $data = [
  558.                 "tipo" => $info['tipoEquipo'],
  559.                 "id" => $impresora->getIdImp(),
  560.                 "marbete" => $impresora->getMarbete(),
  561.                 "iduni" => $impresora->getUnidad()->getIdUni(),
  562.                 "consuni" => $impresora->getUnidad()->getConsecutivo(),
  563.                 "unidad" => $impresora->getUnidad(),
  564.                 "usuario" => $impresora->getUsuario(),
  565.                 "ubicacion" => $impresora->getUbicacion(),
  566.                 "accion" => $form->get('falla')->getData(),
  567.                 "periodo" => $periodo
  568.             ];
  569.             $info $this->solicitudProgramacion($data);
  570.             return new JsonResponse($info);
  571.         }
  572.         if ($form->isSubmitted() && !$form->isValid()) {
  573.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  574.                 'form' => $form->createView(),
  575.                 'info' => $info
  576.             ]);
  577.             $response = new JsonResponse(['form' => $view]);
  578.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  579.             return $response;
  580.         }
  581.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  582.             'form' => $form,
  583.             'info' => $info
  584.         ]);
  585.     }
  586.     /**
  587.      * Programar solicitud por equipo, solo tipo red
  588.      * @Route("/solicitud/red/{id}", name="app_solicitud_tipoc", methods={"GET", "POST"})
  589.      * @param Red $red
  590.      * @param Request $request
  591.      * @return Response
  592.      */
  593.     public function programarSolicitudTipoC(Request $requestRed $red) :Response
  594.     {
  595.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  596.         $info = [
  597.             'tipoEquipo' => 'Red',
  598.             'tipoMantenimiento' => 'Correctivo',
  599.             'marbete' => $red->getMarbete()
  600.         ];
  601.         $form $this->createForm(SolicitudType::class);
  602.         $form->remove('tipoEquipo');
  603.         $form->remove('idEquipo');
  604.         $form->remove('periodo');
  605.         $form->remove('tipoMantenimiento');
  606.         $form->remove('srealizado');
  607.         $form->remove('fregistro');
  608.         $form->remove('fatencion');
  609.         $form->remove('ffin');
  610.         $form->remove('evaluacion');
  611.         $form->remove('refacciones');
  612.         $form->remove('estatus');
  613.         $form->remove('usuario');
  614.         $form->remove('ubicacion');
  615.         $form->remove('gestor');
  616.         $form->handleRequest($request);
  617.         if ($form->isSubmitted() && $form->isValid()) {
  618.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  619.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  620.             }
  621.             $red->incrementMantenimientoCount();
  622.             $data = [
  623.                 "tipo" => $info['tipoEquipo'],
  624.                 "id" => $red->getIdRed(),
  625.                 "marbete" => $red->getMarbete(),
  626.                 "iduni" => $red->getUnidad()->getIdUni(),
  627.                 "consuni" => $red->getUnidad()->getConsecutivo(),
  628.                 "unidad" => $red->getUnidad(),
  629.                 "usuario" => $red->getUsuario(),
  630.                 "ubicacion" => $red->getUbicacion(),
  631.                 "accion" => $form->get('falla')->getData(),
  632.                 "fatencion" => null,
  633.                 "periodo" => $periodo
  634.             ];
  635.             $info $this->solicitudProgramacion($data);
  636.             return new JsonResponse($info);
  637.         }
  638.         if ($form->isSubmitted() && !$form->isValid()) {
  639.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  640.                 'form' => $form->createView(),
  641.                 'info' => $info
  642.             ]);
  643.             $response = new JsonResponse(['form' => $view]);
  644.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  645.             return $response;
  646.         }
  647.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  648.             'form' => $form,
  649.             'info' => $info
  650.         ]);
  651.     }
  652.     /**
  653.      * Programar solicitud por equipo, solo tipo otro
  654.      * @Route("/solicitud/otro/{id}", name="app_solicitud_tipod", methods={"GET", "POST"})
  655.      * @param Otro $otro
  656.      * @param Request $request
  657.      * @return Response
  658.      */
  659.     public function programarSolicitudTipoD(Request $requestOtro $otro) :Response
  660.     {
  661.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  662.         $info = [
  663.             'tipoEquipo' => 'Otro',
  664.             'tipoMantenimiento' => 'Correctivo',
  665.             'marbete' => $otro->getMarbete()
  666.         ];
  667.         $form $this->createForm(SolicitudType::class);
  668.         $form->remove('tipoEquipo');
  669.         $form->remove('idEquipo');
  670.         $form->remove('periodo');
  671.         $form->remove('tipoMantenimiento');
  672.         $form->remove('srealizado');
  673.         $form->remove('fregistro');
  674.         $form->remove('fatencion');
  675.         $form->remove('ffin');
  676.         $form->remove('evaluacion');
  677.         $form->remove('refacciones');
  678.         $form->remove('estatus');
  679.         $form->remove('usuario');
  680.         $form->remove('ubicacion');
  681.         $form->remove('gestor');
  682.         $form->handleRequest($request);
  683.         if ($form->isSubmitted() && $form->isValid()) {
  684.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  685.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  686.             }
  687.             $otro->incrementMantenimientoCount();
  688.             $data = [
  689.                 "tipo" => $info['tipoEquipo'],
  690.                 "id" => $otro->getIdOtro(),
  691.                 "marbete" => $otro->getMarbete(),
  692.                 "iduni" => $otro->getUnidad()->getIdUni(),
  693.                 "consuni" => $otro->getUnidad()->getConsecutivo(),
  694.                 "unidad" => $otro->getUnidad(),
  695.                 "usuario" => $otro->getUsuario(),
  696.                 "ubicacion" => $otro->getUbicacion(),
  697.                 "accion" => $form->get('falla')->getData(),
  698.                 "periodo" => $periodo
  699.             ];
  700.             $info $this->solicitudProgramacion($data);
  701.             return new JsonResponse($info);
  702.         }
  703.         if ($form->isSubmitted() && !$form->isValid()) {
  704.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  705.                 'form' => $form->createView(),
  706.                 'info' => $info
  707.             ]);
  708.             $response = new JsonResponse(['form' => $view]);
  709.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  710.             return $response;
  711.         }
  712.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  713.             'form' => $form,
  714.             'info' => $info
  715.         ]);
  716.     }
  717.     /**
  718.      * Función para crear objeto tipo equipo especificado e insertar en la base de datos
  719.      * @param array $data Array con la información específica a complementar
  720.      * @return array Para creación de botón en la vista
  721.      */
  722.     private function solicitudProgramacion($data)
  723.     {
  724.         date_default_timezone_set("America/Mexico_City");
  725.         $factual = new DateTime();
  726.         # Identificador de solicitud
  727.         $partA date("y");
  728.         $partB substr($data['iduni'], 33);
  729.         $partC str_pad($data['consuni'], 4,"0"STR_PAD_LEFT);
  730.         $idSolicitud $partA.$partB.$partC;
  731.         $save = new Solicitud();
  732.         $save->setIdSol($idSolicitud);
  733.         $save->setIdEquipo($data['id']);
  734.         $save->setTipoEquipo($data['tipo']);
  735.         $save->setTipoMantenimiento("MC");
  736.         $save->setUnidad($data['unidad']);
  737.         $save->setUsuario($data['usuario']);
  738.         $save->setUbicacion($data['ubicacion']);
  739.         $save->setPeriodo($data['periodo']);
  740.         $save->setFalla($data['accion']);
  741.         $save->setFregistro($factual);
  742.         $save->setFatencion($factual);
  743.         $save->setEstatus(1);
  744.         $this->entityManager->persist($save);
  745.         $this->entityManager->flush();
  746.         $unidad $data['unidad'];
  747.         $unidad->setConsecutivo($unidad->getConsecutivo() + 1);
  748.         $this->entityManager->persist($unidad);
  749.         $this->entityManager->flush();
  750.         $info = [
  751.             'mensaje' => 'Se ha generado la solicitud de mantenimiento, con el identificador ' $save->getIdSol(),
  752.             'ver_solicitud' => $this->generateUrl('prog_correctivo_vista_solicitud', ['id' => $save->getIdSol()], UrlGeneratorInterface::ABSOLUTE_URL),
  753.             'solicitud' => $save->getIdSol(),
  754.             'tipo_equipo' => $save->getTipoEquipo(),
  755.             'equipo' => $save->getIdEquipo(),
  756.             'marbete' => $data['marbete'],
  757.             'marca' => $data['marca'],
  758.             'modelo' => $data['modelo'],
  759.             'falla' => $save->getFalla(),
  760.             'tipo_mantenimiento' => $save->getTipoMantenimiento(),
  761.             'mantenimiento_count' => $data->getMantenimientoCount(),
  762.             'fregistro' => $save->getFregistro()->format("d M Y, H:m"),
  763.             'estatus' => $save->getEstatus()
  764.         ];
  765.         return $info;
  766.     }
  767. //Para subir formulario
  768. }