src/Controller/ConsultaReporteSolicitudController.php line 229

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Evaluacion;
  4. use App\Entity\Periodo;
  5. use App\Entity\Solicitud;
  6. use App\Entity\Unidad;
  7. use App\Entity\Usuario;
  8. use App\Form\EvaluacionType;
  9. use Box\Spout\Common\Exception\InvalidArgumentException;
  10. use Box\Spout\Common\Exception\IOException;
  11. use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
  12. use Box\Spout\Writer\Exception\WriterNotOpenedException;
  13. use DateTime;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Doctrine\ORM\EntityRepository;
  16. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\Form\Extension\Core\Type\DateType;
  19. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. #[Route('/consulta/solicitud')]
  26. class ConsultaReporteSolicitudController extends AbstractController
  27. {
  28.     public EntityManagerInterface $entityManager;
  29.     /**
  30.      * @param EntityManagerInterface $entityManager
  31.      */
  32.     public function __construct(EntityManagerInterface $entityManager)
  33.     {
  34.         $this->entityManager $entityManager;
  35.     }
  36.     #[Route('/'name'consulta_solicitud_index')]
  37.     public function index(Request $request): Response
  38.     
  39.         date_default_timezone_set('America/Mexico_City');
  40.         setlocale(LC_ALL'es_MX');
  41.         /** @var Usuario $user */
  42.         $user $this->getUser();
  43.         $perfil $request->getSession()->get('perfil');
  44.         $nivel $perfil[12]["nivel"]; 
  45.         if ($nivel == 0) {
  46.             $this->addFlash('danger''El acceso al módulo de "Consulta y Reportes de Solicitudes" está restringido.');
  47.             return $this->redirectToRoute('homepage');
  48.         }
  49.         /*$periodo = $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1, 'actual' => 1]);*/
  50.         if ($nivel == 1) {
  51.             $form $this->createFormBuilder()
  52.                 ->add('finicio'DateType::class, [
  53.                     'label' => 'Desde',
  54.                     'attr' => ['class' => 'form-control''class' => 'js-datepicker'],
  55.                     'widget' => 'single_text',
  56.                     'format' => 'yyyy-MM-dd',
  57.                     'data' => new \DateTime(date('Y') . '-01-01'),
  58.                 ])
  59.                 ->add('ftermino'DateType::class, [
  60.                     'label' => 'Hasta',
  61.                     'attr' => ['class' => 'form-control'],
  62.                     'widget' => 'single_text',
  63.                     'format' => 'yyyy-MM-dd',
  64.                     'data'  =>  new \DateTime()
  65.                 ])
  66.                 /*->add('buscar', ButtonType::class, [
  67.                     'attr' => ['class' => 'form-control btn-success', 'id' => 'submit-btn']
  68.                 ])*/
  69.                 ->getForm();
  70.             $form->handleRequest($request);
  71.             $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario($user->getIdUsu(), 2);
  72.         }
  73.         if ($nivel == 2){
  74.             $form $this->createFormBuilder()
  75.                 ->add('finicio'DateType::class, [
  76.                     'label' => 'Desde',
  77.                     //'attr' => ['class' => 'form-control'],
  78.                     'required' => true,
  79.                     'widget' => 'single_text',
  80.                     'format' => 'yyyy-MM-dd',
  81.                     'data' => new \DateTime(date('Y') . '-01-01'),
  82.                     'attr' => ['class' => 'js-datepicker'],
  83.                 ])
  84.                 ->add('ftermino'DateType::class, [
  85.                     'label' => 'Hasta',
  86.                     'attr' => ['class' => 'form-control'],
  87.                     'required' => true,
  88.                     'widget' => 'single_text',
  89.                     'format' => 'yyyy-MM-dd',
  90.                     'data' => new \DateTime(),
  91.                     'attr' => ['class' => 'js-datepicker'],
  92.                 ])
  93.                 ->add('unidad'EntityType::class,[
  94.                     'label' => 'Unidad administrativa',
  95.                     'class' => Unidad::class,
  96.                     'attr' => ['class' => 'form-control col-6','js-datepicker'],
  97.                     'placeholder' => 'Todo',
  98.                     'query_builder' => function (EntityRepository $er) {
  99.                         return $er->createQueryBuilder('u')
  100.                             ->orderBy('u.nombre''ASC');
  101.                     }
  102.                 ])
  103.                 /*->add('Consultar', ButtonType::class, [
  104.                     'attr' => ['class' => 'form-control btn-success', 'id' => 'submit-btn']
  105.                 ])*/
  106.                 ->getForm(); 
  107.             if($user->getRol()->getIdRol() == 3){
  108.                 $form->remove('unidad');
  109.                 $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03$user->getUnidad()->getIdUni(), $form['finicio']->getData()->format('Y-m-d'), $form['ftermino']->getData()->format('Y-m-d'));
  110.             }
  111.             if($user->getRol()->getIdRol() == 2){
  112.                 $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03,""$form['finicio']->getData()->format('Y-m-d'), $form['ftermino']->getData()->format('Y-m-d'));
  113.             }
  114.             $form->handleRequest($request);
  115.         }
  116.         if ($request->isMethod('POST')) {
  117.             if($user->getRol()->getIdRol() == 4){
  118.                 $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario($user->getIdUsu(), 2''$form['finicio']->getData()->format('Y-m-d'), $form['ftermino']->getData()->format('Y-m-d'));
  119.             }
  120.             if($user->getRol()->getIdRol() == 3){
  121.                 if (empty($form['finicio']->getData()) && empty($form['ftermino']->getData())) {
  122.                     $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03$user->getUnidad()->getIdUni());
  123.                 }
  124.                 if (!empty($form['finicio']->getData()) && !empty($form['ftermino']->getData())) {
  125.                     $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03$user->getUnidad()->getIdUni(), $form['finicio']->getData()->format('Y-m-d'), $form['ftermino']->getData()->format('Y-m-d'));
  126.                 }
  127.             }
  128.             if($user->getRol()->getIdRol() == 2){
  129.                 if (empty($form['unidad']->getData()) && empty($form['finicio']->getData()) && empty($form['ftermino']->getData())) {
  130.                     $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03);
  131.                 }
  132.                 if (!empty($form['unidad']->getData()) && empty($form['finicio']->getData()) && empty($form['ftermino']->getData())) {
  133.                     $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03$form->get('unidad')->getData()->getIdUni());
  134.                 }
  135.                 if (!empty($form['unidad']->getData()) && !empty($form['finicio']->getData()) && !empty($form['ftermino']->getData())) {
  136.                     $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03$form->get('unidad')->getData()->getIdUni(), $form['finicio']->getData()->format('Y-m-d'), $form['ftermino']->getData()->format('Y-m-d'));
  137.                 }
  138.                 if (empty($form['unidad']->getData()) && !empty($form['finicio']->getData()) && !empty($form['ftermino']->getData())) {
  139.                     $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(03''$form['finicio']->getData()->format('Y-m-d'), $form['ftermino']->getData()->format('Y-m-d'));
  140.                 }
  141.             }
  142.             $data = [];
  143.             $i 0;
  144.             foreach ($solicitudes as $s){
  145.                 $evaluacionUrl $this->generateUrl('consulta_solicitud_evaluacion', ['idSol' => $s['id_sol']]);
  146.                 $viewUrl $this->generateUrl('consulta_solicitud_vista_solicitud', ['id' => $s['id_sol']]);
  147.                 $data[$i]['id_sol'] = $s['id_sol'];
  148.                 $data[$i]['tipo_equipo'] = $s['tipo_equipo'];
  149.                 $data[$i]['marbete'] = $s['marbete'];
  150.                 $data[$i]['marca'] = $s['marca'];
  151.                 $data[$i]['modelo'] = $s['modelo'];
  152.                 $data[$i]['id_equipo'] = $s['id_equipo'];
  153.                 $data[$i]['ubicacion'] = $s['ubicacion'];
  154.                 $data[$i]['usuario'] = $s['usuario'];
  155.                 $data[$i]['gestor'] = $s['gestor'];
  156.                 $data[$i]['periodo'] = $s['periodo'];
  157.                 $data[$i]['tipo_mantenimiento'] = $s['tipo_mantenimiento'];
  158.                 $data[$i]['falla'] = $s['falla'];
  159.                 $data[$i]['srealizado'] = $s['srealizado'];
  160.                 $data[$i]['fregistro'] = $s['fregistro'];
  161.                 $data[$i]['fatencion'] = $s['fatencion'];
  162.                 $data[$i]['ffin'] = $s['ffin'];
  163.                 $data[$i]['fevaluacion'] = $s['fevaluacion'];
  164.                 $data[$i]['refacciones'] = $s['refacciones'];
  165.                 $data[$i]['estatus'] = $s['estatus'];
  166.                 $data[$i]['unidad'] = $s['unidad'];
  167.                 $data[$i]['ver'] = $viewUrl;
  168.                 $data[$i]['evaluacion'] = $evaluacionUrl;
  169.                 $i++;
  170.             }
  171.             return new JsonResponse($dataResponse::HTTP_OK);
  172.         }
  173.         return $this->render('consulta_solicitud/index.html.twig', [
  174.             'form' => $form->createView(),
  175.             'solicitudes' => $solicitudes
  176.         ]);
  177.     }
  178.     /**
  179.      * Vista detallada de solicitud
  180.      * @Route("/vista/solicitud/{id}", name="consulta_solicitud_vista_solicitud", methods={"GET", "POST"})
  181.      * @param Request $request
  182.      * @return Response
  183.      */
  184.     public function vistaSolicitud(Request $request) :Response
  185.     {
  186.         $solicitud $this->entityManager->getRepository(Solicitud::class)->detalleTipoEquipoSolicitud($request->get('id'));
  187.         return $this->render('prog_solicitud/informacion_solicitud.html.twig', ['info' => $solicitud]);
  188.     }
  189.     #[Route('/vista/contador'name'consulta_solicitud_vista')]
  190.     public function vistaContador() :JsonResponse
  191.     {
  192.         /** @var Usuario $user */
  193.         $user $this->getUser();
  194.         if($user->getRol()->getIdRol() == 4) {
  195.             $cTodoEquipo $this->entityManager->getRepository(Solicitud::class)->conteoEstatusTipoEquipoUsuario($user->getIdUsu(), 2);
  196.         }
  197.         if($user->getRol()->getIdRol() == 3) {
  198.             $cTodoEquipo $this->entityManager->getRepository(Solicitud::class)->conteoEstatusTipoEquipoUsuario(03$user->getUnidad()->getIdUni());
  199.         }
  200.         if($user->getRol()->getIdRol() == 2) {
  201.             $cTodoEquipo $this->entityManager->getRepository(Solicitud::class)->conteoEstatusTipoEquipoUsuario(04);
  202.         }
  203.         return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);
  204.     }
  205.     /**
  206.      * Evaluación de mantenimiento por solicitud
  207.      * @Route("/evaluacion/{idSol}", name="consulta_solicitud_evaluacion", methods={"GET", "POST"})
  208.      * @param Solicitud $solicitud
  209.      * @param Request $request
  210.      * @return Response|JsonResponse
  211.      */
  212.     public function evaluacionMantenimiento(Request $requestSolicitud $solicitud) :Response
  213.     {
  214.         date_default_timezone_set("America/Mexico_City");
  215.         $contestada $this->entityManager->getRepository(Evaluacion::class)->findOneBy(['solicitud' => $solicitud->getIdSol()]);
  216.         $nueva 0;
  217.         $info = [
  218.             'solicitud' => $solicitud->getIdSol(),
  219.             'tipoMantenimiento' => $solicitud->getTipoMantenimiento(),
  220.         ];
  221.         if (empty($contestada) && $solicitud->getEstatus() == 3) {
  222.             $nueva 1;
  223.             $time = new DateTime();
  224.             $form $this->createForm(EvaluacionType::class);
  225.             $form->handleRequest($request);
  226.             if ($form->isSubmitted() && $form->isValid()) {
  227.                 $evaluacion = new Evaluacion();
  228.                 $evaluacion->setEvalua1($form->get('evalua1')->getData());
  229.                 $evaluacion->setEvalua2($form->get('evalua2')->getData());
  230.                 $evaluacion->setEvalua3($form->get('evalua3')->getData());
  231.                 $evaluacion->setEvalua4($form->get('evalua4')->getData());
  232.                 $evaluacion->setEvalua5($form->get('evalua5')->getData());
  233.                 $evaluacion->setSolicitud($solicitud);
  234.                 $this->entityManager->persist($evaluacion);
  235.                 $this->entityManager->flush();
  236.                 $solicitud->setEstatus(4);
  237.                 $solicitud->setFevaluacion($time);
  238.                 $this->entityManager->persist($solicitud);
  239.                 $this->entityManager->flush();
  240.                 if ($solicitud->getEstatus() == 4){
  241.                     $estatus="<span class='badge bg-gradient-green d-block'>Evaluado</span>";
  242.                 }
  243.                 return new JsonResponse([
  244.                     'id' => $solicitud->getIdSol(),
  245.                     'estatus' => $estatus
  246.                 ]);
  247.             }
  248.         } else {
  249.             $form $this->createForm(EvaluacionType::class, $contestada);
  250.             $form->handleRequest($request);
  251.         }
  252.         if ($form->isSubmitted() && !$form->isValid()) {
  253.             $view $this->renderView('prog_correctivo/evaluacion.html.twig', [
  254.                 'form' => $form->createView(),
  255.                 'info' => $info,
  256.                 'nueva' => $nueva
  257.             ]);
  258.             $response = new JsonResponse(['form' => $view]);
  259.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  260.             return $response;
  261.         }
  262.         return $this->renderForm('prog_correctivo/evaluacion.html.twig', [
  263.             'form' => $form,
  264.             'info' => $info,
  265.             'nueva' => $nueva
  266.         ]);
  267.     }
  268.     /**
  269.      * @Route("/reporte/excel/{id}/{finicio}/{ftermino}", name= "consulta_solicitud_reporte_excel")
  270.      * @param Request $request
  271.      * @return BinaryFileResponse
  272.      * @throws IOException
  273.      * @throws InvalidArgumentException
  274.      * @throws WriterNotOpenedException
  275.      */
  276.     public function generarExcelReporteAction(Request $request): BinaryFileResponse
  277.     {
  278.         date_default_timezone_set('America/Mexico_City');
  279.         setlocale(LC_ALL'es_MX');
  280.         ini_set('memory_limit''5120M');
  281.         ini_set('max_execution_time'0);
  282.         ini_set('output_buffering'0);
  283.         # Obtenemos los datos del documento
  284.         /** @var Usuario $user */
  285.         $user $this->getUser();
  286.         if ($user->getRol()->getIdRol() == 3){
  287.             if($request->get('id') != "undefined"){
  288.                 $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(04$request->get('id'), $request->get('finicio'), $request->get('ftermino'));
  289.             }
  290.         }
  291.         if ($user->getRol()->getIdRol() == 4){
  292.             if($request->get('id') != "undefined"){
  293.                 $solicitudes $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario($request->get('id'), 5''$request->get('finicio'), $request->get('ftermino'));
  294.             }
  295.         }
  296.         # Definir el nombre temporal del archivo
  297.         $filePath 'solicitudes.xlsx';
  298.         # Se definen las cabeceras del archivo
  299.         $cabecera WriterEntityFactory::createRowFromArray([
  300.             'Nombre(s)',
  301.             'Apellido(s)',
  302.             'Correo',
  303.             'Marbete',
  304.             'Descripción',
  305.             'Acción a Realizar',
  306.             'No. Solicitud',
  307.             'Tipo de Equipo',
  308.             'Ubicación',
  309.             'Gestor',
  310.             'Periodo',
  311.             'Tipo de Mantenimiento',
  312.             'Incidente',
  313.             'Servicio Realizado',
  314.             'Fecha de Registro',
  315.             'Fecha de Atención',
  316.             'Fecha de Termino',
  317.             'Fecha de Evaluación',
  318.             'Refacciones',
  319.             'Estatus',
  320.             'Unidad',
  321.             '1. La falla reportada, Ya se había presentado en el reporte inmediato anterior',
  322.             '2. ¿Cómo calificas el tiempo de respuesta a tu reporte?',
  323.             '3. ¿La solución a tu problema, ¿satisface tus necesidades laborales?',
  324.             '4. ¿En general, cómo calificarías el servicio recibido?',
  325.             '5. Si pudieras, ¿qué mejorarías acerca del Servicio de Mantenimiento recibido?'
  326.         ]);
  327.         # Se crea el arreglo con los datos del cuerpo del documento
  328.         $data = [];
  329.         $n 1;
  330.         dump($solicitudes);
  331.         foreach ($solicitudes as $s) {
  332.             $estatus $s['estatus'];
  333.             $r1 '';
  334.             $r2 '';
  335.             $r3 '';
  336.             $r4 '';
  337.             $r5 '';
  338.             if ($estatus == 1)
  339.             {
  340.                 $estatus "Pendiente";
  341.             } elseif ($estatus == 2)
  342.             {
  343.                 $estatus "En proceso";
  344.             } elseif ($estatus == 3)
  345.             {
  346.                 $estatus "Atendido";
  347.             } elseif ($estatus == 4)
  348.             {
  349.                 $estatus "Evaluado";
  350.                 $evaluacion $this->entityManager->getRepository(Solicitud::class)->respuestasSolicitudEvaluacion($s['id_sol']);
  351.                 if(!empty($evaluacion)){
  352.                     $r1 $evaluacion['evalua1'];
  353.                     ($r1 == 1) ? $r1 "Si" $r1 "No";
  354.                     $r2 $evaluacion['evalua2'];
  355.                     if ($r2 == 5)
  356.                     {
  357.                         $r2 "Muy bueno";
  358.                     } elseif ($r2 == 4)
  359.                     {
  360.                         $r2 "Bueno";
  361.                     } elseif ($r2 == 3)
  362.                     {
  363.                         $r2 "Regular";
  364.                     } elseif ($r2 == 2)
  365.                     {
  366.                         $r2 "Aceptable";
  367.                     } elseif ($r2 == 1)
  368.                     {
  369.                         $r2 "Deficiente";
  370.                     }
  371.                     $r3 $evaluacion['evalua3'];
  372.                     if ($r3 == 5)
  373.                     {
  374.                         $r3 "Muy bueno";
  375.                     } elseif ($r3 == 4)
  376.                     {
  377.                         $r3 "Bueno";
  378.                     } elseif ($r3 == 3)
  379.                     {
  380.                         $r3 "Regular";
  381.                     } elseif ($r3 == 2)
  382.                     {
  383.                         $r3 "Aceptable";
  384.                     } elseif ($r3 == 1)
  385.                     {
  386.                         $r3 "Deficiente";
  387.                     }
  388.                     $r4 $evaluacion['evalua4'];
  389.                     if ($r4 == 5)
  390.                     {
  391.                         $r4 "Muy bueno";
  392.                     } elseif ($r4 == 4)
  393.                     {
  394.                         $r4 "Bueno";
  395.                     } elseif ($r4 == 3)
  396.                     {
  397.                         $r4 "Regular";
  398.                     } elseif ($r4 == 2)
  399.                     {
  400.                         $r4 "Aceptable";
  401.                     } elseif ($r4 == 1)
  402.                     {
  403.                         $r4 "Deficiente";
  404.                     }
  405.                     $r5 $evaluacion['evalua5'];
  406.                 }
  407.             }
  408.             $p $s['refacciones'];
  409.             ($p == '' || $p == null) ? $p 'No' $p 'Si';
  410.             $data[] = WriterEntityFactory::createRowFromArray([
  411.                 $s['unombre'],
  412.                 $s['uapellido'],
  413.                 $s['ucorreo'],
  414.                 $s['marbete'],
  415.                 'Marca: ' $s['marca'] . ' Modelo: ' $s['modelo'],
  416.                 $s['falla'],
  417.                 $s['id_sol'],
  418.                 $s['tipo_equipo'],
  419.                 $s['nubicacion'],
  420.                 $s['gnombre'] . ' ' $s['gapellido'] . ' ' $s['gcorreo'],
  421.                 $s['periodo'],
  422.                 $s['tipo_mantenimiento'],
  423.                 $s['falla'],
  424.                 $s['srealizado'],
  425.                 $s['fregistro'],
  426.                 $s['fatencion'],
  427.                 $s['ffin'],
  428.                 $s['fevaluacion'],
  429.                 $p,
  430.                 $estatus,
  431.                 $s['nunidad'],
  432.                 $r1,
  433.                 $r2,
  434.                 $r3,
  435.                 $r4,
  436.                 $r5
  437.             ]);
  438.             $n++;
  439.         }
  440.         # Se crea el documento en formato CSV
  441.         $writer WriterEntityFactory::createXLSXWriter();
  442.         $writer
  443.             ->openToFile($filePath)
  444.             ->addRow($cabecera)
  445.             ->addRows($data)
  446.             ->close()
  447.         ;
  448.         $response = new BinaryFileResponse($filePath);
  449.         $response->setContentDisposition(
  450.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  451.             'ReporteSolicitudes' '_' date('Y-m-d His') . '.xlsx'
  452.         );
  453.         $response->deleteFileAfterSend(true);
  454.         return $response;
  455.     }
  456.     //Para subir formulario
  457. }