src/Controller/RedController.php line 34

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