src/Controller/SolicitudController.php line 365

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.                     break;
  225.                 case 'Impresora':
  226.                     $info $entityManager->getRepository(Impresora::class)->findOneBy([
  227.                         'idImp' => $solicitud->getIdEquipo()
  228.                     ]);
  229.                     break;
  230.                 case 'Red':
  231.                     $info $entityManager->getRepository(Red::class)->findOneBy([
  232.                         'idRed' => $solicitud->getIdEquipo()
  233.                     ]);
  234.                     break;
  235.                 case 'Otro':
  236.                     $info $entityManager->getRepository(Otro::class)->findOneBy([
  237.                         'idOtro' => $solicitud->getIdEquipo()
  238.                     ]);
  239.                     break;
  240.             }
  241.             $data = array(
  242.                 'idSol' => $solicitud->getIdSol(),
  243.                 'tipoEquipo' => $solicitud->getTipoEquipo(),
  244.                 'idEquipo' => $info->getMarbete(),
  245.                 'marca' => $info->getMarca(),
  246.                 'modelo' => $info->getModelo(),
  247.                 'tipoMantenimiento' => $solicitud->getTipoMantenimiento(),
  248.                 'falla' => $solicitud->getFalla(),
  249.                 'estatus' => $estatus,
  250.                 'mensaje' => 'Se actualizo correctamente',
  251.             );
  252.             return new JsonResponse($data);
  253.             //return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
  254.         }
  255.         return $this->renderForm('solicitud/modal.html.twig', [
  256.             'solicitud' => $solicitud,
  257.             'equipo' => $equipo,
  258.             'form' => $form
  259.         ]);
  260.     }
  261.     #[Route('/new'name'app_solicitud_new'methods: ['GET''POST'])]
  262.     public function new(Request $requestSolicitudRepository $solicitudRepository): Response
  263.     {
  264.         $solicitud = new Solicitud();
  265.         $form $this->createForm(SolicitudType::class, $solicitud);
  266.         $form->remove('fregistro');
  267.         $form->remove('fatencion');
  268.         $form->remove('ffin');
  269.         $form->handleRequest($request);
  270.         if ($form->isSubmitted() && $form->isValid()) {
  271.             $solicitudRepository->add($solicitudtrue);
  272.             return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
  273.         }
  274.         return $this->renderForm('solicitud/new.html.twig', [
  275.             'solicitud' => $solicitud,
  276.             'form' => $form,
  277.         ]);
  278.     }
  279.     #[Route('/{idSol}'name'app_solicitud_show'methods: ['GET'])]
  280.     public function show(Request $requestSolicitud $solicitudSolicitudRepository $solicitudRepositoryEntityManagerInterface $entityManager): Response
  281.     {
  282.         return $this->render('solicitud/show.html.twig', [
  283.             'solicitud' => $solicitud,
  284.         ]);
  285.     }
  286.     #[Route('/{idSol}'name'app_solicitud_delete'methods: ['POST'])]
  287.     public function delete(Request $requestSolicitud $solicitudSolicitudRepository $solicitudRepository): Response
  288.     {
  289.         if ($this->isCsrfTokenValid('delete'.$solicitud->getIdSol(), $request->request->get('_token'))) {
  290.             $solicitudRepository->remove($solicitudtrue);
  291.         }
  292.         return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
  293.     }
  294.     #[Route('/modal/componente'name'app_solicitud_modal')]
  295.     public function modalComponente(Request $request) :JsonResponse
  296.     {
  297.         /** @var Usuario $user */
  298.         // $user = $this->getUser();
  299.         // if($user->getRol()->getIdRol() == 3) {
  300.             $conn $this->entityManager->getConnection();
  301.             $sql "SELECT cc.*, i.*
  302.                 FROM inventario i
  303.                 LEFT JOIN cat_componentes cc ON cc.id_componente = i.id_componente
  304.                 WHERE i.en_uso = 1
  305.                 ORDER BY cc.tipo ASC
  306.             ";
  307.             $stmt $conn->prepare($sql);
  308.             $resultSet $stmt->executeQuery();
  309.         // }
  310.         return new JsonResponse(['catComponente' => $resultSet->fetchAll()], Response::HTTP_OK);
  311.     }
  312.     #[Route('/vista/contador'name'app_solicitud_vista')]
  313.     public function vistaContador() :JsonResponse
  314.     {
  315.         /** @var Usuario $user */
  316.         $user $this->getUser();
  317.         if($user->getRol()->getIdRol() == 3) {
  318.             $cTodoEquipo $this->entityManager->getRepository(Solicitud::class)->conteoEstatusTipoEquipoUsuario(05$user->getUnidad()->getIdUni());
  319.         }
  320.         return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);
  321.     }
  322.     #[Route('/vista/solicitud/{id}'name'app_solicitud_vista_detalle')]
  323.     public function vistaSolicitud(Request $requestSolicitud $solicitud,EntityManagerInterface $entityManager) :Response
  324.     {
  325.         $a $this->entityManager->getRepository(Solicitud::class)->findOneBy(['idSol' => $request->get('id')]);
  326.         if ($a->getEstatus() == 1) {
  327.             $a->setEstatus(2);
  328.             $this->entityManager->persist($a);
  329.             $this->entityManager->flush();
  330.         }
  331.         $solicitud $this->entityManager->getRepository(Solicitud::class)->detalleTipoEquipoSolicitud($request->get('id'));
  332.         return $this->render('prog_solicitud/informacion_solicitud.html.twig', ['info' => $solicitud]);
  333.     }
  334.     #[Route('/registro/vista'name'app_solicitud_actualiza_vista'methods: ['GET''POST'])]
  335.     public function infoSolicitud(EntityManagerInterface $entityManager): Response
  336.     {
  337.         $solicitudes $entityManager->getRepository(Solicitud::class)->findAll();
  338.         $data = [];
  339.         $i 0;
  340.         foreach ($solicitudes as $s) {
  341.             $data[$i]['ver_equipo'] = $this->generateUrl('prog_correctivo_vista_tipo', ['tipo' => $s['tipo_equipo'], 'id' => $s['id_equipo']], UrlGeneratorInterface::ABSOLUTE_URL);
  342.             $data[$i]['ver_solicitud'] = $this->generateUrl('consulta_solicitud_vista_solicitud', ['id' => $s['id_sol']], UrlGeneratorInterface::ABSOLUTE_URL);
  343.             $data[$i]['editar'] = $this->generateUrl('app_solicitud_edit', ['idSol' => $s['id_sol']], UrlGeneratorInterface::ABSOLUTE_URL);
  344.             $data[$i]['id_sol'] = $s['id_sol'];
  345.             $data[$i]['tipo_equipo'] = $s['tipo_equipo'];
  346.             $data[$i]['marbete'] = $s['marbete'];
  347.             $data[$i]['marca'] = $s['marca'];
  348.             $data[$i]['modelo'] = $s['modelo'];
  349.             $data[$i]['tipo_mantenimiento'] = $s['tipo_mantenimiento'];
  350.             $data[$i]['falla'] = $s['falla'];
  351.             $data[$i]['estatus'] = $s['estatus'];
  352.             $data[$i]['id_equipo'] = $s['id_equipo'];
  353.             $i++;
  354.         }
  355.         return new JsonResponse($data);
  356.     }
  357.     /**
  358.      * Vista detallada por tipo, equipo, impresora, red, otro
  359.      * @Route("/vista/{tipo}/{id}", name="app_solicitud_vista_tipo", methods={"GET", "POST"})
  360.      * @param Request $request
  361.      * @return Response
  362.      */
  363.     public function vistaTipo(Request $request) :Response
  364.     {
  365.         $service = new VistaTipoEquipo($this->entityManager);
  366.         $info $service->consultaInformacion($request->get('tipo'), $request->get('id'));
  367.         return $this->render('prog_solicitud/informacion_tipo.html.twig', ['tipo' => $request->get('tipo'),'info' => $info]);
  368.     }
  369.     /**
  370.      * Consulta de solicitudes programadas por equipo, de tipo equipo
  371.      * @Route("/programada/consulta/equipo/{id}", name="prog_correctivo_programada_tipoa", methods={"GET", "POST"})
  372.      * @param Equipo $equipo
  373.      * @return Response
  374.      */
  375.     public function consultaProgramadaTipoA(Equipo $equipo) :Response
  376.     {
  377.         $info = [
  378.             'tipoEquipo' => 'Equipo',
  379.             'tipoMantenimiento' => 'Correctivo',
  380.             'siglasMantenimiento' => 'MC'
  381.         ];
  382.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($equipo->getIdEqu(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  383.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  384.             'info' => $info,
  385.             'solicitud' => $programadas
  386.         ]);
  387.     }
  388.     /**
  389.      * Consulta de solicitudes programadas por equipo, de tipo impresora
  390.      * @Route("/programada/consulta/impresora/{id}", name="prog_correctivo_programada_tipob", methods={"GET", "POST"})
  391.      * @param impresora $impresora
  392.      * @return Response
  393.      */
  394.     public function consultaProgramadaTipoB(Impresora $impresora) :Response
  395.     {
  396.         $info = [
  397.             'tipoEquipo' => 'Impresora',
  398.             'tipoMantenimiento' => 'Correctivo',
  399.             'siglasMantenimiento' => 'MC'
  400.         ];
  401.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($impresora->getIdImp(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  402.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  403.             'info' => $info,
  404.             'solicitud' => $programadas
  405.         ]);
  406.     }
  407.     /**
  408.      * Consulta de solicitudes programadas por equipo, de tipo red
  409.      * @Route("/programada/consulta/red/{id}", name="prog_correctivo_programada_tipoc", methods={"GET", "POST"})
  410.      * @param Red $red
  411.      * @return Response
  412.      */
  413.     public function consultaProgramadaTipoC(Red $red) :Response
  414.     {
  415.         $info = [
  416.             'tipoEquipo' => 'Red',
  417.             'tipoMantenimiento' => 'Correctivo',
  418.             'siglasMantenimiento' => 'MC'
  419.         ];
  420.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($red->getIdRed(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  421.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  422.             'info' => $info,
  423.             'solicitud' => $programadas
  424.         ]);
  425.     }
  426.     /**
  427.      * Consulta de solicitudes programadas por equipo, de tipo otro
  428.      * @Route("/programada/consulta/otro/{id}", name="prog_correctivo_programada_tipod", methods={"GET", "POST"})
  429.      * @param Otro $otro
  430.      * @return Response
  431.      */
  432.     public function consultaProgramadaTipoD(Otro $otro) :Response
  433.     {
  434.         $info = [
  435.             'tipoEquipo' => 'Otro',
  436.             'tipoMantenimiento' => 'Correctivo',
  437.             'siglasMantenimiento' => 'MC'
  438.         ];
  439.         $programadas $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($otro->getIdOtro(), $info['tipoEquipo'], $info['siglasMantenimiento']);
  440.         return $this->renderForm('prog_solicitud/programado.html.twig', [
  441.             'info' => $info,
  442.             'solicitud' => $programadas
  443.         ]);
  444.     }
  445.     /**
  446.      * Programar solicitud por equipo, solo tipo equipo
  447.      * @Route("/solicitud/equipo/{id}", name="app_solicitud_tipoa", methods={"GET", "POST"})
  448.      * @param Equipo $equipo
  449.      * @param Request $request
  450.      * @return Response
  451.      */
  452.     public function programarSolicitudTipoA(Request $requestEquipo $equipo) :Response
  453.     {
  454.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  455.         $info = [
  456.             'tipoEquipo' => 'Equipo',
  457.             'tipoMantenimiento' => 'Correctivo',
  458.             'marbete' => $equipo->getMarbete()
  459.         ];
  460.         $form $this->createForm(SolicitudType::class);
  461.         $form->remove('tipoEquipo');
  462.         $form->remove('idEquipo');
  463.         $form->remove('periodo');
  464.         $form->remove('tipoMantenimiento');
  465.         $form->remove('srealizado');
  466.         $form->remove('fregistro');
  467.         $form->remove('fatencion');
  468.         $form->remove('ffin');
  469.         $form->remove('evaluacion');
  470.         $form->remove('refacciones');
  471.         $form->remove('estatus');
  472.         $form->remove('usuario');
  473.         $form->remove('ubicacion');
  474.         $form->remove('gestor');
  475.         $form->handleRequest($request);
  476.         if ($form->isSubmitted() && $form->isValid()) {
  477.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  478.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  479.             }
  480.             $equipo->incrementMantenimientoCount();
  481.             $data = [
  482.                 "tipo" => $info['tipoEquipo'],
  483.                 "id" => $equipo->getIdEqu(),
  484.                 "marbete" => $equipo->getMarbete(),
  485.                 "iduni" => $equipo->getUnidad()->getIdUni(),
  486.                 "consuni" => $equipo->getUnidad()->getConsecutivo(),
  487.                 "unidad" => $equipo->getUnidad(),
  488.                 "usuario" => $equipo->getUsuario(),
  489.                 "ubicacion" => $equipo->getUbicacion(),
  490.                 "accion" => $form->get('falla')->getData(),
  491.                 "periodo" => $periodo
  492.             ];
  493.             $info $this->solicitudProgramacion($data);
  494.             return new JsonResponse($info);
  495.         }
  496.         if ($form->isSubmitted() && !$form->isValid()) {
  497.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  498.                 'form' => $form->createView(),
  499.                 'info' => $info
  500.             ]);
  501.             $response = new JsonResponse(['form' => $view]);
  502.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  503.             return $response;
  504.         }
  505.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  506.             'form' => $form,
  507.             'info' => $info
  508.         ]);
  509.     }
  510.     /**
  511.      * Programar solicitud por equipo, solo tipo impresora
  512.      * @Route("/solicitud/impresora/{id}", name="app_solicitud_tipob", methods={"GET", "POST"})
  513.      * @param Impresora $impresora
  514.      * @param Request $request
  515.      * @return Response
  516.      */
  517.     public function programarSolicitudTipoB(Request $requestImpresora $impresora) :Response
  518.     {
  519.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  520.         $info = [
  521.             'tipoEquipo' => 'Impresora',
  522.             'tipoMantenimiento' => 'Correctivo',
  523.             'marbete' => $impresora->getMarbete()
  524.         ];
  525.         $form $this->createForm(SolicitudType::class);
  526.         $form->remove('tipoEquipo');
  527.         $form->remove('idEquipo');
  528.         $form->remove('periodo');
  529.         $form->remove('tipoMantenimiento');
  530.         $form->remove('srealizado');
  531.         $form->remove('fregistro');
  532.         $form->remove('fatencion');
  533.         $form->remove('ffin');
  534.         $form->remove('evaluacion');
  535.         $form->remove('refacciones');
  536.         $form->remove('estatus');
  537.         $form->remove('usuario');
  538.         $form->remove('ubicacion');
  539.         $form->remove('gestor');
  540.         $form->handleRequest($request);
  541.         if ($form->isSubmitted() && $form->isValid()) {
  542.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  543.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  544.             }
  545.             $impresora->incrementMantenimientoCount();
  546.             $data = [
  547.                 "tipo" => $info['tipoEquipo'],
  548.                 "id" => $impresora->getIdImp(),
  549.                 "marbete" => $impresora->getMarbete(),
  550.                 "iduni" => $impresora->getUnidad()->getIdUni(),
  551.                 "consuni" => $impresora->getUnidad()->getConsecutivo(),
  552.                 "unidad" => $impresora->getUnidad(),
  553.                 "usuario" => $impresora->getUsuario(),
  554.                 "ubicacion" => $impresora->getUbicacion(),
  555.                 "accion" => $form->get('falla')->getData(),
  556.                 "periodo" => $periodo
  557.             ];
  558.             $info $this->solicitudProgramacion($data);
  559.             return new JsonResponse($info);
  560.         }
  561.         if ($form->isSubmitted() && !$form->isValid()) {
  562.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  563.                 'form' => $form->createView(),
  564.                 'info' => $info
  565.             ]);
  566.             $response = new JsonResponse(['form' => $view]);
  567.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  568.             return $response;
  569.         }
  570.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  571.             'form' => $form,
  572.             'info' => $info
  573.         ]);
  574.     }
  575.     /**
  576.      * Programar solicitud por equipo, solo tipo red
  577.      * @Route("/solicitud/red/{id}", name="app_solicitud_tipoc", methods={"GET", "POST"})
  578.      * @param Red $red
  579.      * @param Request $request
  580.      * @return Response
  581.      */
  582.     public function programarSolicitudTipoC(Request $requestRed $red) :Response
  583.     {
  584.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  585.         $info = [
  586.             'tipoEquipo' => 'Red',
  587.             'tipoMantenimiento' => 'Correctivo',
  588.             'marbete' => $red->getMarbete()
  589.         ];
  590.         $form $this->createForm(SolicitudType::class);
  591.         $form->remove('tipoEquipo');
  592.         $form->remove('idEquipo');
  593.         $form->remove('periodo');
  594.         $form->remove('tipoMantenimiento');
  595.         $form->remove('srealizado');
  596.         $form->remove('fregistro');
  597.         $form->remove('fatencion');
  598.         $form->remove('ffin');
  599.         $form->remove('evaluacion');
  600.         $form->remove('refacciones');
  601.         $form->remove('estatus');
  602.         $form->remove('usuario');
  603.         $form->remove('ubicacion');
  604.         $form->remove('gestor');
  605.         $form->handleRequest($request);
  606.         if ($form->isSubmitted() && $form->isValid()) {
  607.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  608.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  609.             }
  610.             $red->incrementMantenimientoCount();
  611.             $data = [
  612.                 "tipo" => $info['tipoEquipo'],
  613.                 "id" => $red->getIdRed(),
  614.                 "marbete" => $red->getMarbete(),
  615.                 "iduni" => $red->getUnidad()->getIdUni(),
  616.                 "consuni" => $red->getUnidad()->getConsecutivo(),
  617.                 "unidad" => $red->getUnidad(),
  618.                 "usuario" => $red->getUsuario(),
  619.                 "ubicacion" => $red->getUbicacion(),
  620.                 "accion" => $form->get('falla')->getData(),
  621.                 "fatencion" => null,
  622.                 "periodo" => $periodo
  623.             ];
  624.             $info $this->solicitudProgramacion($data);
  625.             return new JsonResponse($info);
  626.         }
  627.         if ($form->isSubmitted() && !$form->isValid()) {
  628.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  629.                 'form' => $form->createView(),
  630.                 'info' => $info
  631.             ]);
  632.             $response = new JsonResponse(['form' => $view]);
  633.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  634.             return $response;
  635.         }
  636.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  637.             'form' => $form,
  638.             'info' => $info
  639.         ]);
  640.     }
  641.     /**
  642.      * Programar solicitud por equipo, solo tipo otro
  643.      * @Route("/solicitud/otro/{id}", name="app_solicitud_tipod", methods={"GET", "POST"})
  644.      * @param Otro $otro
  645.      * @param Request $request
  646.      * @return Response
  647.      */
  648.     public function programarSolicitudTipoD(Request $requestOtro $otro) :Response
  649.     {
  650.         $periodo $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1'actual' => 1]);
  651.         $info = [
  652.             'tipoEquipo' => 'Otro',
  653.             'tipoMantenimiento' => 'Correctivo',
  654.             'marbete' => $otro->getMarbete()
  655.         ];
  656.         $form $this->createForm(SolicitudType::class);
  657.         $form->remove('tipoEquipo');
  658.         $form->remove('idEquipo');
  659.         $form->remove('periodo');
  660.         $form->remove('tipoMantenimiento');
  661.         $form->remove('srealizado');
  662.         $form->remove('fregistro');
  663.         $form->remove('fatencion');
  664.         $form->remove('ffin');
  665.         $form->remove('evaluacion');
  666.         $form->remove('refacciones');
  667.         $form->remove('estatus');
  668.         $form->remove('usuario');
  669.         $form->remove('ubicacion');
  670.         $form->remove('gestor');
  671.         $form->handleRequest($request);
  672.         if ($form->isSubmitted() && $form->isValid()) {
  673.             if($form->get('falla')->getData() == "" || $form->get('falla') == null){
  674.                 return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
  675.             }
  676.             $otro->incrementMantenimientoCount();
  677.             $data = [
  678.                 "tipo" => $info['tipoEquipo'],
  679.                 "id" => $otro->getIdOtro(),
  680.                 "marbete" => $otro->getMarbete(),
  681.                 "iduni" => $otro->getUnidad()->getIdUni(),
  682.                 "consuni" => $otro->getUnidad()->getConsecutivo(),
  683.                 "unidad" => $otro->getUnidad(),
  684.                 "usuario" => $otro->getUsuario(),
  685.                 "ubicacion" => $otro->getUbicacion(),
  686.                 "accion" => $form->get('falla')->getData(),
  687.                 "periodo" => $periodo
  688.             ];
  689.             $info $this->solicitudProgramacion($data);
  690.             return new JsonResponse($info);
  691.         }
  692.         if ($form->isSubmitted() && !$form->isValid()) {
  693.             $view $this->renderView('prog_solicitud/programar.html.twig', [
  694.                 'form' => $form->createView(),
  695.                 'info' => $info
  696.             ]);
  697.             $response = new JsonResponse(['form' => $view]);
  698.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  699.             return $response;
  700.         }
  701.         return $this->renderForm('prog_solicitud/programar.html.twig', [
  702.             'form' => $form,
  703.             'info' => $info
  704.         ]);
  705.     }
  706.     /**
  707.      * Función para crear objeto tipo equipo especificado e insertar en la base de datos
  708.      * @param array $data Array con la información específica a complementar
  709.      * @return array Para creación de botón en la vista
  710.      */
  711.     private function solicitudProgramacion($data)
  712.     {
  713.         date_default_timezone_set("America/Mexico_City");
  714.         $factual = new DateTime();
  715.         # Identificador de solicitud
  716.         $partA date("y");
  717.         $partB substr($data['iduni'], 33);
  718.         $partC str_pad($data['consuni'], 4,"0"STR_PAD_LEFT);
  719.         $idSolicitud $partA.$partB.$partC;
  720.         $save = new Solicitud();
  721.         $save->setIdSol($idSolicitud);
  722.         $save->setIdEquipo($data['id']);
  723.         $save->setTipoEquipo($data['tipo']);
  724.         $save->setTipoMantenimiento("MC");
  725.         $save->setUnidad($data['unidad']);
  726.         $save->setUsuario($data['usuario']);
  727.         $save->setUbicacion($data['ubicacion']);
  728.         $save->setPeriodo($data['periodo']);
  729.         $save->setFalla($data['accion']);
  730.         $save->setFregistro($factual);
  731.         $save->setFatencion($factual);
  732.         $save->setEstatus(1);
  733.         $this->entityManager->persist($save);
  734.         $this->entityManager->flush();
  735.         $unidad $data['unidad'];
  736.         $unidad->setConsecutivo($unidad->getConsecutivo() + 1);
  737.         $this->entityManager->persist($unidad);
  738.         $this->entityManager->flush();
  739.         $info = [
  740.             'mensaje' => 'Se ha generado la solicitud de mantenimiento, con el identificador ' $save->getIdSol(),
  741.             'ver_solicitud' => $this->generateUrl('prog_correctivo_vista_solicitud', ['id' => $save->getIdSol()], UrlGeneratorInterface::ABSOLUTE_URL),
  742.             'solicitud' => $save->getIdSol(),
  743.             'tipo_equipo' => $save->getTipoEquipo(),
  744.             'equipo' => $save->getIdEquipo(),
  745.             'marbete' => $data['marbete'],
  746.             'marca' => $data['marca'],
  747.             'modelo' => $data['modelo'],
  748.             'falla' => $save->getFalla(),
  749.             'tipo_mantenimiento' => $save->getTipoMantenimiento(),
  750.             'mantenimiento_count' => $data->getMantenimientoCount(),
  751.             'fregistro' => $save->getFregistro()->format("d M Y, H:m"),
  752.             'estatus' => $save->getEstatus()
  753.         ];
  754.         return $info;
  755.     }
  756. //Para subir formulario
  757. }