src/Controller/OtroController.php line 224

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Otro;
  4. use App\Entity\Solicitud;
  5. use App\Entity\Usuario;
  6. use App\Form\OtroType;
  7. use App\Form\UnidadFiltroType;
  8. use App\Repository\OtroRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use DateTime;
  16. use TCPDF;
  17. use App\Service\DocumentoPDF;
  18. use Dompdf\Dompdf;
  19. use Dompdf\Options;
  20. /*
  21. ------------- COMPORTAMIENTOS -------------
  22. 0 = Sin acceso
  23. 1 = Administración de equipo del plantel
  24. 2 = Administración de equipo universal
  25. 3 = Visualización universal
  26. */
  27. #[Route('/otro')]
  28. class OtroController extends AbstractController
  29. {
  30.     public EntityManagerInterface $emi;
  31.     public function __construct(EntityManagerInterface $entityManager)
  32.     {
  33.         $this->emi $entityManager;
  34.     }
  35.     #[Route('/'name'app_otro_index'methods: ['GET''POST'])]
  36.     public function index(Request $requestOtroRepository $otroRepository): Response #
  37.     {
  38.         # Se obtiene el nivel de acceso
  39.         $perfil $request->getSession()->get('perfil');
  40.         $nivel $perfil[7]["nivel"];
  41.         //$otros = [];
  42.         # Si el nivel de acceso es 0 = "Sin acceso" entonces se retorna a página de inicio
  43.         if ($nivel == 0) {
  44.             $this->addFlash('danger''El acceso a agregar "Otros equipos" está restringido.');
  45.             return $this->redirectToRoute('homepage');
  46.         }
  47.         # Usuario que está autenticado
  48.         /** @var Usuario $user */
  49.         $user $this->getUser();
  50.         $rol $user->getRol() ? $user->getRol()->getIdRol() : null;
  51.         # Verifica el estado de la unidad del usuario
  52.         $unidad $user->getUnidad();
  53.         /*if ($unidad && !$unidad->getActiva()) {
  54.             // Agrega una notificación persistente
  55.             $this->addFlash('warning', 'La unidad a la que está asociado está inactiva. Solicite al administrador la activación de la unidad.');
  56.             //return $this->redirectToRoute('homepage');
  57.         }*/
  58.         $unidadActiva true;  // Asume que la unidad está activa
  59.         if ($unidad && !$unidad->getActiva()) {
  60.             $unidadActiva false;  // Cambia el estado si la unidad no está activa
  61.             //$this->addFlash('warning', 'En este momento no tiene privilegios para editar sus inventarios, si lo requiere, por favor solicítelo al Administrador.');
  62.         }
  63.         $marca '';
  64.         $modelo '';
  65.         # Formulario de filtro por unidad
  66.         (in_array($nivel, [1,2,3,4,5,6])) ? $uni true $uni false $marca true $marca false $modelo true $modelo false;/*2,3*/
  67.         $form $this->createForm(UnidadFiltroType::class, null, ['unidad' => $uni'marca'=>$marca'modelo'=>$modelo'tipo'=> 'otro']);
  68.         $form->handleRequest($request);
  69.         if ($request->isMethod('POST')) {
  70.             $criteria = [];
  71.             # Verifica y añade los criterios de búsqueda
  72.             if ($form['unidad']->getData()) {
  73.                 $criteria['unidad'] = $form['unidad']->getData()->getIdUni();
  74.             }
  75.             if ($form['marca']->getData()) {
  76.                 $criteria['marca'] = $form['marca']->getData()->getMarca();
  77.             }
  78.             if ($form['modelo']->getData()) {
  79.                 $criteria['modelo'] = $form['modelo']->getData()->getModelo();
  80.             }
  81.             if ($form['uso']->getData()) {
  82.                 $criteria['uso'] = $form['uso']->getData();
  83.             }
  84.             if ($form['estatus']->getData()) {
  85.                 $criteria['estatus'] = $form['estatus']->getData();
  86.             }
  87.             # Obtiene los equipos según los criterios
  88.             $otros = empty($criteria) ? $otroRepository->findAll() : $otroRepository->findBy($criteria);
  89.             $data = [];
  90.             foreach ($otros as $otro) {
  91.                 $uso = match ($otro->getUso()) {
  92.                     '0' => '<span>Docente</span>',
  93.                     '1' => '<span>Educativo</span>',
  94.                     '2' => '<span>Administrativo</span>',
  95.                     default => ""
  96.                 };
  97.                 $estatus = match ($otro->getEstatus()) {
  98.                     '1' => '<span class="badge bg-gradient-green d-block">En operación</span>',
  99.                     '2' => '<span class="badge bg-gradient-orange d-block">Descompuesto</span>',
  100.                     '3' => '<span class="badge bg-gradient-primary d-block">Sin instalar</span>',
  101.                     '4' => '<span class="badge bg-gradient-yellow d-block">En proceso de baja</span>',
  102.                     '5' => '<span class="badge bg-gradient-danger d-block">Baja</span>',
  103.                     default => ""
  104.                 };
  105.                 $ver $this->generateUrl('app_otro_show', ['idOtro' => $otro->getIdOtro()]);
  106.                 $editar $this->generateUrl('app_otro_edit', ['idOtro' => $otro->getIdOtro()]);
  107.                 $editar_resguardo $this->generateUrl('app_otro_edit_resguardo', ['idOtro' => $otro->getIdOtro()]);
  108.                 $eliminar $this->generateUrl('app_otro_delete', ['idOtro' => $otro->getIdOtro()]);
  109.                 $u = ($otro->getUsuario()) ? $otro->getUsuario()->getNombre() . ' ' $otro->getUsuario()->getPapellido() : 'Sin usuario';
  110.                 $data[] = [
  111.                     'idOtro' => $otro->getIdOtro(),
  112.                     'marbete' => $otro->getMarbete(),
  113.                     'descripcion' => $otro->getDescripcion(),
  114.                     'marca' => $otro->getMarca(),
  115.                     'modelo' => $otro->getModelo(),
  116.                     'uso' => $uso,
  117.                     'unidad' => $otro->getUnidad()->getNombre(),
  118.                     'estatus' => $estatus,
  119.                     'usuario' => $u,
  120.                     'ubicacion' => substr($otro->getUnidad()->getIdUni(), 33) . ' - ' $otro->getUbicacion()->getArea(),
  121.                     'ver' => $ver,
  122.                     'editar' => $editar,
  123.                     'editar_resguardo' => $editar_resguardo,
  124.                     'eliminar' => $eliminar
  125.                 ];
  126.             }
  127.             return new JsonResponse($dataResponse::HTTP_OK);
  128.         }
  129.         if ($nivel == 1) {
  130.             $otros $otroRepository->findBy(['unidad' => $user->getUnidad()]);
  131.         }
  132.         if (in_array($nivel, [23])) {
  133.             $otros $otroRepository->findAll();
  134.         }
  135.         $otros = [];
  136.         return $this->render('otro/index.html.twig', [
  137.             //'url' => $this->generateUrl('app_otro_index'),
  138.             'otros' => $otros,
  139.             'form' => $form->createView(),
  140.             'nivel' => $nivel,
  141.             'unidadActiva' => $unidadActiva,
  142.             'rol' => $rol,
  143.         ]);
  144.     }
  145.     #[Route('/new'name'app_otro_new'methods: ['GET''POST'])]
  146.     public function new(Request $requestEntityManagerInterface $entityManager): Response #Request $request, OtroRepository $otroRepository
  147.     {
  148.         # Se obtiene el nivel de acceso
  149.         $perfil $request->getSession()->get('perfil');
  150.         $nivel $perfil[7]["nivel"];
  151.         # Si el nivel de acceso es 0, 2 o 3 entonces se retorna a página de inicio
  152.         if (in_array($nivel, [023])) {
  153.             $this->addFlash('danger''El acceso a agregar "Otros equipos" está restringido.');
  154.             return $this->redirectToRoute('homepage');
  155.         }
  156.         /** @var Usuario $user */
  157.         $user $this->getUser();
  158.         date_default_timezone_set("America/Mexico_City");
  159.         $fecha = new DateTime();
  160.         #Se construye el formulario
  161.         $otro = new Otro();
  162.         $form $this->createForm(OtroType::class, $otro,['unidad' => true/*, 'mantenimientoCount' => false*/]);
  163.         $form->handleRequest($request);
  164.         if ($form->isSubmitted() && $form->isValid()) {
  165.             $otro->setUnidad($otro->getUbicacion()->getUnidad());
  166.             $otro->setFactualizacion($fecha);
  167.             $otro->setFalta($fecha);
  168.             $entityManager->persist($otro);
  169.             $entityManager->flush();
  170.             return $this->redirectToRoute('app_otro_index', [], Response::HTTP_SEE_OTHER);
  171.         }
  172.         return $this->renderForm('otro/new.html.twig', [
  173.             'otro' => $otro,
  174.             'form' => $form,
  175.         ]);
  176.     }
  177.     #[Route('/show'name'app_otro_show'methods: ['POST'])]
  178.     public function show(Request $requestOtroRepository $otroRepository): Response
  179.     {
  180.         $idOtro $request->request->get('idOtro');
  181.         $otro $otroRepository->findOneBy(['idOtro' => $idOtro]);
  182.         return $this->render('otro/show.html.twig', [
  183.             'otro' => $otro,
  184.         ]);
  185.     }
  186.     #[Route('/{idOtro}/edit'name'app_otro_edit'methods: ['GET''POST'])]
  187.     public function edit(Request $requestOtro $otroEntityManagerInterface $entityManager): Response #Request $request, Otro $otro, OtroRepository $otroRepository
  188.     {
  189.         # Se obtiene el nivel de acceso
  190.         $perfil $request->getSession()->get('perfil');
  191.         $nivel $perfil[7]["nivel"];
  192.         # Bloqueo de edición de [Merbete, Descripción, Marca, Modelo, No. serie] exceptuando al comportamiento 2
  193.         $bloquear_edicion true;
  194.         $unidad true;
  195.         ($nivel == 2) && $bloquear_edicion false;
  196.         ($nivel == 2) && $unidad false;
  197.         $uanterior $otro->getUsuario()->getNombre() .' '$otro->getUsuario()->getPapellido() .' '$otro->getUsuario()->getSapellido();
  198.         $form $this->createForm(OtroType::class, $otro,  ['unidad' => $unidad'bloquear_edicion' => $bloquear_edicion]);
  199.         $form->handleRequest($request);
  200.         /** @var Usuario $user */
  201.         $user $this->getUser();
  202.         date_default_timezone_set("America/Mexico_City");
  203.         $fecha = new DateTime();
  204.         if ($form->isSubmitted() && $form->isValid()) {
  205.             $s $entityManager->getRepository(Solicitud::class)->findBy(['idEquipo' => $otro->getIdOtro(), 'estatus' =>[1,2,3], 'tipoEquipo' => 'Otro']);
  206.             $usu $form->get('usuario')->getData();
  207.             $ubi $form->get('ubicacion')->getData();
  208.             $otro->setFactualizacion($fecha);
  209.             $otro->setUnidad($otro->getUbicacion()->getUnidad());
  210.             $entityManager->persist($otro);
  211.             if($s != []){
  212.                 $solicitudesArray = [];
  213.                 foreach ($s as $solicitud) {
  214.                     if ($solicitud->getEstatus() == 1){
  215.                         $estatus1 "Pendiente";
  216.                     }elseif ($solicitud->getEstatus() == 2){
  217.                         $estatus1 "Proceso";
  218.                     }elseif ($solicitud->getEstatus() == 3){
  219.                         $estatus1 "Atendido";
  220.                     }elseif ($solicitud->getEstatus() == 4){
  221.                         $estatus1 "Evaluado";
  222.                     }
  223.                     $solicitud->setUsuario($usu);
  224.                     $solicitud->setUbicacion($ubi);
  225.                     $entityManager->persist($solicitud);
  226.                     $e = array(
  227.                         'idSolicitud' => $solicitud-> getIdSol(),
  228.                         'estatus' => $estatus1,
  229.                         'usuAnterior' => $uanterior,
  230.                         'usuNuevo' => $solicitud->getUsuario()->getNombre() .' '$solicitud->getUsuario()->getPapellido() .' '$solicitud->getUsuario()->getSapellido()
  231.                     );
  232.                     $solicitudesArray[] = $e;
  233.                 }
  234.             }else{
  235.                 $solicitudesArray = array(
  236.                     'idSolicitud' => 0
  237.                 );
  238.             }
  239.             $entityManager->flush();
  240.             if ($otro->getEstatus()==2){
  241.                 $estatus="Descompuesto";
  242.             }else if ($otro->getEstatus()==1){
  243.                 $estatus="En operación";
  244.             }else if ($otro->getEstatus()==3){
  245.                 $estatus="Sin instalar";
  246.             }else if ($otro->getEstatus()==4){
  247.                 $estatus="En proceso de baja";
  248.             }else if ($otro->getEstatus()==5){
  249.                 $estatus="Baja";
  250.             }
  251.             $data = array(
  252.                 'idOtro' => $otro->getIdOtro(),
  253.                 'marbete' => $otro->getMarbete(),
  254.                 'descripcion' => $otro->getDescripcion(),
  255.                 'marca' => $otro->getMarca(),
  256.                 'modelo' => $otro->getModelo(),
  257.                 'estatus' => $estatus,
  258.                 'usuario' => $otro->getUsuario()->getNombre() . ' ' $otro->getUsuario()->getPapellido(),
  259.                 'ubicacion' => substr($otro->getUnidad()->getIdUni(), 33) . ' - ' $otro->getUbicacion()->getArea(),
  260.                 'mensaje' => 'Se actualizo correctamente',
  261.             );
  262.              //Combina ambos arrays
  263.             $responseData array_merge($data, ['solicitudes'=>$solicitudesArray]);
  264.              // Retorna el array combinado como respuesta JSON
  265.             return new JsonResponse($responseData);
  266.         }
  267.         if($form->isSubmitted() && !$form->isValid()){
  268.             $view $this->renderView('otro/modal.html.twig', [
  269.                 'otro' => $otro,
  270.                 'form' => $form->createView(),
  271.             ]);
  272.             $response = new JsonResponse(['form' => $view]);
  273.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  274.             return $response;
  275.         }
  276.         return $this->renderForm('otro/modal.html.twig', [
  277.             'otro' => $otro,
  278.             'form' => $form,
  279.         ]);
  280.     }
  281.     #[Route('/{idOtro}'name'app_otro_delete'methods: ['POST'])]
  282.     public function delete(Request $requestOtro $otroOtroRepository $otroRepository): Response
  283.     {
  284.         if ($this->isCsrfTokenValid('delete'.$otro->getIdOtro(), $request->request->get('_token'))) {
  285.             $otroRepository->remove($otrotrue);
  286.         }
  287.         return $this->redirectToRoute('app_otro_index', [], Response::HTTP_SEE_OTHER);
  288.     }
  289.     #[Route('/pdf/{idOtro}'name'otro_pdf')]
  290.     public function generaResguardoPdf(Otro $otro): Response
  291.     {
  292.         // Configura Dompdf
  293.         $pdfOptions = new Options();
  294.         $pdfOptions->set('defaultFont''Arial');
  295.         // Inicializa Dompdf
  296.         $dompdf = new Dompdf($pdfOptions);
  297.         // Renderiza la plantilla Twig
  298.         $html $this->renderView('otro/pdf.html.twig', [
  299.             'otro' => $otro
  300.         ]);
  301.         // Carga el HTML en Dompdf
  302.         $dompdf->loadHtml($html);
  303.         // (Opcional) Configura el tamaño de papel y la orientación
  304.         $dompdf->setPaper('A4''portrait');
  305.         // Renderiza el PDF
  306.         $dompdf->render();
  307.         // Obtiene el contenido del PDF generado
  308.         $pdfOutput $dompdf->output();
  309.         // Devuelve una respuesta con el contenido del PDF como un archivo adjunto
  310.         return new Response($pdfOutputResponse::HTTP_OK, [
  311.             'Content-Type' => 'application/pdf',
  312.             'Content-Disposition' => 'attachment; filename="otro' $otro->getIdOtro() . '.pdf"',
  313.         ]);
  314.     }
  315.     #[Route('/{idOtro}/edit_resguardo'name'app_otro_edit_resguardo'methods: ['GET''POST'])]
  316.     public function editresguardo(Request $requestOtro $otroEntityManagerInterface $entityManager): Response #Request $request, Otro $otro, OtroRepository $otroRepository
  317.     {
  318.         # Se obtiene el nivel de acceso
  319.         $perfil $request->getSession()->get('perfil');
  320.         $nivel $perfil[7]["nivel"];
  321.         # Bloqueo de edición de [Merbete, Descripción, Marca, Modelo, No. serie] exceptuando al comportamiento 2
  322.         $bloquear_edicion true;
  323.         $unidad true;
  324.         ($nivel == 2) && $bloquear_edicion false;
  325.         ($nivel == 2) && $unidad false;
  326.         $uanterior $otro->getUsuario()->getNombre() .' '$otro->getUsuario()->getPapellido() .' '$otro->getUsuario()->getSapellido();
  327.         $form $this->createForm(OtroType::class, $otro,  ['unidad' => $unidad'bloquear_edicion' => $bloquear_edicion]);
  328.         $form->handleRequest($request);
  329.         /** @var Usuario $user */
  330.         $user $this->getUser();
  331.         date_default_timezone_set("America/Mexico_City");
  332.         $fecha = new DateTime();
  333.         if ($form->isSubmitted() && $form->isValid()) {
  334.             $s $entityManager->getRepository(Solicitud::class)->findBy(['idEquipo' => $otro->getIdOtro(), 'estatus' => [1,2,3] , 'tipoEquipo' => 'Otro']);
  335.             $usu $form->get('usuario')->getData();
  336.             $ubi $form->get('ubicacion')->getData();
  337.             $uni$form->get('unidad')->getData();
  338.             $otro->setFactualizacion($fecha);
  339.             $otro->setUnidad($otro->getUbicacion()->getUnidad());
  340.             $entityManager->persist($otro);
  341.             if($s != []){
  342.                 $solicitudesArray = [];
  343.                 foreach ($s as $solicitud) {
  344.                     if ($solicitud->getEstatus() == 1){
  345.                         $estatus1 "Pendiente";
  346.                     }elseif ($solicitud->getEstatus() == 2){
  347.                         $estatus1 "Proceso";
  348.                     }elseif ($solicitud->getEstatus() == 3){
  349.                         $estatus1 "Atendido";
  350.                     }elseif ($solicitud->getEstatus() == 4){
  351.                         $estatus1 "Evaluado";
  352.                     }
  353.                     $solicitud->setUsuario($usu);
  354.                     $solicitud->setUbicacion($ubi);
  355.                     $solicitud->setUnidad($uni);
  356.                     $entityManager->persist($solicitud);
  357.                     $e = array(
  358.                         'idSolicitud' => $solicitud-> getIdSol(),
  359.                         'estatus' => $estatus1,
  360.                         'usuAnterior' => $uanterior,
  361.                         'usuNuevo' => $solicitud->getUsuario()->getNombre() .' '$solicitud->getUsuario()->getPapellido() .' '$solicitud->getUsuario()->getSapellido()
  362.                     );
  363.                     $solicitudesArray[] = $e;
  364.                 }
  365.             }else{
  366.                 $solicitudesArray = array(
  367.                     'idSolicitud' => 0
  368.                 );
  369.             }
  370.             $entityManager->flush();
  371.             if ($otro->getEstatus()==2){
  372.                 $estatus="Descompuesto";
  373.             }else if ($otro->getEstatus()==1){
  374.                 $estatus="En operación";
  375.             }else if ($otro->getEstatus()==3){
  376.                 $estatus="Sin instalar";
  377.             }else if ($otro->getEstatus()==4){
  378.                 $estatus="En proceso de baja";
  379.             }else if ($otro->getEstatus()==5){
  380.                 $estatus="Baja";
  381.             }
  382.             $data = array(
  383.                 'idOtro' => $otro->getIdOtro(),
  384.                 'marbete' => $otro->getMarbete(),
  385.                 'descripcion' => $otro->getDescripcion(),
  386.                 'marca' => $otro->getMarca(),
  387.                 'modelo' => $otro->getModelo(),
  388.                 'estatus' => $estatus,
  389.                 'usuario' => $otro->getUsuario()->getNombre() . ' ' $otro->getUsuario()->getPapellido(),
  390.                 'ubicacion' => substr($otro->getUnidad()->getIdUni(), 33) . ' - ' $otro->getUbicacion()->getArea(),
  391.                 'mensaje' => 'Se actualizo correctamente',
  392.             );
  393.             //Combina ambos arrays
  394.             $responseData array_merge($data, ['solicitudes'=>$solicitudesArray]);
  395.             // Retorna el array combinado como respuesta JSON
  396.             return new JsonResponse($responseData);
  397.         }
  398.         if($form->isSubmitted() && !$form->isValid()){
  399.             $view $this->renderView('otro/modalresguardo.html.twig', [
  400.                 'otro' => $otro,
  401.                 'form' => $form->createView(),
  402.             ]);
  403.             $response = new JsonResponse(['form' => $view]);
  404.             $response->setStatusCode(Response::HTTP_BAD_REQUEST);
  405.             return $response;
  406.         }
  407.         return $this->renderForm('otro/modalresguardo.html.twig', [
  408.             'otro' => $otro,
  409.             'form' => $form,
  410.         ]);
  411.     }
  412.     //Para subir formulario
  413. }