NotificationToSalesAdminBuilder.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Mailer\Builder\Shop\NewStructureArtistPremium;
  4. use App\Entity\Access\Access;
  5. use App\Enum\Core\EmailSendingTypeEnum;
  6. use App\Service\Mailer\Builder\AbstractBuilder;
  7. use App\Service\Mailer\Builder\BuilderInterface;
  8. use App\Service\Mailer\Email;
  9. use App\Service\Mailer\Model\MailerModelInterface;
  10. use App\Service\Mailer\Model\Shop\NewStructureArtistPremium\NotificationToSalesAdminModel;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. /**
  14. * Classe NewStructureArtistPremiumTrialRequestSalesAdminBuilder qui est chargé de construire l'Email
  15. * d'information à l'administration des ventes concernant une demande d'essai artist premium pour une nouvelle structure.
  16. */
  17. class NotificationToSalesAdminBuilder extends AbstractBuilder implements BuilderInterface
  18. {
  19. public function __construct(
  20. private readonly EntityManagerInterface $entityManager,
  21. private readonly string $opentalentNoReplyEmailAddress,
  22. ) {
  23. }
  24. public function support(MailerModelInterface $mailerModel): bool
  25. {
  26. return $mailerModel instanceof NotificationToSalesAdminModel;
  27. }
  28. /**
  29. * @param NotificationToSalesAdminModel $mailerModel
  30. */
  31. public function build(MailerModelInterface $mailerModel): ArrayCollection
  32. {
  33. $author = $this->entityManager->getRepository(Access::class)->find($mailerModel->getSenderId());
  34. $context = [
  35. 'trialRequest' => $mailerModel->getTrialRequest(),
  36. ];
  37. $content = $this->render('shop/NewStructureArtistPremium/notification-to-sales-admin', $context);
  38. $email = (new Email())
  39. ->setEmailEntity($this->buildEmailEntity('Nouvelle demande d\'essai Artist Premium', $author, $content))
  40. ->setContent($content)
  41. ->setFrom($this->opentalentNoReplyEmailAddress)
  42. ->setFromName('Opentalent - Agenda & Logiciels Culturels');
  43. // Add recipient as a string (direct email address)
  44. $this->addRecipient($email, 'adv@opentalent.fr', EmailSendingTypeEnum::TO);
  45. return new ArrayCollection([$email]);
  46. }
  47. }