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