src/EventSubscriber/ProcedureClaimSubscriber.php line 72

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use App\Event\ProcedureClaimEvent;
  5. use App\Events;
  6. use App\Manager\ProcedureManager;
  7. use App\Repository\ProcedureRepository;
  8. use App\Service\Sendinblue\SMTPApi;
  9. use App\Service\UrlGeneratorService;
  10. use JMS\Serializer\Serializer;
  11. use JMS\Serializer\SerializerInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. class ProcedureClaimSubscriber implements EventSubscriberInterface
  15. {
  16.     public const EMAIL_TEMPLATE_ID '23'// TODO: change this to the correct paid template - NOT READY YET
  17.     /**
  18.      * @var ProcedureManager
  19.      */
  20.     protected $procedureManager;
  21.     /**
  22.      * @var ProcedureRepository
  23.      */
  24.     protected $procedureRepository;
  25.     /**
  26.      * @var SMTPApi
  27.      */
  28.     protected $smtp;
  29.     /**
  30.      * @var SerializerInterface|Serializer
  31.      */
  32.     protected $serializer;
  33.     /**
  34.      * @var UrlGeneratorService
  35.      */
  36.     protected $urlGenerator;
  37.     /**
  38.      * ProcedureClaimSubscriber constructor.
  39.      *
  40.      * @param ProcedureManager    $procedureManager
  41.      * @param ProcedureRepository $procedureRepository
  42.      * @param SMTPApi             $smtp
  43.      * @param SerializerInterface $serializer
  44.      * @param UrlGeneratorService $urlGenerator
  45.      */
  46.     public function __construct(
  47.         ProcedureManager $procedureManager,
  48.         ProcedureRepository $procedureRepository,
  49.         SMTPApi $smtp,
  50.         SerializerInterface $serializer,
  51.         UrlGeneratorService $urlGenerator)
  52.     {
  53.         $this->procedureManager    $procedureManager;
  54.         $this->procedureRepository $procedureRepository;
  55.         $this->smtp                $smtp;
  56.         $this->serializer          $serializer;
  57.         $this->urlGenerator        $urlGenerator;
  58.     }
  59.     /**
  60.      * @param ProcedureClaimEvent $event
  61.      */
  62.     public function onAfterCreate(ProcedureClaimEvent $event): void
  63.     {
  64.         $claim     $event->getClaim();
  65.         $procedure $claim->getProcedure();
  66.         // Refresh the claim token
  67.         $this->procedureRepository->save(
  68.             $procedure->refreshClaimToken()
  69.         );
  70.         // TODO: reschedule the pending step of the procedure (add 7 days to the scheduledAt prop)
  71.         // Send email to creditor
  72.         $invoice $procedure->getInvoice();
  73.         $logo null;
  74.         if (null !== $logoMedia $invoice->getAccount()->getLogo()) {
  75.             $logo $this->urlGenerator->getMediaFileUrl($logoMedia);
  76.         }
  77.         $parameters = [
  78.             'user'           => $this->serializer->toArray($invoice->getUser()),
  79.             'invoice'        => $this->serializer->toArray($invoice),
  80.             'claim'          => $this->serializer->toArray($claim),
  81.             'close_link'     => $this->urlGenerator->generate('app_page_procedure_close', [
  82.                 'closeToken' => $procedure->getCloseToken()
  83.             ]),
  84.             'resume_link'    => $this->urlGenerator->generate('app_page_procedure_resume', [
  85.                 'resumeToken' => $procedure->getResumeToken()
  86.             ]),
  87.             'documents_link' => $this->urlGenerator->generate('app_page_procedure_documents', [
  88.                 'procedure' => $procedure->getId()
  89.             ]),
  90.             'logo'           => $logo
  91.         ];
  92.         $contacts $invoice->getActiveAccountContacts();
  93.         if ($contacts->isEmpty()) {
  94.             $this->smtp->send(
  95.                 $invoice->getCreditorName(),
  96.                 $invoice->getCreditorEmail(),
  97.                 self::EMAIL_TEMPLATE_ID,
  98.                 $parameters,
  99.                 []
  100.             );
  101.         } else {
  102.             $this->smtp->sendToContacts(
  103.                 $contacts,
  104.                 self::EMAIL_TEMPLATE_ID,
  105.                 $parameters,
  106.                 []
  107.             );
  108.         }
  109.     }
  110.     /**
  111.      * @inheritDoc
  112.      */
  113.     public static function getSubscribedEvents()
  114.     {
  115.         return [
  116.             Events::PROCEDURE_CLAIM_AFTER_CREATE => 'onAfterCreate'
  117.         ];
  118.     }
  119. }