diff -Nuar a/vendor/magento/module-sales/Model/AdminOrder/EmailSender.php b/vendor/magento/module-sales/Model/AdminOrder/EmailSender.php index 4e068eb571d..2e9518600c2 100644 --- a/vendor/magento/module-sales/Model/AdminOrder/EmailSender.php +++ b/vendor/magento/module-sales/Model/AdminOrder/EmailSender.php @@ -5,10 +5,13 @@ */ namespace Magento\Sales\Model\AdminOrder; -use Psr\Log\LoggerInterface as Logger; +use Magento\Framework\Exception\MailException; use Magento\Framework\Message\ManagerInterface; use Magento\Sales\Model\Order; +use Magento\Sales\Model\Order\Email\Sender\InvoiceSender; use Magento\Sales\Model\Order\Email\Sender\OrderSender; +use Magento\Sales\Model\Order\Invoice; +use Psr\Log\LoggerInterface as Logger; /** * Class EmailSender @@ -30,21 +33,31 @@ class EmailSender */ protected $orderSender; + /** + * @var InvoiceSender + */ + private $invoiceSender; + /** * @param ManagerInterface $messageManager * @param Logger $logger * @param OrderSender $orderSender + * @param InvoiceSender $invoiceSender */ - public function __construct(ManagerInterface $messageManager, Logger $logger, OrderSender $orderSender) - { + public function __construct( + ManagerInterface $messageManager, + Logger $logger, + OrderSender $orderSender, + InvoiceSender $invoiceSender + ) { $this->messageManager = $messageManager; $this->logger = $logger; $this->orderSender = $orderSender; + $this->invoiceSender = $invoiceSender; } /** - * Send email about new order. - * Process mail exception + * Send email about new order and handle mail exception * * @param Order $order * @return bool @@ -53,7 +66,8 @@ class EmailSender { try { $this->orderSender->send($order); - } catch (\Magento\Framework\Exception\MailException $exception) { + $this->sendInvoiceEmail($order); + } catch (MailException $exception) { $this->logger->critical($exception); $this->messageManager->addWarningMessage( __('You did not email your customer. Please check your email settings.') @@ -63,4 +77,19 @@ class EmailSender return true; } + + /** + * Send email about invoice paying + * + * @param Order $order + */ + private function sendInvoiceEmail(Order $order): void + { + foreach ($order->getInvoiceCollection()->getItems() as $invoice) { + /** @var Invoice $invoice */ + if ($invoice->getState() === Invoice::STATE_PAID) { + $this->invoiceSender->send($invoice); + } + } + } }