src/Listener/ContractSubscriber.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use App\Entity\Tenant\Contrat;
  4. use App\Entity\Tenant\QuittancePrime;
  5. use App\Services\EmissionGenerator;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
  8. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  12. use Symfony\Component\Translation\TranslatableMessage;
  13. final class ContractSubscriber implements EventSubscriberInterface
  14. {
  15.     private SessionInterface $session;
  16.     private EmissionGenerator $emissionGenerator;
  17.     private ManagerRegistry $doctrine;
  18.     /**
  19.      * @param SessionInterface $session
  20.      * @param EmissionGenerator $emissionGenerator
  21.      * @param ManagerRegistry $doctrine
  22.      */
  23.     public function __construct(SessionInterface $sessionEmissionGenerator $emissionGeneratorManagerRegistry $doctrine)
  24.     {
  25.         $this->session $session;
  26.         $this->emissionGenerator $emissionGenerator;
  27.         $this->doctrine $doctrine;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             AfterEntityPersistedEvent::class => ['onAfterPersist'],
  33.             AfterEntityUpdatedEvent::class => ['onAfterUpdate'],
  34. //            AfterEntityDeletedEvent::class => ['onAfterDelete'],
  35.         ];
  36.     }
  37.     public function onAfterPersist(AfterEntityPersistedEvent $event): void
  38.     {
  39.         /** @var  $entity */
  40.         $entity $event->getEntityInstance();
  41.         if (!($entity instanceof Contrat)) {
  42.             return;
  43.         }
  44.         /** @var  $doctrine */
  45.         $doctrine$this->doctrine;
  46.         try {
  47.             /** Generate emissions per contract service */
  48.             $this->emissionGenerator->generateEmissionPerContract($entity$doctrine);
  49.             /** session FlashBag */
  50.             $this->session->getFlashBag()->add('success', new TranslatableMessage('contract.create', [
  51.                     '%name%' => (string) $event->getEntityInstance(),
  52.                 ], 'admin'));
  53.         } catch (\Exception $e) {
  54.             echo $e->getMessage();
  55.         }
  56.     }
  57.     public function onAfterUpdate(AfterEntityUpdatedEvent $event): void
  58.     {
  59.         /** session FlashBag */
  60.         $this->session->getFlashBag();
  61.     }
  62. }