src/Controller/RedController.php line 35

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