CreditmemoSender.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Email\Sender;
  7. use Magento\Payment\Helper\Data as PaymentHelper;
  8. use Magento\Sales\Model\Order;
  9. use Magento\Sales\Model\Order\Creditmemo;
  10. use Magento\Sales\Model\Order\Email\Container\CreditmemoIdentity;
  11. use Magento\Sales\Model\Order\Email\Container\Template;
  12. use Magento\Sales\Model\Order\Email\Sender;
  13. use Magento\Sales\Model\ResourceModel\Order\Creditmemo as CreditmemoResource;
  14. use Magento\Sales\Model\Order\Address\Renderer;
  15. use Magento\Framework\Event\ManagerInterface;
  16. use Magento\Framework\DataObject;
  17. /**
  18. * Class CreditmemoSender
  19. *
  20. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  21. */
  22. class CreditmemoSender extends Sender
  23. {
  24. /**
  25. * @var PaymentHelper
  26. */
  27. protected $paymentHelper;
  28. /**
  29. * @var CreditmemoResource
  30. */
  31. protected $creditmemoResource;
  32. /**
  33. * Global configuration storage.
  34. *
  35. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  36. */
  37. protected $globalConfig;
  38. /**
  39. * @var Renderer
  40. */
  41. protected $addressRenderer;
  42. /**
  43. * Application Event Dispatcher
  44. *
  45. * @var ManagerInterface
  46. */
  47. protected $eventManager;
  48. /**
  49. * @param Template $templateContainer
  50. * @param CreditmemoIdentity $identityContainer
  51. * @param Order\Email\SenderBuilderFactory $senderBuilderFactory
  52. * @param \Psr\Log\LoggerInterface $logger
  53. * @param PaymentHelper $paymentHelper
  54. * @param CreditmemoResource $creditmemoResource
  55. * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
  56. * @param Renderer $addressRenderer
  57. * @param ManagerInterface $eventManager
  58. */
  59. public function __construct(
  60. Template $templateContainer,
  61. CreditmemoIdentity $identityContainer,
  62. \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
  63. \Psr\Log\LoggerInterface $logger,
  64. Renderer $addressRenderer,
  65. PaymentHelper $paymentHelper,
  66. CreditmemoResource $creditmemoResource,
  67. \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
  68. ManagerInterface $eventManager
  69. ) {
  70. parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
  71. $this->paymentHelper = $paymentHelper;
  72. $this->creditmemoResource = $creditmemoResource;
  73. $this->globalConfig = $globalConfig;
  74. $this->addressRenderer = $addressRenderer;
  75. $this->eventManager = $eventManager;
  76. }
  77. /**
  78. * Sends order creditmemo email to the customer.
  79. *
  80. * Email will be sent immediately in two cases:
  81. *
  82. * - if asynchronous email sending is disabled in global settings
  83. * - if $forceSyncMode parameter is set to TRUE
  84. *
  85. * Otherwise, email will be sent later during running of
  86. * corresponding cron job.
  87. *
  88. * @param Creditmemo $creditmemo
  89. * @param bool $forceSyncMode
  90. * @return bool
  91. */
  92. public function send(Creditmemo $creditmemo, $forceSyncMode = false)
  93. {
  94. $creditmemo->setSendEmail(true);
  95. if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
  96. $order = $creditmemo->getOrder();
  97. $transport = [
  98. 'order' => $order,
  99. 'creditmemo' => $creditmemo,
  100. 'comment' => $creditmemo->getCustomerNoteNotify() ? $creditmemo->getCustomerNote() : '',
  101. 'billing' => $order->getBillingAddress(),
  102. 'payment_html' => $this->getPaymentHtml($order),
  103. 'store' => $order->getStore(),
  104. 'formattedShippingAddress' => $this->getFormattedShippingAddress($order),
  105. 'formattedBillingAddress' => $this->getFormattedBillingAddress($order),
  106. ];
  107. $transportObject = new DataObject($transport);
  108. /**
  109. * Event argument `transport` is @deprecated. Use `transportObject` instead.
  110. */
  111. $this->eventManager->dispatch(
  112. 'email_creditmemo_set_template_vars_before',
  113. ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject]
  114. );
  115. $this->templateContainer->setTemplateVars($transportObject->getData());
  116. if ($this->checkAndSend($order)) {
  117. $creditmemo->setEmailSent(true);
  118. $this->creditmemoResource->saveAttribute($creditmemo, ['send_email', 'email_sent']);
  119. return true;
  120. }
  121. } else {
  122. $creditmemo->setEmailSent(null);
  123. $this->creditmemoResource->saveAttribute($creditmemo, 'email_sent');
  124. }
  125. $this->creditmemoResource->saveAttribute($creditmemo, 'send_email');
  126. return false;
  127. }
  128. /**
  129. * Return payment info block as html
  130. *
  131. * @param Order $order
  132. * @return string
  133. */
  134. protected function getPaymentHtml(Order $order)
  135. {
  136. return $this->paymentHelper->getInfoBlockHtml(
  137. $order->getPayment(),
  138. $this->identityContainer->getStore()->getStoreId()
  139. );
  140. }
  141. }