src/Controller/SolicitudController.php line 337

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