src/Features/InvoiceDeposit/InvoiceDepositWorkflowSubscriber.php line 66

Open in your IDE?
  1. <?php
  2. namespace App\Features\InvoiceDeposit;
  3. use App\Entity\InvoiceDeposit;
  4. use App\Features\Core\ILogger;
  5. use App\Features\InvoiceDeposit\Event\InvoiceDepositPaperReceiveEvent;
  6. use App\Features\InvoiceDeposit\Event\InvoiceDepositRejectedEvent;
  7. use App\Features\InvoiceDeposit\Event\InvoiceDepositSettleEvent;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Security\Core\Security;
  12. use Symfony\Component\Workflow\Event\Event;
  13. class InvoiceDepositWorkflowSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(private EventDispatcherInterface $dispatcher,
  16.                                 private EntityManagerInterface $manager,
  17.                                 private ILogger $logger,
  18.                                 private Security $security){}
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             'workflow.invoice_deposit.completed.reject_invoice' => 'onInvoiceRejected',
  23.             'workflow.invoice_deposit.completed.received_invoice' => 'onInvoiceReceive',
  24.             'workflow.invoice_deposit.completed.settled_invoice' => 'onInvoiceSettled',
  25.         ];
  26.     }
  27.     public function onInvoiceRejected(Event $event): void
  28.     {
  29.         $invoice $event->getSubject();
  30.         if($invoice instanceof InvoiceDeposit) {
  31.             $statusData$invoice->getStateDate();
  32.             $statusData->setRejectedOn(new \DateTimeImmutable());
  33.             $invoice->setStateDate($statusData);
  34.             $invoice->setMarkAsRejectedBy($this->security->getUser());
  35.             $this->manager->flush();
  36.             $this->dispatcher->dispatch(new InvoiceDepositRejectedEvent($invoice), InvoiceDepositRejectedEvent::NAME);
  37.             $this->logger->log($invoice"Rejet de facture""Vous avez rejetée la facture {$invoice->getNumber()}");
  38.         }
  39.     }
  40.     public function onInvoiceReceive(Event $event): void
  41.     {
  42.         $invoice $event->getSubject();
  43.         if($invoice instanceof InvoiceDeposit) {
  44.             $statusData$invoice->getStateDate();
  45.             $statusData->setPaperVersionReceivedOn(new \DateTimeImmutable());
  46.             $invoice->setStateDate($statusData);
  47.             $invoice->setMarkAsPaperVersionReceivedBy($this->security->getUser());
  48.             $this->manager->flush();
  49.             $this->dispatcher->dispatch(new InvoiceDepositPaperReceiveEvent($invoice), InvoiceDepositPaperReceiveEvent::NAME);
  50.             $this->logger->log($invoice"Facture reçue""Vous avez marqué la facture {$invoice->getNumber()} comme reçue");
  51.         }
  52.     }
  53.     public function onInvoiceSettled(Event $event): void
  54.     {
  55.         $invoice $event->getSubject();
  56.         if($invoice instanceof InvoiceDeposit) {
  57.             $statusData$invoice->getStateDate();
  58.             $statusData->setSettledOn(new \DateTimeImmutable());
  59.             $invoice->setMarkAsSettledBy($this->security->getUser());
  60.             $invoice->setStateDate($statusData);
  61.             $this->manager->flush();
  62.             $this->dispatcher->dispatch(new InvoiceDepositSettleEvent($invoice), InvoiceDepositSettleEvent::NAME);
  63.             $this->logger->log($invoice"Facture réglée""Vous avez réglé la facture {$invoice->getNumber()}");
  64.         }
  65.     }
  66. }