src/EventListener/OrderListener.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\User\AdminUser;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  6. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  7. use Symfony\Component\Mailer\MailerInterface;
  8. use Symfony\Component\Mime\Address;
  9. use Symfony\Contracts\EventDispatcher\Event;
  10. class OrderListener
  11. {
  12.     /** @var EntityManagerInterface */
  13.     protected EntityManagerInterface $em;
  14.     /** @var MailerInterface */
  15.     protected MailerInterface $mailer;
  16.     /**
  17.      * @param EntityManagerInterface $em
  18.      * @param MailerInterface $mailer
  19.      */
  20.     public function __construct(EntityManagerInterface $emMailerInterface $mailer) {
  21.         $this->em $em;
  22.         $this->mailer $mailer;
  23.     }
  24.     /**
  25.      * @param Event $event
  26.      * @return void
  27.      * @throws TransportExceptionInterface
  28.      */
  29.     public function onPostComplete(Event $event): void
  30.     {
  31.         $order $event->getSubject();
  32.         $paymentType $order->getPayments()->first()->getMethod()->getGatewayConfig()->getGatewayName();
  33.         $customer $order->getCustomer();
  34.         // Prepare payment confirmation mail to Customer
  35.         $customerMail = (new TemplatedEmail())
  36.             ->to(new Address($customer->getEmail()))
  37.             ->subject(
  38.                 $paymentType === 'mercanet' 
  39.                 'FNTV Services – Votre commande réglée par carte bancaire a bien été enregistrée' 
  40.                 'FNTV Services – Concernant votre demande de règlement par virement bancaire'
  41.             )
  42.             ->htmlTemplate('bundles/SyliusShopBundle/Email/payment_confirmation_customer.html.twig')
  43.             ->context([
  44.                 'order' => $order,
  45.                 'customer' => $customer,
  46.                 'paymentType' => $paymentType
  47.             ])
  48.         ;
  49.         // Prepare payment confirmation mail to Admin
  50.         $admins $this->em->getRepository(AdminUser::class)->findBy(['enabled' => true]);
  51.         foreach ($admins as $admin) {
  52.             $adminsEmails[] = $admin->getEmail();
  53.         }
  54.         $adminMail = (new TemplatedEmail())
  55.             ->to(... $adminsEmails ?? [])
  56.             ->subject(
  57.                 $paymentType === 'mercanet' 
  58.                 'FNTV Services – Un commande réglée par carte bancaire a été réalisée' 
  59.                 'FNTV Services – Nouveau règlement par virement bancaire'
  60.             )
  61.             ->htmlTemplate('bundles/SyliusShopBundle/Email/payment_confirmation_admin.html.twig')
  62.             ->context([
  63.                 'order' => $order,
  64.                 'customer' => $customer,
  65.                 'paymentType' => $paymentType
  66.             ])
  67.         ;
  68.         // Send
  69.         $this->mailer->send($customerMail);
  70.         $this->mailer->send($adminMail);
  71.     }
  72. }