-
Notifications
You must be signed in to change notification settings - Fork 9.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MAGETWO-56495: Introduce and implement ShipmentNotifier
- Loading branch information
Dmytro Voskoboinikov
committed
Aug 11, 2016
1 parent
04474e5
commit 0b4d732
Showing
5 changed files
with
611 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
<?php | ||
/** | ||
* Copyright © 2016 Magento. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
namespace Magento\Sales\Model\Order\Shipment; | ||
|
||
/** | ||
* Shipment notifier. | ||
* | ||
* @api | ||
*/ | ||
class Notifier implements \Magento\Sales\Model\Order\Shipment\NotifierInterface | ||
{ | ||
/** | ||
* @var \Magento\Sales\Model\Order\Shipment\SenderInterface[] | ||
*/ | ||
private $senders; | ||
|
||
/** | ||
* @param \Magento\Sales\Model\Order\Shipment\SenderInterface[] $senders | ||
*/ | ||
public function __construct(array $senders = []) | ||
{ | ||
$this->senders = $senders; | ||
} | ||
|
||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function notify( | ||
\Magento\Sales\Api\Data\OrderInterface $order, | ||
\Magento\Sales\Api\Data\ShipmentInterface $shipment, | ||
\Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment = null, | ||
$forceSyncMode = false | ||
) { | ||
foreach ($this->senders as $sender) { | ||
$sender->send($order, $shipment, $comment, $forceSyncMode); | ||
} | ||
} | ||
} |
31 changes: 31 additions & 0 deletions
31
app/code/Magento/Sales/Model/Order/Shipment/NotifierInterface.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
<?php | ||
/** | ||
* Copyright © 2016 Magento. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
namespace Magento\Sales\Model\Order\Shipment; | ||
|
||
/** | ||
* Interface for Shipment notifier. | ||
* | ||
* @api | ||
*/ | ||
interface NotifierInterface | ||
{ | ||
/** | ||
* Notifies customer. | ||
* | ||
* @param \Magento\Sales\Api\Data\OrderInterface $order | ||
* @param \Magento\Sales\Api\Data\ShipmentInterface $shipment | ||
* @param \Magento\Sales\Api\Data\ShipmentCommentCreationInterface|null $comment | ||
* @param bool $forceSyncMode | ||
* | ||
* @return void | ||
*/ | ||
public function notify( | ||
\Magento\Sales\Api\Data\OrderInterface $order, | ||
\Magento\Sales\Api\Data\ShipmentInterface $shipment, | ||
\Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment = null, | ||
$forceSyncMode = false | ||
); | ||
} |
149 changes: 149 additions & 0 deletions
149
app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
<?php | ||
/** | ||
* Copyright © 2016 Magento. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
namespace Magento\Sales\Model\Order\Shipment\Sender; | ||
|
||
use Magento\Sales\Model\Order\Email\Sender; | ||
use Magento\Sales\Model\Order\Shipment\SenderInterface; | ||
|
||
/** | ||
* Email notification sender for Shipment. | ||
*/ | ||
class EmailSender extends Sender implements SenderInterface | ||
{ | ||
/** | ||
* @var \Magento\Payment\Helper\Data | ||
*/ | ||
private $paymentHelper; | ||
|
||
/** | ||
* @var \Magento\Sales\Model\ResourceModel\Order\Shipment | ||
*/ | ||
private $shipmentResource; | ||
|
||
/** | ||
* @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\ShipmentIdentity $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\Shipment $shipmentResource | ||
* @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\ShipmentIdentity $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\Shipment $shipmentResource, | ||
\Magento\Framework\App\Config\ScopeConfigInterface $globalConfig, | ||
\Magento\Framework\Event\ManagerInterface $eventManager | ||
) { | ||
parent::__construct( | ||
$templateContainer, | ||
$identityContainer, | ||
$senderBuilderFactory, | ||
$logger, | ||
$addressRenderer | ||
); | ||
|
||
$this->paymentHelper = $paymentHelper; | ||
$this->shipmentResource = $shipmentResource; | ||
$this->globalConfig = $globalConfig; | ||
$this->eventManager = $eventManager; | ||
} | ||
|
||
/** | ||
* Sends order shipment 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\ShipmentInterface $shipment | ||
* @param \Magento\Sales\Api\Data\ShipmentCommentCreationInterface|null $comment | ||
* @param bool $forceSyncMode | ||
* | ||
* @return bool | ||
*/ | ||
public function send( | ||
\Magento\Sales\Api\Data\OrderInterface $order, | ||
\Magento\Sales\Api\Data\ShipmentInterface $shipment, | ||
\Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment = null, | ||
$forceSyncMode = false | ||
) { | ||
$shipment->setSendEmail(true); | ||
|
||
if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { | ||
$transport = [ | ||
'order' => $order, | ||
'shipment' => $shipment, | ||
'comment' => $comment ? $comment->getComment() : '', | ||
'billing' => $order->getBillingAddress(), | ||
'payment_html' => $this->getPaymentHtml($order), | ||
'store' => $order->getStore(), | ||
'formattedShippingAddress' => $this->getFormattedShippingAddress($order), | ||
'formattedBillingAddress' => $this->getFormattedBillingAddress($order) | ||
]; | ||
|
||
$this->eventManager->dispatch( | ||
'email_shipment_set_template_vars_before', | ||
['sender' => $this, 'transport' => $transport] | ||
); | ||
|
||
$this->templateContainer->setTemplateVars($transport); | ||
|
||
if ($this->checkAndSend($order)) { | ||
$shipment->setEmailSent(true); | ||
|
||
$this->shipmentResource->saveAttribute($shipment, ['send_email', 'email_sent']); | ||
|
||
return true; | ||
} | ||
} else { | ||
$shipment->setEmailSent(null); | ||
|
||
$this->shipmentResource->saveAttribute($shipment, 'email_sent'); | ||
} | ||
|
||
$this->shipmentResource->saveAttribute($shipment, '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() | ||
); | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
app/code/Magento/Sales/Model/Order/Shipment/SenderInterface.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
<?php | ||
/** | ||
* Copyright © 2016 Magento. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
namespace Magento\Sales\Model\Order\Shipment; | ||
|
||
/** | ||
* Interface for notification sender for Shipment. | ||
*/ | ||
interface SenderInterface | ||
{ | ||
/** | ||
* Sends notification to a customer. | ||
* | ||
* @param \Magento\Sales\Api\Data\OrderInterface $order | ||
* @param \Magento\Sales\Api\Data\ShipmentInterface $shipment | ||
* @param \Magento\Sales\Api\Data\ShipmentCommentCreationInterface|null $comment | ||
* @param bool $forceSyncMode | ||
* | ||
* @return bool | ||
*/ | ||
public function send( | ||
\Magento\Sales\Api\Data\OrderInterface $order, | ||
\Magento\Sales\Api\Data\ShipmentInterface $shipment, | ||
\Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment = null, | ||
$forceSyncMode = false | ||
); | ||
} |
Oops, something went wrong.