src/EventSubscriber/EasyAdminSubscriber.php line 60

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\AdditionalCompanyInformation;
  4. use App\Entity\Joker;
  5. use App\Entity\LotNumber;
  6. use App\Entity\Products;
  7. use App\Entity\Rebate;
  8. use App\Entity\User;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use EasyCorp\Bundle\EasyAdminBundle\Event\AbstractLifecycleEvent;
  11. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  12. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  13. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  16. class EasyAdminSubscriber implements EventSubscriberInterface
  17. {
  18.     private EntityManagerInterface $manager;
  19.     private UserPasswordHasherInterface $userPasswordHasher;
  20.     public function __construct(EntityManagerInterface $managerUserPasswordHasherInterface $userPasswordHasher)
  21.     {
  22.         $this->manager $manager;
  23.         $this->userPasswordHasher $userPasswordHasher;
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             AfterEntityPersistedEvent::class => [['product_setOnlineStock'], ['user_addRelations'], ['rebate_setRebateProducts']],
  29.             AfterEntityUpdatedEvent::class => [['product_setOnlineStock'], ['rebate_setRebateProducts']],
  30.             BeforeEntityPersistedEvent::class => ['user_setUserPassword'],
  31.         ];
  32.     }
  33.     public function user_setUserPassword(AbstractLifecycleEvent $event)
  34.     {
  35.         $user $event->getEntityInstance();
  36.         if (!($user instanceof User)) {
  37.             return;
  38.         }
  39.         $pass User::generatePassword();
  40.         $user->setGeneratePasswordRecovery($pass);
  41.         $user->setPassword(
  42.             $this->userPasswordHasher->hashPassword(
  43.                 $user,
  44.                 $pass
  45.             )
  46.         );
  47.         return $user;
  48.     }
  49.     public function user_addRelations(AbstractLifecycleEvent $event)
  50.     {
  51.         $user $event->getEntityInstance();
  52.         if (!($user instanceof User)) {
  53.             return;
  54.         }
  55.         $this->manager->getRepository(AdditionalCompanyInformation::class)->saveDefault($user);
  56.         $this->manager->getRepository(Joker::class)->saveDefault($user);
  57.     }
  58.     public function product_setOnlineStock(AbstractLifecycleEvent $event)
  59.     {
  60.         $product $event->getEntityInstance();
  61.         if (!($product instanceof Products)) {
  62.             return;
  63.         }
  64.         $this->manager->getRepository(LotNumber::class)->setOnlineStock($product);
  65.     }
  66.     public function rebate_setRebateProducts(AbstractLifecycleEvent $event)
  67.     {
  68.         $rebate $event->getEntityInstance();
  69.         if (!($rebate instanceof Rebate)) {
  70.             return;
  71.         }
  72.         if (count($rebate->getSpecificProducts()) > 0) {
  73.             $rebate->setExcludedProducts([]);
  74.             $specific $rebate->getSpecificProducts();
  75.             $normalRebates $this->manager->getRepository(Rebate::class)->getActiveNormalRebates();
  76.             foreach ($normalRebates as $rebate) {
  77.                 $excluded $rebate->getExcludedProducts();
  78.                 $rebate->setExcludedProducts(array_unique([...$excluded, ...$specific]));
  79.             }
  80.         } else {
  81.             $specificRebates $this->manager->getRepository(Rebate::class)->getActiveSpecificRebates();
  82.             $specificExcluded array_unique(array_reduce($specificRebates, function ($acc$rebate) {
  83.                 $specific $rebate->getSpecificProducts();
  84.                 if ($specific) {
  85.                     array_push($acc, ...$specific);
  86.                 }
  87.                 return $acc;
  88.             }, []));
  89.             $excluded $rebate->getExcludedProducts();
  90.             $rebate->setExcludedProducts(array_unique([...$excluded, ...$specificExcluded]));
  91.             $rebate->setSpecificProducts([]);
  92.         }
  93.         $this->manager->flush();
  94.     }
  95. }