123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Model\Order\Invoice\Sender;
- use Magento\Sales\Model\Order\Email\Sender;
- use Magento\Sales\Model\Order\Invoice\SenderInterface;
- use Magento\Framework\DataObject;
- /**
- * Email notification sender for Invoice.
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class EmailSender extends Sender implements SenderInterface
- {
- /**
- * @var \Magento\Payment\Helper\Data
- */
- private $paymentHelper;
- /**
- * @var \Magento\Sales\Model\ResourceModel\Order\Invoice
- */
- private $invoiceResource;
- /**
- * @var \Magento\Framework\App\Config\ScopeConfigInterface
- */
- private $globalConfig;
- /**
- * @var \Magento\Framework\Event\ManagerInterface
- */
- private $eventManager;
- /**
- * @param \Magento\Sales\Model\Order\Email\Container\Template $templateContainer
- * @param \Magento\Sales\Model\Order\Email\Container\InvoiceIdentity $identityContainer
- * @param \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory
- * @param \Psr\Log\LoggerInterface $logger
- * @param \Magento\Sales\Model\Order\Address\Renderer $addressRenderer
- * @param \Magento\Payment\Helper\Data $paymentHelper
- * @param \Magento\Sales\Model\ResourceModel\Order\Invoice $invoiceResource
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
- * @param \Magento\Framework\Event\ManagerInterface $eventManager
- */
- public function __construct(
- \Magento\Sales\Model\Order\Email\Container\Template $templateContainer,
- \Magento\Sales\Model\Order\Email\Container\InvoiceIdentity $identityContainer,
- \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
- \Psr\Log\LoggerInterface $logger,
- \Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
- \Magento\Payment\Helper\Data $paymentHelper,
- \Magento\Sales\Model\ResourceModel\Order\Invoice $invoiceResource,
- \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
- \Magento\Framework\Event\ManagerInterface $eventManager
- ) {
- parent::__construct(
- $templateContainer,
- $identityContainer,
- $senderBuilderFactory,
- $logger,
- $addressRenderer
- );
- $this->paymentHelper = $paymentHelper;
- $this->invoiceResource = $invoiceResource;
- $this->globalConfig = $globalConfig;
- $this->eventManager = $eventManager;
- }
- /**
- * Sends order invoice email to the customer.
- *
- * Email will be sent immediately in two cases:
- *
- * - if asynchronous email sending is disabled in global settings
- * - if $forceSyncMode parameter is set to TRUE
- *
- * Otherwise, email will be sent later during running of
- * corresponding cron job.
- *
- * @param \Magento\Sales\Api\Data\OrderInterface $order
- * @param \Magento\Sales\Api\Data\InvoiceInterface $invoice
- * @param \Magento\Sales\Api\Data\InvoiceCommentCreationInterface|null $comment
- * @param bool $forceSyncMode
- *
- * @return bool
- */
- public function send(
- \Magento\Sales\Api\Data\OrderInterface $order,
- \Magento\Sales\Api\Data\InvoiceInterface $invoice,
- \Magento\Sales\Api\Data\InvoiceCommentCreationInterface $comment = null,
- $forceSyncMode = false
- ) {
- $invoice->setSendEmail(true);
- if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
- $transport = [
- 'order' => $order,
- 'invoice' => $invoice,
- 'comment' => $comment ? $comment->getComment() : '',
- 'billing' => $order->getBillingAddress(),
- 'payment_html' => $this->getPaymentHtml($order),
- 'store' => $order->getStore(),
- 'formattedShippingAddress' => $this->getFormattedShippingAddress($order),
- 'formattedBillingAddress' => $this->getFormattedBillingAddress($order),
- ];
- $transportObject = new DataObject($transport);
- /**
- * Event argument `transport` is @deprecated. Use `transportObject` instead.
- */
- $this->eventManager->dispatch(
- 'email_invoice_set_template_vars_before',
- ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject]
- );
- $this->templateContainer->setTemplateVars($transportObject->getData());
- if ($this->checkAndSend($order)) {
- $invoice->setEmailSent(true);
- $this->invoiceResource->saveAttribute($invoice, ['send_email', 'email_sent']);
- return true;
- }
- } else {
- $invoice->setEmailSent(null);
- $this->invoiceResource->saveAttribute($invoice, 'email_sent');
- }
- $this->invoiceResource->saveAttribute($invoice, 'send_email');
- return false;
- }
- /**
- * Returns payment info block as HTML.
- *
- * @param \Magento\Sales\Api\Data\OrderInterface $order
- *
- * @return string
- */
- private function getPaymentHtml(\Magento\Sales\Api\Data\OrderInterface $order)
- {
- return $this->paymentHelper->getInfoBlockHtml(
- $order->getPayment(),
- $this->identityContainer->getStore()->getStoreId()
- );
- }
- }
|