src/EventSubscriber/IngredientePerfilSubcriber.php line 44

Open in your IDE?
  1. <?php 
  2. # src/EventSubscriber/EasyAdminSubscriber.php
  3. namespace App\EventSubscriber;
  4. use App\Entity\BlogPost;
  5. use App\Entity\Comida;
  6. use App\Entity\ComidaIngredientesReceta;
  7. use App\Entity\Ingrediente;
  8. use App\Entity\PerfilAlimentacion;
  9. use Doctrine\ORM\EntityManager;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityBuiltEvent;
  12. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  13. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  14. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  15. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  16. use Psr\Log\LoggerInterface;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. class IngredientePerfilSubcriber implements EventSubscriberInterface
  19. {
  20.     private $em;
  21.     private $logger;
  22.     public function __construct(EntityManagerInterface $emLoggerInterface $logger)
  23.     {
  24.         $this->em $em;
  25.         $this->logger $logger;
  26.     }
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             AfterEntityPersistedEvent::class => ['perfilAlimentacionCreate'],
  31.             AfterEntityUpdatedEvent::class => ['perfilAlimentacionUpdate'],
  32.         ];
  33.     }
  34.     /**
  35.      * Fix para aƱadir un perfil de alimentaciĆ³n a un nuevo ingrediente
  36.      */
  37.     public function perfilAlimentacionCreate(AfterEntityPersistedEvent $event){
  38.         $entity $event->getEntityInstance();
  39.         if (!($entity instanceof Ingrediente)) {
  40.             return;
  41.         }
  42.         $this->logger->info("AfterEntityPersistedEvent perfilAlimentacionCreate Ingrediente");
  43.         $perfil = new PerfilAlimentacion();
  44.         $perfil->setTipo(3);
  45.         $perfil->setCodigo($entity->getNombre());
  46.         $entity->setPerfilAlimentacion($perfil);
  47.         $this->em->persist($entity);
  48.         $this->em->persist($perfil);
  49.         $this->em->flush();
  50.     }
  51.     /**
  52.      * Fix para eliminar las entidades relacionadas con el ingrediente que se duplican al utilizar el formulario de ingredientes
  53.      */
  54.     public function perfilAlimentacionUpdate(AfterEntityUpdatedEvent $event)
  55.     {
  56.         $entity $event->getEntityInstance();
  57.         if (!($entity instanceof Ingrediente)) {
  58.             return;
  59.         }
  60.         $this->logger->info("AfterEntityUpdatedEvent perfilAlimentacionUpdate Ingrediente");
  61.         $perfiles $this->em->getRepository(PerfilAlimentacion::class)->findBy(["tipo" => 3]);
  62.         $this->logger->info("Perfiles: " count($perfiles));
  63.         foreach ($perfiles as $key => $perfil) {
  64.             if(!($perfil->getIngrediente())){
  65.                 $this->logger->info("Borrando perfil huerfano");
  66.                 $this->em->remove($perfil);
  67.                 
  68.             }
  69.         }
  70.         $perfiles $this->em->getRepository(ComidaIngredientesReceta::class)->findBy(["ingrediente" => null]);
  71.         $this->logger->info("ComidaIngredientes: " count($perfiles));
  72.         foreach ($perfiles as $key => $perfil) {
  73.             if(!($perfil->getComida())){
  74.                 $this->logger->info("Borrando ComidaIngredientes huerfano");
  75.                 $this->em->remove($perfil);
  76.                 
  77.             }
  78.         }
  79.         $this->em->flush();
  80.     }
  81. }