Skip to content

Commit b57b853

Browse files
author
Dmytro Voskoboinikov
committed
MAGETWO-35620: Implement Observer
1 parent a454c57 commit b57b853

File tree

17 files changed

+446
-125
lines changed

17 files changed

+446
-125
lines changed

app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/AddComment.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Magento\Sales\Controller\Adminhtml\Order\Creditmemo;
77

88
use Magento\Backend\App\Action;
9-
use Magento\Sales\Model\Order\Email\Sender\CreditmemoSender;
9+
use Magento\Sales\Model\Order\Email\Sender\CreditmemoCommentSender;
1010

1111
class AddComment extends \Magento\Backend\App\Action
1212
{
@@ -16,9 +16,9 @@ class AddComment extends \Magento\Backend\App\Action
1616
protected $creditmemoLoader;
1717

1818
/**
19-
* @var CreditmemoSender
19+
* @var CreditmemoCommentSender
2020
*/
21-
protected $creditmemoSender;
21+
protected $creditmemoCommentSender;
2222

2323
/**
2424
* @var \Magento\Framework\View\Result\PageFactory
@@ -38,21 +38,21 @@ class AddComment extends \Magento\Backend\App\Action
3838
/**
3939
* @param Action\Context $context
4040
* @param \Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader
41-
* @param CreditmemoSender $creditmemoSender
41+
* @param CreditmemoCommentSender $creditmemoCommentSender
4242
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
4343
* @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory
4444
* @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
4545
*/
4646
public function __construct(
4747
Action\Context $context,
4848
\Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader $creditmemoLoader,
49-
CreditmemoSender $creditmemoSender,
49+
CreditmemoCommentSender $creditmemoCommentSender,
5050
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
5151
\Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory,
5252
\Magento\Framework\Controller\Result\RawFactory $resultRawFactory
5353
) {
5454
$this->creditmemoLoader = $creditmemoLoader;
55-
$this->creditmemoSender = $creditmemoSender;
55+
$this->creditmemoCommentSender = $creditmemoCommentSender;
5656
$this->resultPageFactory = $resultPageFactory;
5757
$this->resultJsonFactory = $resultJsonFactory;
5858
$this->resultRawFactory = $resultRawFactory;
@@ -94,7 +94,7 @@ public function execute()
9494
);
9595
$comment->save();
9696

97-
$this->creditmemoSender->send($creditmemo, !empty($data['is_customer_notified']), $data['comment']);
97+
$this->creditmemoCommentSender->send($creditmemo, !empty($data['is_customer_notified']), $data['comment']);
9898
$resultPage = $this->resultPageFactory->create();
9999
$response = $resultPage->getLayout()->getBlock('creditmemo_comments')->toHtml();
100100
} catch (\Magento\Framework\Exception\LocalizedException $e) {

app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,17 @@ public function execute()
8989
);
9090
}
9191

92-
$comment = '';
9392
if (!empty($data['comment_text'])) {
9493
$creditmemo->addComment(
9594
$data['comment_text'],
9695
isset($data['comment_customer_notify']),
9796
isset($data['is_visible_on_front'])
9897
);
99-
if (isset($data['comment_customer_notify'])) {
100-
$comment = $data['comment_text'];
101-
}
10298
}
10399

100+
$creditmemo->setCustomerNote($data['comment_text']);
101+
$creditmemo->setCustomerNoteNotify(isset($data['comment_customer_notify']));
102+
104103
if (isset($data['do_refund'])) {
105104
$creditmemo->setRefundRequested(true);
106105
}
@@ -115,9 +114,6 @@ public function execute()
115114
}
116115

117116
$creditmemo->register();
118-
if (!empty($data['send_email'])) {
119-
$creditmemo->setEmailSent(true);
120-
}
121117

122118
$creditmemo->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
123119
$transactionSave = $this->_objectManager->create(
@@ -131,7 +127,10 @@ public function execute()
131127
$transactionSave->addObject($creditmemo->getInvoice());
132128
}
133129
$transactionSave->save();
134-
$this->creditmemoSender->send($creditmemo, !empty($data['send_email']), $comment);
130+
131+
if (!empty($data['send_email'])) {
132+
$this->creditmemoSender->send($creditmemo);
133+
}
135134

136135
$this->messageManager->addSuccess(__('You created the credit memo.'));
137136
$this->_getSession()->getCommentText(true);

app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use Magento\Backend\App\Action;
1010
use Magento\Framework\Exception\LocalizedException;
1111
use Magento\Framework\Registry;
12-
use Magento\Sales\Model\Order\Email\Sender\InvoiceCommentSender;
12+
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
1313
use Magento\Sales\Model\Order\Email\Sender\ShipmentSender;
1414
use Magento\Sales\Model\Order\Invoice;
1515
use Magento\Backend\Model\View\Result\RedirectFactory;
@@ -20,9 +20,9 @@
2020
class Save extends \Magento\Backend\App\Action
2121
{
2222
/**
23-
* @var InvoiceCommentSender
23+
* @var InvoiceSender
2424
*/
25-
protected $invoiceCommentSender;
25+
protected $invoiceSender;
2626

2727
/**
2828
* @var ShipmentSender
@@ -42,19 +42,19 @@ class Save extends \Magento\Backend\App\Action
4242
/**
4343
* @param Action\Context $context
4444
* @param Registry $registry
45-
* @param InvoiceCommentSender $invoiceCommentSender
45+
* @param InvoiceSender $invoiceSender
4646
* @param ShipmentSender $shipmentSender
4747
* @param RedirectFactory $resultRedirectFactory
4848
*/
4949
public function __construct(
5050
Action\Context $context,
5151
Registry $registry,
52-
InvoiceCommentSender $invoiceCommentSender,
52+
InvoiceSender $invoiceSender,
5353
ShipmentSender $shipmentSender,
5454
RedirectFactory $resultRedirectFactory
5555
) {
5656
$this->registry = $registry;
57-
$this->invoiceCommentSender = $invoiceCommentSender;
57+
$this->invoiceSender = $invoiceSender;
5858
$this->shipmentSender = $shipmentSender;
5959
$this->resultRedirectFactory = $resultRedirectFactory;
6060
parent::__construct($context);
@@ -160,11 +160,10 @@ public function execute()
160160
);
161161
}
162162

163-
$invoice->register();
163+
$invoice->setCustomerNote($data['comment_text']);
164+
$invoice->setCustomerNoteNotify(isset($data['comment_customer_notify']));
164165

165-
if (!empty($data['send_email'])) {
166-
$invoice->setEmailSent(true);
167-
}
166+
$invoice->register();
168167

169168
$invoice->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
170169
$invoice->getOrder()->setIsInProcess(true);
@@ -180,7 +179,6 @@ public function execute()
180179
if (!empty($data['do_shipment']) || (int)$invoice->getOrder()->getForcedShipmentWithInvoice()) {
181180
$shipment = $this->_prepareShipment($invoice);
182181
if ($shipment) {
183-
$shipment->setEmailSent($invoice->getEmailSent());
184182
$transactionSave->addObject($shipment);
185183
}
186184
}
@@ -200,19 +198,19 @@ public function execute()
200198
}
201199

202200
// send invoice/shipment emails
203-
$comment = '';
204-
if (isset($data['comment_customer_notify'])) {
205-
$comment = $data['comment_text'];
206-
}
207201
try {
208-
$this->invoiceCommentSender->send($invoice, !empty($data['send_email']), $comment);
202+
if (!empty($data['send_email'])) {
203+
$this->invoiceSender->send($invoice);
204+
}
209205
} catch (\Exception $e) {
210206
$this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
211207
$this->messageManager->addError(__('We can\'t send the invoice email.'));
212208
}
213209
if ($shipment) {
214210
try {
215-
$this->shipmentSender->send($shipment, !empty($data['send_email']));
211+
if (!empty($data['send_email'])) {
212+
$this->shipmentSender->send($shipment);
213+
}
216214
} catch (\Exception $e) {
217215
$this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
218216
$this->messageManager->addError(__('We can\'t send the shipment.'));
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Sales\Model\Observer;
7+
8+
/**
9+
* Sales emails sending observer.
10+
*
11+
* Performs handling of cron jobs related to sending emails to customers
12+
* after creation/modification of Order, Invoice, Shipment or Creditmemo.
13+
*/
14+
class SendEmails
15+
{
16+
/**
17+
* Email sender model.
18+
*
19+
* @var \Magento\Sales\Model\Order\Email\Sender
20+
*/
21+
protected $emailSender;
22+
23+
/**
24+
* Entity resource model.
25+
*
26+
* @var \Magento\Sales\Model\Resource\Entity
27+
*/
28+
protected $entityResource;
29+
30+
/**
31+
* Entity collection model.
32+
*
33+
* @var \Magento\Sales\Model\Resource\Collection\AbstractCollection
34+
*/
35+
protected $entityCollection;
36+
37+
/**
38+
* Global configuration storage.
39+
*
40+
* @var \Magento\Framework\App\Config\ScopeConfigInterface
41+
*/
42+
protected $globalConfig;
43+
44+
/**
45+
* @param \Magento\Sales\Model\Order\Email\Sender $emailSender
46+
* @param \Magento\Sales\Model\Resource\Entity $entityResource
47+
* @param \Magento\Sales\Model\Resource\Collection\AbstractCollection $entityCollection
48+
* @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
49+
*/
50+
public function __construct(
51+
\Magento\Sales\Model\Order\Email\Sender $emailSender,
52+
\Magento\Sales\Model\Resource\Entity $entityResource,
53+
\Magento\Sales\Model\Resource\Collection\AbstractCollection $entityCollection,
54+
\Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
55+
) {
56+
$this->emailSender = $emailSender;
57+
$this->entityResource = $entityResource;
58+
$this->entityCollection = $entityCollection;
59+
$this->globalConfig = $globalConfig;
60+
}
61+
62+
/**
63+
* Handles asynchronous email sending during corresponding
64+
* cron job.
65+
*
66+
* Also method is used in the next events:
67+
*
68+
* - config_data_dev_grid_async_indexing_disabled
69+
*
70+
* Works only if asynchronous email sending is enabled
71+
* in global settings.
72+
*
73+
* @return void
74+
*/
75+
public function execute()
76+
{
77+
if ($this->globalConfig->getValue('path/to/value/async_emails')) {
78+
$this->entityCollection->addFieldToFilter('send_email', ['eq' => 1]);
79+
$this->entityCollection->addFieldToFilter('email_sent', ['null' => true]);
80+
81+
/** @var \Magento\Sales\Model\AbstractModel $item */
82+
foreach ($this->entityCollection->getItems() as $item) {
83+
if ($this->emailSender->send($item, true)) {
84+
$this->entityResource->save(
85+
$item->setEmailSent(true)
86+
);
87+
}
88+
}
89+
}
90+
}
91+
}

app/code/Magento/Sales/Model/Order.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
* @method bool hasForcedCanCreditmemo()
4646
* @method bool getIsInProcess()
4747
* @method \Magento\Customer\Model\Customer getCustomer()
48+
* @method \Magento\Sales\Model\Order setSendEmail(bool $value)
4849
* @SuppressWarnings(PHPMD.ExcessivePublicCount)
4950
* @SuppressWarnings(PHPMD.TooManyFields)
5051
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)

app/code/Magento/Sales/Model/Order/Creditmemo.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@
2121
* @method \Magento\Sales\Model\Resource\Order\Creditmemo _getResource()
2222
* @method \Magento\Sales\Model\Resource\Order\Creditmemo getResource()
2323
* @method \Magento\Sales\Model\Order\Creditmemo setCreatedAt(string $value)
24+
* @method \Magento\Sales\Model\Order\Invoice setSendEmail(bool $value)
25+
* @method \Magento\Sales\Model\Order\Invoice setCustomerNote(string $value)
26+
* @method string getCustomerNote()
27+
* @method \Magento\Sales\Model\Order\Invoice setCustomerNoteNotify(bool $value)
28+
* @method bool getCustomerNoteNotify()
2429
* @SuppressWarnings(PHPMD.ExcessivePublicCount)
2530
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
2631
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)

0 commit comments

Comments
 (0)