src/EventSubscriber/EasyAdminSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Inventario;
  4. use App\Entity\InventarioMateriaAcondicionamiento;
  5. use App\Entity\InventarioMateriaPrima;
  6. use App\Entity\MateriaAcondicionamiento;
  7. use App\Entity\MateriaPrima;
  8. use App\Entity\OrdenPedido;
  9. use App\Entity\Pedido;
  10. use DateTime;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use EasyCorp\Bundle\EasyAdminBundle\Event\AbstractLifecycleEvent;
  13. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  14. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  15. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;
  16. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  17. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  18. use Exception;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. class EasyAdminSubscriber implements EventSubscriberInterface
  21. {
  22.     public function __construct(EntityManagerInterface $entityManager)
  23.     {
  24.         $this->entityManager $entityManager;
  25.     }
  26.     public function actualizarInventario(AbstractLifecycleEvent $event)
  27.     {
  28.         $entity $event->getEntityInstance();
  29.         if ($entity instanceof Pedido) {
  30.             // Si es un pedido recibido, actualizar el inventario con uds cuarentena
  31.             $this->actualizarInventarioDePedido($entity);
  32.         } elseif ($entity instanceof OrdenPedido) {
  33.             // Si es una orden de producto, actualizar el inventario restando uds generales
  34.             $this->actualizarInventarioDeOrdenPedido($entity);
  35.         } elseif ($entity instanceof Inventario) {
  36.             $this->actualizarInventarioDeInventario($entity);
  37.         }
  38.     }
  39.     public function antesCrearEntity(AbstractLifecycleEvent $event)
  40.     {
  41.         $entity $event->getEntityInstance();
  42.         if ($entity instanceof Pedido) {
  43.             // Productos de pedido con cantidad 0, se eliminan del pedido
  44.             foreach ($entity->getPedidoMateriasPrimas() as $pedidoMateriaPrima) {
  45.                 if ($pedidoMateriaPrima->getCantidad() == 0) {
  46.                     $entity->removePedidoMateriasPrima($pedidoMateriaPrima);
  47.                 }
  48.             }
  49.             foreach ($entity->getPedidoMateriasAcondicionamiento() as $pedidoMateriaAcondicionamiento) {
  50.                 if ($pedidoMateriaAcondicionamiento->getCantidad() == 0) {
  51.                     $entity->removePedidoMateriasAcondicionamiento($pedidoMateriaAcondicionamiento);
  52.                 }
  53.             }
  54.         }
  55.     }
  56.     public static function getSubscribedEvents()
  57.     {
  58.         return [
  59.             BeforeEntityPersistedEvent::class => ['antesCrearEntity'],
  60.             AfterEntityUpdatedEvent::class => ['actualizarInventario'],
  61.             AfterEntityPersistedEvent::class => ['actualizarInventario'],
  62.         ];
  63.     }
  64.     public function actualizarInventarioDeInventario(Inventario $inventario)
  65.     {
  66.         if ($inventario->getGeneralTodo()) {
  67.             foreach ($inventario->getInventarioMateriasPrimas() as $inventarioMateriaPrima) {
  68.                 $udsGenerales $inventarioMateriaPrima->getUnidadesGenerales() + $inventarioMateriaPrima->getUnidadesCuarentena();
  69.                 $inventarioMateriaPrima->setUnidadesGenerales($udsGenerales);
  70.                 $inventarioMateriaPrima->setUnidadesCuarentena(0);
  71.             }
  72.             foreach ($inventario->getInventarioMateriasAcondicionamiento() as $inventarioMateriaAcondicionamiento) {
  73.                 $udsGenerales $inventarioMateriaAcondicionamiento->getUnidadesGenerales() + $inventarioMateriaAcondicionamiento->getUnidadesCuarentena();
  74.                 $inventarioMateriaAcondicionamiento->setUnidadesGenerales($udsGenerales);
  75.                 $inventarioMateriaAcondicionamiento->setUnidadesCuarentena(0);
  76.             }
  77.         }
  78.         $this->entityManager->persist($inventario);
  79.         $this->entityManager->flush();
  80.     }
  81.     public function actualizarInventarioDeOrdenPedido(OrdenPedido $ordenPedido)
  82.     {
  83.         if ($ordenPedido->getActualizarInventario()) {
  84.             // Obtengo ultimo inventario
  85.             $inventarioRepository $this->entityManager->getRepository(Inventario::class);
  86.             $ultimoInventario $inventarioRepository->findOneBy(array(), array('fechaCreacion' => 'DESC'), 10);
  87.             if ($ultimoInventario->getFechaFinalizacion() == null) {
  88.                 $ultimoInventario->setFechaFinalizacion(new DateTime('now'));
  89.             }
  90.             $inventario = new Inventario();
  91.             $inventario->setFechaCreacion(new DateTime('now'));
  92.             $inventario->setFechaFinalizacion(new DateTime('now'));
  93.             $inventario->setTipoInventario("Orden Producción " $ordenPedido->getId());
  94.             foreach ($ultimoInventario->getInventarioMateriasPrimas() as $inventarioMateriaPrima) {
  95.                 $nuevoInventarioMateriaPrima = new InventarioMateriaPrima();
  96.                 $nuevoInventarioMateriaPrima->setMateriaPrima($inventarioMateriaPrima->getMateriaPrima());
  97.                 $nuevoInventarioMateriaPrima->setUnidadesCuarentena($inventarioMateriaPrima->getUnidadesCuarentena());
  98.                 $nuevoInventarioMateriaPrima->setUnidadesGenerales($inventarioMateriaPrima->getUnidadesGenerales());
  99.                 $nuevoInventarioMateriaPrima->setUnidadesRechazadas($inventarioMateriaPrima->getUnidadesRechazadas());
  100.                 $nuevoInventarioMateriaPrima->setLote($inventarioMateriaPrima->getLote());
  101.                 $inventario->addInventarioMateriasPrima($nuevoInventarioMateriaPrima);
  102.             }
  103.             $lotesGastados = array();
  104.             $gastosPorMateriaPrima $ordenPedido->gastoPorMateriaPrima();
  105.             $lotesGastados[] = "MATERIAS PRIMAS:<br/>";
  106.             foreach ($gastosPorMateriaPrima as $idMP => $gasto) {
  107.                 foreach ($inventario->getInventarioMateriasPrimas() as $inventarioMateriaPrima) {
  108.                     if ($inventarioMateriaPrima->getMateriaPrima()->getId() == $idMP) {
  109.                         $unidadesGenerales $inventarioMateriaPrima->getUnidadesGenerales();
  110.                         $unidadesGenerales $unidadesGenerales $gasto;
  111.                         $gastado $gasto;
  112.                         if ($unidadesGenerales 0) {
  113.                             // echo "uds generales menores que 0<br/>";
  114.                             $gastado $inventarioMateriaPrima->getUnidadesGenerales();
  115.                             $gasto abs($unidadesGenerales);
  116.                             $unidadesGenerales 0;
  117.                         } else {
  118.                             $gasto 0;
  119.                         }
  120.                         $inventarioMateriaPrima->setUnidadesGenerales($unidadesGenerales);
  121.                         $lotesGastados[] = $inventarioMateriaPrima->getMateriaPrima()->getNombre() . "(" .
  122.                             $inventarioMateriaPrima->getLote() . "):&nbsp;&nbsp;&nbsp;&nbsp;" $gastado;
  123.                         if ($gasto <= 0) {
  124.                             break;
  125.                         }
  126.                     }
  127.                 }
  128.                 if ($gasto 0) {
  129.                     // Si el resultado es negativo
  130.                     $nuevoInventarioMateriaPrima = new InventarioMateriaPrima();
  131.                     $nuevoInventarioMateriaPrima->setUnidadesGenerales($gasto * -1);
  132.                     $nuevoInventarioMateriaPrima->setUnidadesCuarentena(0);
  133.                     $nuevoInventarioMateriaPrima->setUnidadesRechazadas(0);
  134.                     $materiaPrimaRep $this->entityManager->getRepository(MateriaPrima::class);
  135.                     $materiaPrima $materiaPrimaRep->findOneBy(array("id" => $idMP));
  136.                     $nuevoInventarioMateriaPrima->setMateriaPrima($materiaPrima);
  137.                     $inventario->addInventarioMateriasPrima($nuevoInventarioMateriaPrima);
  138.                 }
  139.             }
  140.             foreach ($ultimoInventario->getInventarioMateriasAcondicionamiento() as $inventarioMateriaAcondicionamiento) {
  141.                 $nuevoInventarioMateriaAcondicionamiento = new InventarioMateriaAcondicionamiento();
  142.                 // echo $inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento()->getId() . " "  .$inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento()->getNombre() . " " . 
  143.                 //     $inventarioMateriaAcondicionamiento->getUnidadesGenerales() . "<br/>";
  144.                 $nuevoInventarioMateriaAcondicionamiento->setMateriaAcondicionamiento($inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento());
  145.                 $nuevoInventarioMateriaAcondicionamiento->setUnidadesCuarentena($inventarioMateriaAcondicionamiento->getUnidadesCuarentena());
  146.                 $nuevoInventarioMateriaAcondicionamiento->setUnidadesGenerales($inventarioMateriaAcondicionamiento->getUnidadesGenerales());
  147.                 $nuevoInventarioMateriaAcondicionamiento->setUnidadesRechazadas($inventarioMateriaAcondicionamiento->getUnidadesRechazadas());
  148.                 $nuevoInventarioMateriaAcondicionamiento->setLote($inventarioMateriaAcondicionamiento->getLote());
  149.                 $inventario->addInventarioMateriasAcondicionamiento($nuevoInventarioMateriaAcondicionamiento);
  150.             }
  151.             $gastosPorMateriaAcondicionamiento $ordenPedido->gastoPorMateriaAcondicionamiento();
  152.             var_dump($gastosPorMateriaAcondicionamiento);
  153.             $lotesGastados[] = "<br/>MATERIAS ACONDICIONAMIENTO:<br/>";
  154.             foreach ($gastosPorMateriaAcondicionamiento as $idMA => $gasto) {
  155.                 foreach ($inventario->getInventarioMateriasAcondicionamiento() as $inventarioMateriaAcondicionamiento) {
  156.                     if ($inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento()->getId() == $idMA) {
  157.                         $unidadesGenerales $inventarioMateriaAcondicionamiento->getUnidadesGenerales();
  158.                         // echo $inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento()->getNombre();
  159.                         $unidadesGenerales $unidadesGenerales $gasto;
  160.                         $gastado $gasto;
  161.                         if ($unidadesGenerales 0) {
  162.                             $gastado $inventarioMateriaAcondicionamiento->getUnidadesGenerales();
  163.                             $gasto abs($unidadesGenerales);
  164.                             $unidadesGenerales 0;
  165.                         } else {
  166.                             $gasto 0;
  167.                         }
  168.                         $inventarioMateriaAcondicionamiento->setUnidadesGenerales($unidadesGenerales);
  169.                         $lotesGastados[] = $inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento()->getNombre() . "(" .
  170.                             $inventarioMateriaAcondicionamiento->getLote() . "):&nbsp;&nbsp;&nbsp;&nbsp;" $gastado;
  171.                         if ($gasto <= 0) {
  172.                             break;
  173.                         }
  174.                     }
  175.                 }
  176.                 if ($gasto 0) {
  177.                     // Si el resultado es negativo
  178.                     $nuevoInventarioMateriaAcondicionamiento = new InventarioMateriaAcondicionamiento();
  179.                     $nuevoInventarioMateriaAcondicionamiento->setUnidadesGenerales($gasto * -1);
  180.                     $nuevoInventarioMateriaAcondicionamiento->setUnidadesRechazadas(0);
  181.                     $nuevoInventarioMateriaAcondicionamiento->setUnidadesCuarentena(0);
  182.                     $materiaAcondicionamientoRep $this->entityManager->getRepository(MateriaAcondicionamiento::class);
  183.                     $materiaAcondicionamiento $materiaAcondicionamientoRep->findOneBy(array("id" => $idMA));
  184.                     $nuevoInventarioMateriaAcondicionamiento->setMateriaAcondicionamiento($materiaAcondicionamiento);
  185.                     $inventario->addInventarioMateriasAcondicionamiento($nuevoInventarioMateriaAcondicionamiento);
  186.                 }
  187.             }
  188.             $stringLotesGastados "";
  189.             foreach ($lotesGastados as $loteGastado) {
  190.                 $stringLotesGastados .= $loteGastado "<br/>";
  191.             }
  192.             $ordenPedido->setLotesGastados($stringLotesGastados);
  193.             $this->entityManager->persist($ordenPedido);
  194.             $this->entityManager->persist($inventario);
  195.             $this->entityManager->flush();
  196.         }
  197.     }
  198.     public function actualizarInventarioDePedido(Pedido $pedido)
  199.     {
  200.         if ($pedido->getActualizarInventario()) {
  201.             // Obtengo ultimo inventario
  202.             $inventarioRepository $this->entityManager->getRepository(Inventario::class);
  203.             $ultimoInventario $inventarioRepository->findOneBy(array(), array('fechaCreacion' => 'DESC'), 10);
  204.             $inventario = new Inventario();
  205.             $inventario->setFechaCreacion(new DateTime('now'));
  206.             $inventario->setFechaFinalizacion(new DateTime('now'));
  207.             $inventario->setTipoInventario("Pedido " $pedido->getId());
  208.             if ($ultimoInventario) {
  209.                 if ($ultimoInventario->getFechaFinalizacion() == null) {
  210.                     $ultimoInventario->setFechaFinalizacion(new DateTime('now'));
  211.                 }
  212.                 foreach ($ultimoInventario->getInventarioMateriasPrimas() as $inventarioMateriaPrima) {
  213.                     $invMateriaPrimaId $inventarioMateriaPrima->getMateriaPrima()->getId();
  214.                     $nuevoInventarioMateriaPrima = new InventarioMateriaPrima();
  215.                     $nuevoInventarioMateriaPrima->setLote($inventarioMateriaPrima->getLote());
  216.                     $nuevoInventarioMateriaPrima->setMateriaPrima($inventarioMateriaPrima->getMateriaPrima());
  217.                     $nuevoInventarioMateriaPrima->setUnidadesGenerales((float)$inventarioMateriaPrima->getUnidadesGenerales());
  218.                     $nuevoInventarioMateriaPrima->setUnidadesRechazadas((float)$inventarioMateriaPrima->getUnidadesRechazadas());
  219.                     $unidadesCuarentena $inventarioMateriaPrima->getUnidadesCuarentena();
  220.                     foreach ($pedido->getPedidoMateriasPrimas() as $pedidoMateriaPrima) {
  221.                         if ($pedidoMateriaPrima->getMateriaPrima()->getId() == $invMateriaPrimaId && $inventarioMateriaPrima->getLote() == $pedidoMateriaPrima->getLote()) {
  222.                             $unidadesCuarentena =  $unidadesCuarentena $pedidoMateriaPrima->getCantidad();
  223.                             $pedido->removePedidoMateriasPrima($pedidoMateriaPrima);
  224.                         }
  225.                     }
  226.                     $nuevoInventarioMateriaPrima->setUnidadesCuarentena((float)$unidadesCuarentena);
  227.                     $inventario->addInventarioMateriasPrima($nuevoInventarioMateriaPrima);
  228.                 }
  229.                 foreach ($ultimoInventario->getInventarioMateriasAcondicionamiento() as $inventarioMateriaAcondicionamiento) {
  230.                     $invMateriaAcondicionamientoId $inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento()->getId();
  231.                     $nuevoInventarioMateriaAcondicionamiento = new InventarioMateriaAcondicionamiento();
  232.                     $nuevoInventarioMateriaAcondicionamiento->setLote($inventarioMateriaAcondicionamiento->getLote());
  233.                     $nuevoInventarioMateriaAcondicionamiento->setMateriaAcondicionamiento($inventarioMateriaAcondicionamiento->getMateriaAcondicionamiento());
  234.                     $nuevoInventarioMateriaAcondicionamiento->setUnidadesGenerales((float)$inventarioMateriaAcondicionamiento->getUnidadesGenerales());
  235.                     $nuevoInventarioMateriaAcondicionamiento->setUnidadesRechazadas((float)$inventarioMateriaAcondicionamiento->getUnidadesRechazadas());
  236.                     $unidadesCuarentena $inventarioMateriaAcondicionamiento->getUnidadesCuarentena();
  237.                     foreach ($pedido->getPedidoMateriasAcondicionamiento() as $pedidoMateriaAcondicionamiento) {
  238.                         if (
  239.                             $pedidoMateriaAcondicionamiento->getMateriaAcondicionamiento()->getId() == $invMateriaAcondicionamientoId &&
  240.                             $inventarioMateriaAcondicionamiento->getLote() == $pedidoMateriaAcondicionamiento->getLote()
  241.                         ) {
  242.                             $unidadesCuarentena =  $unidadesCuarentena $pedidoMateriaAcondicionamiento->getCantidad();
  243.                             $pedido->removePedidoMateriasAcondicionamiento($pedidoMateriaAcondicionamiento);
  244.                         }
  245.                     }
  246.                     $nuevoInventarioMateriaAcondicionamiento->setUnidadesCuarentena((float)$unidadesCuarentena);
  247.                     $inventario->addInventarioMateriasAcondicionamiento($nuevoInventarioMateriaAcondicionamiento);
  248.                 }
  249.             }
  250.             foreach ($pedido->getPedidoMateriasPrimas() as $pedidoMateriaPrima) {
  251.                 $nuevoInventarioMateriaPrima = new InventarioMateriaPrima();
  252.                 $nuevoInventarioMateriaPrima->setLote($pedidoMateriaPrima->getLote());
  253.                 $nuevoInventarioMateriaPrima->setMateriaPrima($pedidoMateriaPrima->getMateriaPrima());
  254.                 $nuevoInventarioMateriaPrima->setUnidadesCuarentena($pedidoMateriaPrima->getCantidad());
  255.                 $nuevoInventarioMateriaPrima->setUnidadesGenerales(0);
  256.                 $nuevoInventarioMateriaPrima->setUnidadesRechazadas(0);
  257.                 $inventario->addInventarioMateriasPrima($nuevoInventarioMateriaPrima);
  258.             }
  259.             foreach ($pedido->getPedidoMateriasAcondicionamiento() as $pedidoMateriaAcondicionamiento) {
  260.                 $nuevoInventarioMateriaAcondicionamiento = new InventarioMateriaAcondicionamiento();
  261.                 $nuevoInventarioMateriaAcondicionamiento->setMateriaAcondicionamiento($pedidoMateriaAcondicionamiento->getMateriaAcondicionamiento());
  262.                 $nuevoInventarioMateriaAcondicionamiento->setLote($pedidoMateriaAcondicionamiento->getLote());
  263.                 $nuevoInventarioMateriaAcondicionamiento->setUnidadesCuarentena($pedidoMateriaAcondicionamiento->getCantidad());
  264.                 $nuevoInventarioMateriaAcondicionamiento->setUnidadesGenerales(0);
  265.                 $nuevoInventarioMateriaAcondicionamiento->setUnidadesRechazadas(0);
  266.                 $inventario->addInventarioMateriasAcondicionamiento($nuevoInventarioMateriaAcondicionamiento);
  267.             }
  268.             $this->entityManager->persist($inventario);
  269.             $this->entityManager->flush();
  270.         }
  271.     }
  272. }