custom/plugins/fgitsAutoinvoiceSW6/src/Subscriber/MailSubscriber.php line 118

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Fgits\AutoInvoice\Subscriber;
  3. use Fgits\AutoInvoice\Service\ConditionChecker;
  4. use Fgits\AutoInvoice\Service\CustomFields\OrderCustomFields;
  5. use Fgits\AutoInvoice\Service\DB\Document as DBDocument;
  6. use Fgits\AutoInvoice\Service\DB\Order;
  7. use Fgits\AutoInvoice\Service\Document;
  8. use Fgits\AutoInvoice\Service\DocumentCreator;
  9. use Fgits\AutoInvoice\Service\FgitsLibrary\Mailer as FgitsMailer;
  10. use Psr\Log\LoggerInterface;
  11. use Shopware\Core\Content\MailTemplate\Service\Event\MailBeforeSentEvent;
  12. use Shopware\Core\System\SystemConfig\SystemConfigService;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. /**
  15.  * Copyright (c) 2021. GOLLE IT.
  16.  *
  17.  * @author Andrey Grigorkin <andrey@golle-it.de>
  18.  */
  19. class MailSubscriber implements EventSubscriberInterface
  20. {
  21.     /**
  22.      * @var DBDocument $dbDocument
  23.      */
  24.     private $dbDocument;
  25.     /**
  26.      * @var Order $order
  27.      */
  28.     private $order;
  29.     /**
  30.      * @var ConditionChecker $conditionChecker
  31.      */
  32.     private $conditionChecker;
  33.     /**
  34.      * @var Document $document
  35.      */
  36.     private $document;
  37.     /**
  38.      * @var DocumentCreator $documentCreator
  39.      */
  40.     private $documentCreator;
  41.     /**
  42.      * @var FgitsMailer $mailer
  43.      */
  44.     private $mailer;
  45.     /**
  46.      * @var OrderCustomFields $orderCustomFields
  47.      */
  48.     private $orderCustomFields;
  49.     /**
  50.      * @var SystemConfigService $systemConfigService
  51.      */
  52.     private $systemConfigService;
  53.     /**
  54.      * @var LoggerInterface $logger
  55.      */
  56.     private $logger;
  57.     /**
  58.      * MailSubscriber constructor.
  59.      *
  60.      * @param DBDocument $dbDocument
  61.      * @param Order $order
  62.      * @param ConditionChecker $conditionChecker
  63.      * @param Document $document
  64.      * @param DocumentCreator $documentCreator
  65.      * @param FgitsMailer $mailer
  66.      * @param OrderCustomFields $orderCustomFields
  67.      * @param SystemConfigService $systemConfigService
  68.      * @param LoggerInterface $logger
  69.      */
  70.     public function __construct(
  71.         DBDocument $dbDocument,
  72.         Order $order,
  73.         ConditionChecker $conditionChecker,
  74.         Document $document,
  75.         DocumentCreator $documentCreator,
  76.         FgitsMailer $mailer,
  77.         OrderCustomFields $orderCustomFields,
  78.         SystemConfigService $systemConfigService,
  79.         LoggerInterface $logger
  80.     ) {
  81.         $this->dbDocument          $dbDocument;
  82.         $this->order               $order;
  83.         $this->conditionChecker    $conditionChecker;
  84.         $this->document            $document;
  85.         $this->documentCreator     $documentCreator;
  86.         $this->mailer              $mailer;
  87.         $this->orderCustomFields   $orderCustomFields;
  88.         $this->systemConfigService $systemConfigService;
  89.         $this->logger              $logger;
  90.     }
  91.     public static function getSubscribedEvents(): array
  92.     {
  93.         return[
  94.             MailBeforeSentEvent::class => 'onAfterCreateMessage'
  95.         ];
  96.     }
  97.     /**
  98.      * Gets invoked when an email is ready to be sent.
  99.      *
  100.      * @param MailBeforeSentEvent $event
  101.      *
  102.      * @throws \Exception
  103.      */
  104.     public function onAfterCreateMessage(MailBeforeSentEvent $event)
  105.     {
  106.         $data $event->getData();
  107.         $config $this->systemConfigService->get('fgitsAutoinvoiceSW6.config'$data['salesChannelId']);
  108.         if ($config['active'] && !empty($config['sendCustomerEmail']) && !empty($config['attachEmail']) && isset($data['templateId'])) {
  109.             $mailTemplate $this->mailer->getMailTemplateById($data['templateId']);
  110.             $mailTemplateType $mailTemplate->getMailTemplateType();
  111.             if ($mailTemplateType->getTechnicalName() == $config['attachEmail']) {
  112.                 $order $this->order->getLastOrder($event->getContext());
  113.                 if ($this->conditionChecker->shouldSendInvoice($orderfalse)) {
  114.                     $this->documentCreator->createInvoice($order);
  115.                     $invoice $this->document->getInvoice($order$event->getContext());
  116.                     $event->getMessage()->attach($invoice['content'], $invoice['fileName'], $invoice['mimeType']);
  117.                     $this->dbDocument->setSent($invoice['id'], $invoice['orderVersionId']);
  118.                     $this->orderCustomFields->setOrderProcessed($order);
  119.                 }
  120.                 $this->orderCustomFields->setOrderConfirmationSent($order);
  121.             }
  122.         }
  123.     }
  124. }