| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Model/Order/Creditmemo/Sender/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Model/Order/Creditmemo/Sender/EmailSender.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Sales\Model\Order\Creditmemo\Sender;
use Magento\Sales\Model\Order\Email\Sender;
use Magento\Sales\Model\Order\Creditmemo\SenderInterface;
use Magento\Framework\DataObject;
/**
* Email notification sender for Creditmemo.
*
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class EmailSender extends Sender implements SenderInterface
{
/**
* @var \Magento\Payment\Helper\Data
*/
private $paymentHelper;
/**
* @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo
*/
private $creditmemoResource;
/**
* @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\CreditmemoIdentity $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\Creditmemo $creditmemoResource
* @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\CreditmemoIdentity $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\Creditmemo $creditmemoResource,
\Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
\Magento\Framework\Event\ManagerInterface $eventManager
) {
parent::__construct(
$templateContainer,
$identityContainer,
$senderBuilderFactory,
$logger,
$addressRenderer
);
$this->paymentHelper = $paymentHelper;
$this->creditmemoResource = $creditmemoResource;
$this->globalConfig = $globalConfig;
$this->eventManager = $eventManager;
}
/**
* Sends order creditmemo 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\CreditmemoInterface $creditmemo
* @param \Magento\Sales\Api\Data\CreditmemoCommentCreationInterface|null $comment
* @param bool $forceSyncMode
*
* @return bool
* @throws \Exception
*/
public function send(
\Magento\Sales\Api\Data\OrderInterface $order,
\Magento\Sales\Api\Data\CreditmemoInterface $creditmemo,
\Magento\Sales\Api\Data\CreditmemoCommentCreationInterface $comment = null,
$forceSyncMode = false
) {
$creditmemo->setSendEmail($this->identityContainer->isEnabled());
if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
$this->identityContainer->setStore($order->getStore());
$transport = [
'order' => $order,
'creditmemo' => $creditmemo,
'comment' => $comment ? $comment->getComment() : '',
'billing' => $order->getBillingAddress(),
'payment_html' => $this->getPaymentHtml($order),
'store' => $order->getStore(),
'formattedShippingAddress' => $this->getFormattedShippingAddress($order),
'formattedBillingAddress' => $this->getFormattedBillingAddress($order),
'order_data' => [
'customer_name' => $order->getCustomerName(),
'is_not_virtual' => $order->getIsNotVirtual(),
'email_customer_note' => $order->getEmailCustomerNote(),
'frontend_status_label' => $order->getFrontendStatusLabel()
]
];
$transportObject = new DataObject($transport);
/**
* Event argument `transport` is @deprecated. Use `transportObject` instead.
*/
$this->eventManager->dispatch(
'email_creditmemo_set_template_vars_before',
['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject]
);
$this->templateContainer->setTemplateVars($transportObject->getData());
if ($this->checkAndSend($order)) {
$creditmemo->setEmailSent(true);
$this->creditmemoResource->saveAttribute($creditmemo, ['send_email', 'email_sent']);
return true;
}
} else {
$creditmemo->setEmailSent(null);
$this->creditmemoResource->saveAttribute($creditmemo, 'email_sent');
}
$this->creditmemoResource->saveAttribute($creditmemo, 'send_email');
return false;
}
/**
* Returns payment info block as HTML.
*
* @param \Magento\Sales\Api\Data\OrderInterface $order
*
* @return string
* @throws \Exception
*/
private function getPaymentHtml(\Magento\Sales\Api\Data\OrderInterface $order)
{
return $this->paymentHelper->getInfoBlockHtml(
$order->getPayment(),
$this->identityContainer->getStore()->getStoreId()
);
}
}