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