src/Controller/RFSolicitudSuministroController.php line 147

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ParTipoSuministro;
  4. use App\Entity\RFSolicitudSuministro;
  5. use App\Entity\RFSolicitudTipoSuministro;
  6. use App\Form\RFSolicitudSuministroType;
  7. use App\Repository\RFSolicitudSuministroRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Dompdf\Dompdf;
  14. #[Route('/rf/solicitud/suministro')]
  15. class RFSolicitudSuministroController extends AbstractController {
  16.     private $responseHandler;
  17.     private $documentHandler;
  18.     private $mailerCore;
  19.     private $code 0;
  20.     private $msj "";
  21.     private $url "";
  22.     private $html "";
  23.     public function __construct(\App\Services\ResponseHandler $responseHandler\App\Services\DocumentHandler $documentHandler\App\Services\MailerCore $mailerCore) {
  24.         $this->responseHandler $responseHandler;
  25.         $this->mailerCore $mailerCore;
  26.         $this->documentHandler $documentHandler;
  27.     }
  28.     #[Route('/'name'rf_solicitud_suministro'methods: ['GET'])]
  29.     public function index(RFSolicitudSuministroRepository $rFSolicitudSuministroRepository): Response {
  30.         if ($this->getUser()->getPersona()->getPerfilCargo()->getParProceso()->getId() != 6) {
  31.             $entities $rFSolicitudSuministroRepository->getAll($this->getUser()->getPersona()->getId());
  32.         } else {
  33.             $entities $rFSolicitudSuministroRepository->getAll();
  34.         }
  35.         return $this->render('rf_solicitud_suministro/index.html.twig', [
  36.                     'entities' => $entities,
  37.         ]);
  38.     }
  39.     #[Route('/new'name'rf_solicitud_suministro_new'methods: ['GET''POST'])]
  40.     public function new(Request $requestEntityManagerInterface $entityManager): Response {
  41. //        $rFSolicitudSuministro = new RFSolicitudSuministro();
  42. //
  43. //                if ($solicitudSuministro->getEstado() != null ) {
  44. //            $this->code = 'info';
  45. //            $this->msj = "Imposible continuar, el registro ya se encuentra procesado .";
  46. //            return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));    
  47. //      
  48. //        }
  49.         $rFSolicitudTipoSuministro = new \App\Entity\RFSolicitudTipoSuministro();
  50.         $defaultData = ['message' => 'Solicitud Suministro'];
  51.         $form $this->createFormBuilder($defaultData, ['method' => 'POST''action' => $this->generateUrl($request->attributes->get('_route'))])
  52.                 ->add('cantidadCajas'\Symfony\Component\Form\Extension\Core\Type\IntegerType::class, ['label' => 'Cantidad de Cajas''required' => false])
  53.                 ->add('cantidadCarpetas'\Symfony\Component\Form\Extension\Core\Type\IntegerType::class, ['label' => 'Cantidad de Carpetas''required' => false,])
  54.                 ->add('cantidadGanchos'\Symfony\Component\Form\Extension\Core\Type\IntegerType::class, ['label' => 'Cantidad de Ganchos''required' => false,])
  55.                 ->getForm();
  56.         $form->handleRequest($request);
  57.         if ($form->isSubmitted() && $form->isValid()) {
  58.             $procObj null;
  59.             $colaborador $this->getUser()->getPersona();
  60.             if ($colaborador->getPerfilCargo()) {
  61.                 //$cargo = $colaborador->getPerfilCargo()->getCargo()->getNombre();
  62.                 $procObj $colaborador->getPerfilCargo()->getParProceso();
  63.             }
  64.             $sedeObj $this->getUser()->getPersona()->getSede() != NULL $this->getUser()->getPersona()->getSede() : NULL;
  65.             if ($procObj == null || $sedeObj == null) {
  66.                 $this->code 'danger';
  67.                 $this->msj "Imposible continuar, valide que su usuario tenga una sede y perfil de cargo asignado.";
  68.                 return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  69.                 // $this->addFlash('danger', "Imposible continuar, valide que su usuario tenga una sede y perfil de cargo asignado.");
  70.                 //    return $this->redirectToRoute($this->responseHandler->manejoRespuesta());
  71.             }
  72.             $rFSolicitudSuministro = new RFSolicitudSuministro();
  73.             $rFSolicitudSuministro->setUsuarioSolicita($this->getUser()->getPersona());
  74.             $rFSolicitudSuministro->setSede($sedeObj);
  75.             $rFSolicitudSuministro->setProceso($procObj);
  76.             $rFSolicitudSuministro->setCreateAt(new \DateTime('now'));
  77.             $rFSolicitudSuministro->setCreateUser($this->getUser()->getUsername());
  78.             $rFSolicitudSuministro->setUpdateAt(new \DateTime('now'));
  79.             $rFSolicitudSuministro->setUpdateUser($this->getUser()->getUsername());
  80.             $rFSolicitudSuministro->setEstado($entityManager->getRepository(\App\Entity\ParEstado::class)->find(33));
  81.             $entityManager->persist($rFSolicitudSuministro);
  82.             $entityManager->flush();
  83.             //return $this->redirectToRoute('rf_solicitud_tipo_suministro', ['id' => $rFSolicitudSuministro->getId()]);                       
  84. //            
  85. //            foreach ($solicitudSuministro->getSolicitudTipoSuministro() as $sts) {
  86. //                if ($sts->getTipoSuministro()->getId() == $rFSolicitudTipoSuministro->getTipoSuministro()->getId()) {
  87. //                    $this->code = 'info';
  88. //                    $this->msj = "Imposible continuar, la solicitud ya cuenta con este suministro .";
  89. //                    return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));  
  90. //
  91. //                }
  92. //            }
  93.             $cantCajas $form->get('cantidadCajas')->getData();
  94.             $cantCarpetas $form->get('cantidadCarpetas')->getData();
  95.             $cantGanchos $form->get('cantidadGanchos')->getData();
  96.             $map = [
  97.                 => $cantCajas,
  98.                 => $cantCarpetas,
  99.                 => $cantGanchos,
  100.             ];
  101.             foreach ($map as $tipoId => $cantidad) {
  102.                 if ($cantidad) {
  103.                     $r = new RFSolicitudTipoSuministro();
  104.                     $r->setTipoSuministro(
  105.                         $entityManager->getRepository(ParTipoSuministro::class)->find($tipoId)
  106.                     );
  107.                     $r->setCantidad((float) $cantidad);
  108.                     $rFSolicitudSuministro->addSolicitudTipoSuministro($r);
  109.                     $entityManager->persist($r);
  110.                 }
  111.             }
  112.             $entityManager->flush();
  113.             $this->mailerCore->solicitudSuministro('notificacion', [$rFSolicitudSuministro], $rFSolicitudSuministro->getSolicitudTipoSuministro());
  114.             $this->code 'success';
  115.             $this->msj "Registro cargado exitosamente";
  116. //            $this->url = $this->generateUrl('rf_solicitud_tipo_suministro', ['id' => $solicitudSuministro->getId()], 0);
  117.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  118.         }
  119.         return $this->render('rf_solicitud_suministro/new.html.twig', [
  120.                     'form' => $form->createView()
  121.         ]);
  122.     }
  123.     #[Route('/{id}/validar'name'rf_solicitud_suministro_validar'methods: ['GET''POST'])]
  124.     public function validar(Request $requestRFSolicitudSuministro $rFSolicitudSuministroEntityManagerInterface $entityManager): Response {
  125.         if ($rFSolicitudSuministro->getEstado() == NULL || $rFSolicitudSuministro->getEstado()->getId() != 33) {
  126.             $this->code 'info';
  127.             $this->msj "Imposible continuar, el registro ya se encuentra procesado .";
  128.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  129.         }
  130.         $form $this->createForm(RFSolicitudSuministroType::class, $rFSolicitudSuministro, ['method' => 'POST''action' => $this->generateUrl($request->attributes->get('_route'), ['id' => $rFSolicitudSuministro->getId()])]);
  131.         // $form->add('habilitaEntrega')
  132.         // ->add('fechaEntrega', \Symfony\Component\Form\Extension\Core\Type\DateType::class, ['widget' => 'single_text', 'required' => true, 'html5' => false, 'format' => 'yyyy-MM-dd', 'attr' => ['class' => 'fc-datepicker']])
  133.         ;
  134.         $colaborador $this->getUser()->getPersona();
  135.         $cargo "N/A";
  136.         $proceso "N/A";
  137.         $sede $this->getUser()->getPersona()->getSede() != NULL $this->getUser()->getPersona()->getSede()->getNombre() : "N/A";
  138.         if ($colaborador->getPerfilCargo()) {
  139.             $cargo $colaborador->getPerfilCargo()->getCargo()->getNombre();
  140.             $proceso $colaborador->getPerfilCargo()->getParProceso()->getNombre();
  141.         }
  142.         $form->handleRequest($request);
  143.         if ($form->isSubmitted() && $form->isValid()) {
  144.             $rFSolicitudSuministro->setUpdateAt(new \DateTime('now'));
  145.             $rFSolicitudSuministro->setUpdateUser($this->getUser()->getUsername());
  146.             $estadoPendiente $entityManager->getRepository(\App\Entity\ParEstado::class)->find(49);
  147.             $rFSolicitudSuministro->setEstado($entityManager->getRepository(\App\Entity\ParEstado::class)->find(4));
  148.             # suministros ID / LIMITE INVENTARIO
  149.             $mimiteSiministros = [
  150.                 => 80# CAJAS
  151.                 => 2000# CARPETAS
  152.                 => 2000# GANCHOS
  153.             ];
  154.             $solicitarSuministros = []; # Enviar por correo lo que se necesita
  155.             foreach ($request->request as $key => $value) {
  156.                 //var_dump($key);echo "<br>";
  157.                 $text explode("_"$key);
  158.                 if (count($text) == && $text[1] == "entrega") {
  159.                     foreach ($rFSolicitudSuministro->getSolicitudTipoSuministro() as $sts) {
  160.                         if ($sts->getId() == $text[0]) {
  161.                             $sts->setHabilitaEntrega(true);
  162.                             $entityManager->persist($sts);
  163.                             $tipoId $sts->getTipoSuministro()->getId(); # CAJAS , GANCHOS , CARPETAS
  164.                             if(isset($mimiteSiministros[$tipoId])){ # VALIDAR LA CANTIDAD INVENTARIO
  165.                                 $limite $mimiteSiministros[$tipoId];
  166.                                 $invRestante $entityManager
  167.                                     ->getRepository(\App\Entity\RFInventarioSuministro::class)
  168.                                     ->cantidadDisponible($tipoId);
  169.                                 # dump($invRestante[0]['1']);
  170.                                 if(($invRestante[0]['1'] - $sts->getCantidad()) <= $limite){
  171.                                     $solicitarSuministros[] = [
  172.                                         'nombre' => $sts->getTipoSuministro()->getNombre(),
  173.                                         'disponible' => $invRestante[0]['1'] - $sts->getCantidad(),
  174.                                         'limite' => $limite
  175.                                     ];
  176.                                 }
  177.                             }
  178.                             $cantSol $sts->getCantidad();
  179.                             $invDisp $entityManager->getRepository(\App\Entity\RFInventarioSuministro::class)->inventarioSuministro([$sts->getTipoSuministro()->getId()], [1]);
  180.                             foreach ($invDisp as $invDi) {
  181.                                 $solicitudTipoSuministroInventario = new \App\Entity\RFSolicitudTipoSuministroInventario();
  182.                                 $solicitudTipoSuministroInventario->setCreateAt(new \DateTime('now'));
  183.                                 $solicitudTipoSuministroInventario->setCreateUser($this->getUser()->getUsername());
  184.                                 $solicitudTipoSuministroInventario->setUpdateAt(new \DateTime('now'));
  185.                                 $solicitudTipoSuministroInventario->setUpdateUser($this->getUser()->getUsername());
  186.                                 $solicitudTipoSuministroInventario->setInventarioSuministro($invDi);
  187.                                 $solicitudTipoSuministroInventario->setSolicitudTipoSuministro($sts);
  188.                                 if ($cantSol >= $invDi->getCantidad()) {
  189.                                     $estadoInactivo $entityManager->getRepository(\App\Entity\ParEstado::class)->find(2);
  190.                                     $invDi->setCantidadAsignada($invDi->getCantidad());
  191.                                     $invDi->setEstado($estadoInactivo);
  192.                                     $solicitudTipoSuministroInventario->setCantidad($invDi->getCantidad());
  193.                                     $cantSol -= $invDi->getCantidad();
  194.                                     $entityManager->persist($solicitudTipoSuministroInventario);
  195.                                     $entityManager->persist($invDi);
  196.                                 } else {
  197.                                     $invDi->setCantidadAsignada($invDi->getCantidadAsignada() + $cantSol);
  198.                                     $solicitudTipoSuministroInventario->setCantidad($cantSol);
  199.                                     $entityManager->persist($solicitudTipoSuministroInventario);
  200.                                     $entityManager->persist($invDi);
  201.                                     break;
  202.                                 }
  203.                             }
  204.                         }
  205.                     }
  206.                 }
  207.             }
  208.             if(count($solicitarSuministros) > 0){
  209.                 $this->mailerCore->solicitudSuministro('notificacion_limite',[$rFSolicitudSuministro],null,[],$solicitarSuministros);
  210. //                dump($solicitarSuministros);
  211. //                throw $this->createNotFoundException("test");
  212.             }
  213.             $entityManager->persist($rFSolicitudSuministro);
  214.             $entityManager->flush();
  215.             $num 0;
  216.             $numAuto 0;
  217.             foreach ($rFSolicitudSuministro->getSolicitudTipoSuministro() as $sts) {
  218.                 if ($sts->isHabilitaEntrega()) {
  219.                     $numAuto++;
  220.                 }
  221.                 $num++;
  222.             }
  223.             if ($num == $numAuto) {
  224.                 $estadoInactivo $entityManager->getRepository(\App\Entity\ParEstado::class)->find(2);
  225.                 $rFSolicitudSuministro->setEstado($entityManager->getRepository(\App\Entity\ParEstado::class)->find(4));
  226.                 $rFSolicitudSuministro->setHabilitaEntrega(true);
  227.                 $entityManager->persist($rFSolicitudSuministro);
  228.                 $entityManager->flush();
  229.                 $this->mailerCore->solicitudSuministro('aprobacion', [$rFSolicitudSuministro], []);
  230.             }
  231.             /*
  232.               if ($rFSolicitudSuministro->isHabilitaEntrega()) {
  233.               $estadoInactivo = $entityManager->getRepository(\App\Entity\ParEstado::class)->find(2);
  234.               $rFSolicitudSuministro->setEstado($entityManager->getRepository(\App\Entity\ParEstado::class)->find(4));
  235.               foreach ($rFSolicitudSuministro->getSolicitudTipoSuministro() as $sts) {
  236.               $cantSol = $sts->getCantidad();
  237.               $invDisp = $entityManager->getRepository(\App\Entity\RFInventarioSuministro::class)->inventarioSuministro([$sts->getTipoSuministro()->getId()], [1]);
  238.               foreach ($invDisp as $invDi) {
  239.               $solicitudTipoSuministroInventario = new \App\Entity\RFSolicitudTipoSuministroInventario();
  240.               $solicitudTipoSuministroInventario->setCreateAt(new \DateTime('now'));
  241.               $solicitudTipoSuministroInventario->setCreateUser($this->getUser()->getUsername());
  242.               $solicitudTipoSuministroInventario->setUpdateAt(new \DateTime('now'));
  243.               $solicitudTipoSuministroInventario->setUpdateUser($this->getUser()->getUsername());
  244.               $solicitudTipoSuministroInventario->setInventarioSuministro($invDi);
  245.               $solicitudTipoSuministroInventario->setSolicitudTipoSuministro($sts);
  246.               if ($cantSol >= $invDi->getCantidad()) {
  247.               $invDi->setCantidadAsignada($invDi->getCantidad());
  248.               $invDi->setEstado($estadoInactivo);
  249.               $solicitudTipoSuministroInventario->setCantidad($invDi->getCantidad());
  250.               $cantSol -= $invDi->getCantidad();
  251.               $entityManager->persist($solicitudTipoSuministroInventario);
  252.               $entityManager->persist($invDi);
  253.               } else {
  254.               $invDi->setCantidadAsignada($invDi->getCantidadAsignada() + $cantSol);
  255.               $solicitudTipoSuministroInventario->setCantidad($cantSol);
  256.               $entityManager->persist($solicitudTipoSuministroInventario);
  257.               $entityManager->persist($invDi);
  258.               break;
  259.               }
  260.               }
  261.               }
  262.               $this->mailerCore->solicitudSuministro('aprobacion', [$rFSolicitudSuministro]);
  263.               } */
  264.             // $this->addFlash('success', "Información procesada con exito.");
  265.             $this->code 'success';
  266.             $this->msj "Información procesada con exito.";
  267.             if ($rFSolicitudSuministro->getSede()->getId() != 1) {
  268.                 $this->code 'success';
  269.                 $this->msj "Información procesada con exito, continue con el proceso de envio.";
  270.             }
  271.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  272.             // return $this->redirectToRoute($this->responseHandler->manejoRespuesta());
  273.         }
  274.         return $this->renderForm('rf_solicitud_suministro/validar.html.twig', [
  275.                     'solicitud' => $rFSolicitudSuministro,
  276.                     'form' => $form,
  277.                     'cargo' => $cargo,
  278.                     'proceso' => $proceso,
  279.                     'sede' => $sede,
  280.         ]);
  281.     }
  282.     #[Route('/{id}/confirmar_entrega'name'rf_solicitud_suministro_confirmar_entrega'methods: ['GET''POST'])]
  283.     public function confirmarEntrega(Request $requestRFSolicitudSuministro $rFSolicitudSuministroEntityManagerInterface $entityManager): Response {
  284.         // Si ya está Cancelado (por vencimiento de 3 días), mostrar mensaje específico
  285.         if ($rFSolicitudSuministro->getEstado()->getId() === 37) {
  286.             $this->url  $this->generateUrl('rf_solicitud_suministro');
  287.             $this->code 'warning';
  288.             $this->msj  'Imposible continuar, la entrega fue habilitada hace más de 3 días';
  289.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  290.         }
  291.         if ($rFSolicitudSuministro->getEstado()->getId() != 4) {
  292.             $this->code 'info';
  293.             $this->msj "Para continuar debe ejecutar la acción anterior.";
  294.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  295.         }
  296.         $tiempoDif $rFSolicitudSuministro->getUpdateAt()->diff(new \DateTime('now'));
  297.         if ($tiempoDif->days 3) {
  298.             $estadoCancelado $entityManager->getRepository(\App\Entity\ParEstado::class)->find(37);
  299.             $estadoActivo    $entityManager->getRepository(\App\Entity\ParEstado::class)->find(1);
  300.             // Actualizar estado de la solicitud a Cancelado
  301.             $rFSolicitudSuministro->setEstado($estadoCancelado);
  302.             $rFSolicitudSuministro->setUpdateAt(new \DateTime('now'));
  303.             $rFSolicitudSuministro->setUpdateUser($this->getUser()->getUsername());
  304.             $entityManager->persist($rFSolicitudSuministro);
  305.             foreach ($rFSolicitudSuministro->getSolicitudTipoSuministro() as $sts) {
  306.                 // Liberar inventario asignado
  307.                 foreach ($sts->getSolicitudTipoSuministroInventario() as $stsi) {
  308.                     $inv $stsi->getInventarioSuministro();
  309.                     $inv->setCantidadAsignada($inv->getCantidadAsignada() - $stsi->getCantidad());
  310.                     $inv->setEstado($estadoActivo);
  311.                     $inv->setUpdateAt(new \DateTime('now'));
  312.                     $stsi->setUpdateAt(new \DateTime('now'));
  313.                     $stsi->setUpdateUser($this->getUser()->getUsername());
  314.                     $entityManager->persist($inv);
  315.                     $entityManager->persist($stsi);
  316.                 }
  317.                 // Liberar números de caja para que puedan asignarse a nuevas solicitudes
  318.                 foreach ($sts->getCajas() as $caja) {
  319.                     $entityManager->remove($caja);
  320.                 }
  321.             }
  322.             $entityManager->flush();
  323.             // Fuerza la recarga del listado para mostrar el estado Cancelado actualizado
  324.             $this->url  $this->generateUrl('rf_solicitud_suministro');
  325.             $this->code 'warning';
  326.             $this->msj  'Imposible continuar, la entrega fue habilitada hace más de 3 días';
  327.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  328.         }
  329.         $form $this->createForm(RFSolicitudSuministroType::class, $rFSolicitudSuministro, ['method' => 'POST''action' => $this->generateUrl($request->attributes->get('_route'), ['id' => $rFSolicitudSuministro->getId()])]);
  330.         $form->add('usuarioRecibe'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\TerPersona::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
  331.                         return $er->createQueryBuilder('p')
  332.                                 ->leftJoin('p.nivelCargo''nc')
  333.                                 ->leftJoin('p.perfilCargo''pc')
  334.                                 ->leftJoin('pc.cargo''c')
  335.                                 ->leftJoin('p.estado''es')
  336.                                 //->leftJoin('pc.ParProceso', 'p')
  337.                                 ->where("es.id = 1");
  338.                         //->setParameter('idPer', $this->getUser()->getPersona()->getId());
  339.                     }, 'label' => 'Nombre quien recibe'
  340.                     'required' => true
  341.                     'placeholder' => 'Seleccione una opcion'
  342.                     'attr' => ['class' => 'form-control']])
  343.                 ->add('fechaEntrega'\Symfony\Component\Form\Extension\Core\Type\DateType::class, ['widget' => 'single_text''required' => true'html5' => false'format' => 'yyyy-MM-dd''attr' => ['class' => 'fc-datepicker']])
  344.         ;
  345.         $form->get('fechaEntrega')->setData(new \DateTime('now'));
  346.         $colaborador $this->getUser()->getPersona();
  347.         $cargo "N/A";
  348.         $proceso "N/A";
  349.         $sede $this->getUser()->getPersona()->getSede() != NULL $this->getUser()->getPersona()->getSede()->getNombre() : "N/A";
  350.         if ($colaborador->getPerfilCargo()) {
  351.             $cargo $colaborador->getPerfilCargo()->getCargo()->getNombre();
  352.             $proceso $colaborador->getPerfilCargo()->getParProceso()->getNombre();
  353.         }
  354.         $form->handleRequest($request);
  355.         if ($form->isSubmitted() && $form->isValid()) {
  356.             $rFSolicitudSuministro->setEstado($entityManager->getRepository(\App\Entity\ParEstado::class)->find(32));
  357.             $rFSolicitudSuministro->setUpdateAt(new \DateTime('now'));
  358.             $rFSolicitudSuministro->setUpdateUser($this->getUser()->getUsername());
  359.             $entityManager->persist($rFSolicitudSuministro);
  360.             $entityManager->flush();
  361.             $this->code 'success';
  362.             $this->msj "Registro almacenado con exito";
  363.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  364.         }
  365.         return $this->renderForm('rf_solicitud_suministro/confirmaEntrega.html.twig', [
  366.                     'solicitud' => $rFSolicitudSuministro,
  367.                     'form' => $form,
  368.                     'cargo' => $cargo,
  369.                     'proceso' => $proceso,
  370.                     'sede' => $sede,
  371.         ]);
  372.     }
  373.     #[Route('/{id}/generar_cajas'name'rf_solicitud_suministro_generar_cajas'methods: ['GET''POST'])]
  374.     public function generarCajas(Request $requestRFSolicitudSuministro $rFSolicitudSuministroEntityManagerInterface $entityManager): Response {
  375.         if ($rFSolicitudSuministro->getEstado()->getId() != 32) {
  376.             $this->code 'info';
  377.             $this->msj "Para continuar debe ejecutar la acción anterior.";
  378.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  379.         }
  380.         $continue false;
  381.         $base 10000;
  382.         $consA 'AA';
  383.         $consB 0;
  384.         $numCajas $entityManager->getRepository(\App\Entity\RFCaja::class)->ultimaCaja();
  385.         if (isset($numCajas[0]['id'])) {
  386.             $nivel explode("-"$numCajas[0]['codigo']);
  387.             $consA $nivel[0];
  388.             $consB str_replace("0"""$nivel[1]);
  389.         }
  390.         if (($consB $base) == 0) {
  391.             for ($i 0$i < ($consB $base); $i++) {
  392.                 $consA++;
  393.             }
  394.         }
  395.         $consB++;
  396.         if ($consB >= $base) {
  397.             $consB 1;
  398.         }
  399.         foreach ($rFSolicitudSuministro->getSolicitudTipoSuministro() as $sts) {
  400.             if ($sts->getTipoSuministro()->getId() == 1) {
  401.                 $continue true;
  402.                 $faltaCajas $sts->getCantidad() - count($sts->getCajas());
  403.                 if ($faltaCajas 0) {
  404.                     for ($ini 0$ini $faltaCajas$ini++) {
  405.                         $codTmp "";
  406.                         while ((strlen($codTmp) + strlen($consB)) < 4) {
  407.                             $codTmp .= "0";
  408.                         }
  409.                         $codigoCaj "{$consA}-{$codTmp}{$consB}";
  410.                         $caja = new \App\Entity\RFCaja();
  411.                         $caja->setCodigo($codigoCaj);
  412.                         $caja->setSolicitudTipoSuministro($sts);
  413.                         $caja->setCreateAt(new \DateTime('now'));
  414.                         $caja->setCreateUser($this->getUser()->getUsername());
  415.                         $caja->setUpdateAt(new \DateTime('now'));
  416.                         $caja->setUpdateUser($this->getUser()->getUsername());
  417.                         $entityManager->persist($caja);
  418.                         $consB++;
  419.                         if (($consB $base) == 0) {
  420.                             for ($i 0$i < ($consB $base); $i++) {
  421.                                 $consA++;
  422.                             }
  423.                         }
  424.                         if ($consB >= $base) {
  425.                             $consB 1;
  426.                         }
  427.                     }
  428.                 } else {
  429.                     break;
  430.                 }
  431.                 $entityManager->flush();
  432.             }
  433.         }
  434.         if ($continue == false) {
  435.             $this->code 'warning';
  436.             $this->msj "Imposible continuar, la solicitud no contiene cajas para procesar.";
  437.             return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  438.         }
  439.         $cajas $entityManager->getRepository(\App\Entity\RFCaja::class)->cajasSolicitudSuministro([$rFSolicitudSuministro->getId()]);
  440.         return $this->renderForm('rf_solicitud_suministro/cajas.html.twig', [
  441.                     'solicitud' => $rFSolicitudSuministro,
  442.                     'cajas' => $cajas
  443.         ]);
  444.     }
  445.     #[Route('/{id}/imprimir_cajas'name'rf_solicitud_suministro_imprimir_cajas'methods: ['GET'])]
  446.     public function imprimirCajas(Request $requestRFSolicitudSuministro $rFSolicitudSuministroEntityManagerInterface $entityManager): Response {
  447.         $cajas $entityManager->getRepository(\App\Entity\RFCaja::class)->cajasSolicitudSuministro([$rFSolicitudSuministro->getId()]);
  448.         $path $this->getParameter('kernel.project_dir') . '/public_html/assets/img/brand/logos-empresas.png';
  449.         $type pathinfo($pathPATHINFO_EXTENSION);
  450.         $data file_get_contents($path);
  451.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  452.         $rutaLogo $base64;
  453.         $path $this->getParameter('kernel.project_dir') . '/public_html/assets/img/bar_code_example.png';
  454.         $type pathinfo($pathPATHINFO_EXTENSION);
  455.         $data file_get_contents($path);
  456.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  457.         $barCode $base64;
  458.         $html $this->renderView('rf_solicitud_suministro/stickerCajas.html.twig', ['cajas' => $cajas'logo' => $rutaLogo'barCode' => $barCode]);
  459.         $dompdf = new Dompdf();
  460.         $customPaper = array(25, -1090200);
  461.         $dompdf->setPaper($customPaper'landscape');
  462.         $dompdf->loadHtml($html);
  463.         $dompdf->render();
  464.         return new Response(
  465.                 $dompdf->stream('resume', ["Attachment" => false]),
  466.                 Response::HTTP_OK,
  467.                 ['Content-Type' => 'application/pdf']
  468.         );
  469.     }
  470.     #[Route('/{id}/eliminar'name'rf_solicitud_suministro_eliminar'methods: ['GET''POST'])]
  471.     public function eliminar(Request $requestEntityManagerInterface $entityManager\App\Entity\RFSolicitudSuministro $solicitudSuministro\App\Services\ResponseHandler $responseHandler): Response {
  472.         if ($solicitudSuministro->getEstado()->getId() != 33 && $solicitudSuministro->getEstado()->getId() != 4) {
  473.             $this->addFlash('info'"Imposible continuar, el registro ya se encuentra procesado .");
  474.             return $this->redirectToRoute('rf_solicitud_suministro');
  475.         }
  476.         $solicitudSuministro->setEstado($entityManager->getRepository(\App\Entity\ParEstado::class)->find(3));
  477.         $entityManager->persist($solicitudSuministro);
  478.         $entityManager->flush();
  479.         $this->addFlash('success'"Registro eliminado exitosamente");
  480.         return $this->redirectToRoute('rf_solicitud_suministro');
  481.         //  $this->addFlash('info', "Información procesada con exito.");
  482.         //   $this->mailerCore->solicitudSuministro('notificacion', [$solicitudSuministro]);
  483.         //   return $this->redirectToRoute('rf_solicitud_suministro',[], Response::HTTP_SEE_OTHER);
  484.     }
  485. }