src/Controller/EquipoController.php line 173

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Equipo;
  4. use App\Entity\Usuario;
  5. use App\Form\EquipoType;
  6. use App\Form\UnidadFiltroType;
  7. use App\Repository\EquipoRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use DateInterval;
  16. use DateTime;
  17. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  18. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  19. use Symfony\Component\Serializer\Serializer;
  20. use PhpOffice\PhpSpreadsheet\IOFactory;
  21. /*
  22. ------------- COMPORTAMIENTOS -------------
  23. 0 = Sin acceso
  24. 1 = Administración de equipo del plantel
  25. 2 = Administración de equipo universal
  26. 3 = Visualización universal
  27. */
  28. #[Route('/equipo')]
  29. class EquipoController extends AbstractController
  30. {
  31.     #[Route('/'name'app_equipo_index'methods: ['GET''POST'])]
  32.     public function index(Request $requestEquipoRepository $equipoRepository): RedirectResponse|JsonResponse|Response
  33.     {
  34.         # Se obtiene el nivel de acceso
  35.         $perfil $request->getSession()->get('perfil');
  36.         $nivel $perfil[4]["nivel"];
  37.         //$equipos = [];
  38.         # Si el nivel de acceso es 0 = "Sin acceso" entonces se retorna a página de inicio
  39.         if ($nivel == 0) {
  40.             $this->addFlash('danger''El acceso a agregar "Equipos de cómputo" está restringido.');
  41.             return $this->redirectToRoute('homepage');
  42.         }
  43.         # Usuario que está autenticado
  44.         /** @var Usuario $user */
  45.         $user $this->getUser();
  46.         # Formulario de filtro por unidad
  47.         (in_array($nivel, [23])) ? $uni true $uni false;
  48.         $form $this->createForm(UnidadFiltroType::class, null, ['unidad' => $uni]);
  49.         $form->handleRequest($request);
  50.         if ($form->isSubmitted() && $form->isValid()) {
  51.             if (empty($form['unidad']->getData())) {
  52.                 $equipos $equipoRepository->findAll();
  53.             } else {
  54.                 $equipos $equipoRepository->findBy(['unidad' => $form['unidad']->getData()]);
  55.             }
  56.             $data = [];
  57.             foreach ($equipos as $equipo) {
  58.                 $estatus = match ($equipo->getEstatus()) {
  59.                     '0' => '<span class="badge bg-gradient-orange d-block">Descompuesto</span>',
  60.                     '1' => '<span class="badge bg-gradient-green d-block">En operación</span>',
  61.                     '2' => '<span class="badge bg-gradient-primary d-block">Sin instalar</span>',
  62.                     '3' => '<span class="badge bg-gradient-yellow d-block">En proceso de baja</span>',
  63.                     '4' => '<span class="badge bg-gradient-danger d-block">Baja</span>',
  64.                     default => ""
  65.                 };
  66.                 $ver $this->generateUrl('app_equipo_show', ['idEqu' => $equipo->getIdEqu()]);
  67.                 $editar $this->generateUrl('app_equipo_edit', ['idEqu' => $equipo->getIdEqu()]);
  68.                 $data[] = [
  69.                     'idEqu' => $equipo->getIdEqu(),
  70.                     'marbete' => $equipo->getMarbete(),
  71.                     'descripcion' => $equipo->getDescripcion(),
  72.                     'marca' => $equipo->getMarca(),
  73.                     'modelo' => $equipo->getModelo(),
  74.                     'estatus' => $estatus,
  75.                     'emhv' => ($equipo->isEmhv()) ? '<span class="badge bg-gradient-green d-block">Cumple</span>' '<span class="badge bg-gradient-orange d-block">No Cumple</span>',
  76.                     'usuario' => $equipo->getUsuario()->getNombre() . ' ' $equipo->getUsuario()->getPapellido(),
  77.                     'ubicacion' => substr($equipo->getUnidad()->getIdUni(), 33) . ' - ' $equipo->getUbicacion()->getArea(),
  78.                     'ver' => $ver,
  79.                     'editar' => $editar
  80.                 ];
  81.             }
  82.             return new JsonResponse($dataResponse::HTTP_OK);
  83.         }
  84.         if ($nivel == 1) {
  85.             $equipos $equipoRepository->findBy(['unidad' => $user->getUnidad()]);
  86.         }
  87.         if (in_array($nivel, [23])) {
  88.             $equipos $equipoRepository->findAll();
  89.         }
  90.         return $this->render('equipo/index.html.twig', [
  91.             'equipos' => $equipos,
  92.             'form' => $form->createView(),
  93.             'nivel' => $nivel
  94.         ]);
  95.     }
  96.     #[Route('/new'name'app_equipo_new'methods: ['GET''POST'])]
  97.     public function new(Request $requestEntityManagerInterface $entityManager): Response #Request $request, EquipoRepository $equipoRepository
  98.     {
  99.         # Se obtiene el nivel de acceso
  100.         $perfil $request->getSession()->get('perfil');
  101.         $nivel $perfil[4]["nivel"];
  102.         # Si el nivel de acceso es 0, 2 o 3 entonces se retorna a página de inicio
  103.         if (in_array($nivel, [023])) {
  104.             $this->addFlash('danger''El acceso a agregar "Equipos de cómputo" está restringido.');
  105.             return $this->redirectToRoute('homepage');
  106.         }
  107.         /** @var Usuario $user */
  108.         $user $this->getUser();
  109.         date_default_timezone_set("America/Mexico_City");
  110.         $fecha = new DateTime();
  111.         # Se contruye el formulario
  112.         $equipo = new Equipo();
  113.         $form $this->createForm(EquipoType::class, $equipo, ['unidad' => false'bloquear_edicion' => false]);
  114.         $form->handleRequest($request);
  115.         if ($form->isSubmitted() && $form->isValid()) {
  116.             $equipo->setUnidad($user->getUnidad());
  117.             $equipo->setFactualizacion($fecha);
  118.             $equipo->setFalta($fecha);
  119.             # Cálculo del Estandar Mínimo Hardware Vigente
  120.             $equipo->setEmhv(0);
  121.             if (intval($equipo->getRam()) >= 4) {
  122.                 if (intval($equipo->getNucleos()) >= 4) {
  123.                     if (floatval($equipo->getCpuVelocidad()) >= 3.2) {
  124.                         $equipo->setEmhv(1);
  125.                     }
  126.                 }
  127.             }
  128.             $entityManager->persist($equipo);
  129.             $entityManager->flush();
  130.             return $this->redirectToRoute('app_equipo_index', [], Response::HTTP_SEE_OTHER);
  131.         }
  132.         return $this->renderForm('equipo/new.html.twig', [
  133.             'equipo' => $equipo,
  134.             'form' => $form
  135.         ]);
  136.     }
  137.     #[Route('/show'name'app_equipo_show'methods: ['POST'])]
  138.     public function show(Request $requestEquipoRepository $equipoRepository): Response
  139.     {
  140.         $idEqu $request->request->get('idEqu');
  141.         $equipo $equipoRepository->findOneBy(['idEqu' => $idEqu]);
  142.         return $this->render('equipo/show.html.twig', [
  143.             'equipo' => $equipo,
  144.         ]);
  145.     }
  146.     #[Route('/{idEqu}/edit'name'app_equipo_edit'methods: ['GET''POST'])]
  147.     public function edit(Request $requestEquipo $equipoEntityManagerInterface $entityManager): Response
  148.     {
  149.         // Datos de la solicitud
  150.         # Se obtiene el nivel de acceso
  151.         $perfil $request->getSession()->get('perfil');
  152.         $nivel $perfil[4]["nivel"];
  153.         # Bloqueo de edición de [Merbete, Descripción, Marca, Modelo, No. serie] exceptuando al comportamiento 2
  154.         $bloquear_edicion true;
  155.         $unidad true;
  156.         ($nivel == 2) && $bloquear_edicion false;
  157.         ($nivel == 2) && $unidad false;
  158.         # Se contruye el formulario
  159.         $form $this->createForm(EquipoType::class, $equipo, ['unidad' => $unidad'bloquear_edicion' => $bloquear_edicion]);
  160.         $form->handleRequest($request);
  161.         /** @var Usuario $user */
  162.         $user $this->getUser();
  163.         date_default_timezone_set("America/Mexico_City");
  164.         $fecha = new DateTime();
  165.         if ($form->isSubmitted() && $form->isValid()) {
  166.             $equipo->setFactualizacion($fecha);
  167.             $equipo->setUnidad($equipo->getUbicacion()->getUnidad());
  168.             # Cálculo del Estandar Mínimo Hardware Vigente
  169.             $equipo->setEmhv(0);
  170.             if (intval($equipo->getRam()) >= 4) {
  171.                 if (intval($equipo->getNucleos()) >= 4) {
  172.                     if (floatval($equipo->getCpuVelocidad()) >= 3.2) {
  173.                         $equipo->setEmhv(1);
  174.                     }
  175.                 }
  176.             }
  177.             $entityManager->persist($equipo);
  178.             $entityManager->flush();
  179.             //$equipoRepository->add($equipo, true);
  180.             if ($equipo->getEstatus() == 2){
  181.                 $estatus "Descompuesto";
  182.             }elseif ($equipo->getEstatus() == 1){
  183.                 $estatus "En operacion";
  184.             }elseif ($equipo->getEstatus() == 3){
  185.                 $estatus "Sin instalar";
  186.             }elseif ($equipo->getEstatus() == 4){
  187.                 $estatus "En proceso de baja";
  188.             }elseif ($equipo->getEstatus() == 5){
  189.                 $estatus "Baja";
  190.             }
  191.             $data = array(
  192.                 'idEqu' => $equipo->getIdEqu(),
  193.                 'marbete' => $equipo->getMarbete(),
  194.                 'descripcion' => $equipo->getDescripcion(),
  195.                 'marca' => $equipo->getMarca(),
  196.                 'modelo' => $equipo->getModelo(),
  197.                 'estatus' => $estatus,
  198.                 'emhv' => ($equipo->isEmhv()) ? '<span class="badge bg-gradient-green d-block">Cumple</span>' '<span class="badge bg-gradient-orange d-block">No Cumple</span>',
  199.                 'usuario' => $equipo->getUsuario()->getNombre() . ' ' $equipo->getUsuario()->getPapellido(),
  200.                 'ubicacion' => substr($equipo->getUnidad()->getIdUni(), 33) . ' - ' $equipo->getUbicacion()->getArea(),
  201.                 'mensaje' => 'Se actualizo correctamente',
  202.             );
  203.             return new JsonResponse($data);
  204.             //return $this->redirectToRoute('app_equipo_index', [], Response::HTTP_SEE_OTHER);
  205.         }
  206.         if($form->isSubmitted() && !$form->isValid()){
  207.             $view $this->renderView('equipo/modal.html.twig', [
  208.                 'equipo' => $equipo,
  209.                 'form' => $form->createView(),
  210.             ]);
  211.             $response = new JsonResponse(['form' => $view]);
  212.             $response->setStatusCode(Response::HTTP_UNPROCESSABLE_ENTITY);
  213.             return $response;
  214.         }
  215.         return $this->renderForm('equipo/modal.html.twig', [
  216.             'equipo' => $equipo,
  217.             'form' => $form,
  218.         ]);
  219.     }
  220.     #[Route('/{idEqu}'name'app_equipo_delete'methods: ['POST'])]
  221.     public function delete(Request $requestEquipo $equipoEquipoRepository $equipoRepository): Response
  222.     {
  223.         if ($this->isCsrfTokenValid('delete'.$equipo->getIdEqu(), $request->request->get('_token'))) {
  224.             $equipoRepository->remove($equipotrue);
  225.         }
  226.         return $this->redirectToRoute('app_equipo_index', [], Response::HTTP_SEE_OTHER);
  227.     }
  228.     /**
  229.      * @Route("/upload-excel", name="xlsx")
  230.      * @param Request $request
  231.      * @throws \Exception
  232.      */
  233.     #[Route('/{idEqu}'name'app_equipo_upload-excel'methods: ['POST'])]
  234.     public function upload(Equipo $equipo): Response
  235.     {
  236.         return $this->render('equipo/show.html.twig', [
  237.             'equipo' => $equipo,
  238.         ]);
  239.     }
  240. }