<?php
namespace App\Listener;
use App\Entity\Tenant\Contrat;
use App\Entity\Tenant\QuittancePrime;
use App\Services\EmissionGenerator;
use Doctrine\Persistence\ManagerRegistry;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityDeletedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Translation\TranslatableMessage;
final class ContractSubscriber implements EventSubscriberInterface
{
private SessionInterface $session;
private EmissionGenerator $emissionGenerator;
private ManagerRegistry $doctrine;
/**
* @param SessionInterface $session
* @param EmissionGenerator $emissionGenerator
* @param ManagerRegistry $doctrine
*/
public function __construct(SessionInterface $session, EmissionGenerator $emissionGenerator, ManagerRegistry $doctrine)
{
$this->session = $session;
$this->emissionGenerator = $emissionGenerator;
$this->doctrine = $doctrine;
}
public static function getSubscribedEvents(): array
{
return [
AfterEntityPersistedEvent::class => ['onAfterPersist'],
AfterEntityUpdatedEvent::class => ['onAfterUpdate'],
// AfterEntityDeletedEvent::class => ['onAfterDelete'],
];
}
public function onAfterPersist(AfterEntityPersistedEvent $event): void
{
/** @var $entity */
$entity = $event->getEntityInstance();
if (!($entity instanceof Contrat)) {
return;
}
/** @var $doctrine */
$doctrine= $this->doctrine;
try {
/** Generate emissions per contract service */
$this->emissionGenerator->generateEmissionPerContract($entity, $doctrine);
/** session FlashBag */
$this->session->getFlashBag()->add('success', new TranslatableMessage('contract.create', [
'%name%' => (string) $event->getEntityInstance(),
], 'admin'));
} catch (\Exception $e) {
echo $e->getMessage();
}
}
public function onAfterUpdate(AfterEntityUpdatedEvent $event): void
{
/** session FlashBag */
$this->session->getFlashBag();
}
}