Skip to content

Commit ba910b8

Browse files
committed
MC-33893: 2.3.4 Invoice always sent (if exist) when order placed.
1 parent 4559910 commit ba910b8

File tree

6 files changed

+105
-20
lines changed

6 files changed

+105
-20
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Quote\Observer;
7+
8+
use Magento\Framework\Event\Observer;
9+
use Magento\Framework\Event\ObserverInterface;
10+
use Magento\Quote\Model\Quote;
11+
use Magento\Sales\Model\Order;
12+
use Magento\Sales\Model\Order\Email\Container\InvoiceIdentity;
13+
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
14+
use Psr\Log\LoggerInterface;
15+
16+
/**
17+
* Class responsive for sending invoice emails when order created through storefront.
18+
*/
19+
class SendInvoiceEmailObserver implements ObserverInterface
20+
{
21+
/**
22+
* @var LoggerInterface
23+
*/
24+
private $logger;
25+
26+
/**
27+
* @var InvoiceSender
28+
*/
29+
private $invoiceSender;
30+
31+
/**
32+
* @var InvoiceIdentity
33+
*/
34+
private $invoiceIdentity;
35+
36+
/**
37+
* @param LoggerInterface $logger
38+
* @param InvoiceSender $invoiceSender
39+
* @param InvoiceIdentity $invoiceIdentity
40+
*/
41+
public function __construct(
42+
LoggerInterface $logger,
43+
InvoiceSender $invoiceSender,
44+
InvoiceIdentity $invoiceIdentity
45+
) {
46+
$this->logger = $logger;
47+
$this->invoiceSender = $invoiceSender;
48+
$this->invoiceIdentity = $invoiceIdentity;
49+
}
50+
51+
/**
52+
* Send invoice email if allowed.
53+
*
54+
* @param Observer $observer
55+
*
56+
* @return void
57+
*/
58+
public function execute(Observer $observer)
59+
{
60+
if (!$this->isInvoiceEmailAllowed()) {
61+
return;
62+
}
63+
64+
/** @var Quote $quote */
65+
$quote = $observer->getEvent()->getQuote();
66+
/** @var Order $order */
67+
$order = $observer->getEvent()->getOrder();
68+
69+
/**
70+
* a flag to set that there will be redirect to third party after confirmation
71+
*/
72+
$redirectUrl = $quote->getPayment()->getOrderPlaceRedirectUrl();
73+
if (!$redirectUrl && $order->getCanSendNewEmailFlag()) {
74+
try {
75+
$invoice = current($order->getInvoiceCollection()->getItems());
76+
if ($invoice) {
77+
$this->invoiceSender->send($invoice);
78+
}
79+
} catch (\Exception $e) {
80+
$this->logger->critical($e);
81+
}
82+
}
83+
}
84+
85+
/**
86+
* Is invoice email sending enabled
87+
*
88+
* @return bool
89+
*/
90+
private function isInvoiceEmailAllowed(): bool
91+
{
92+
return $this->invoiceIdentity->isEnabled();
93+
}
94+
}

app/code/Magento/Quote/Observer/SubmitObserver.php

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99
use Magento\Framework\Event\ObserverInterface;
1010
use Magento\Quote\Model\Quote;
1111
use Magento\Sales\Model\Order;
12-
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
1312
use Magento\Sales\Model\Order\Email\Sender\OrderSender;
1413
use Psr\Log\LoggerInterface;
1514

1615
/**
17-
* Class responsive for sending order and invoice emails when it's created through storefront.
16+
* Class responsive for sending order emails when it's created through storefront.
1817
*/
1918
class SubmitObserver implements ObserverInterface
2019
{
@@ -28,28 +27,20 @@ class SubmitObserver implements ObserverInterface
2827
*/
2928
private $orderSender;
3029

31-
/**
32-
* @var InvoiceSender
33-
*/
34-
private $invoiceSender;
35-
3630
/**
3731
* @param LoggerInterface $logger
3832
* @param OrderSender $orderSender
39-
* @param InvoiceSender $invoiceSender
4033
*/
4134
public function __construct(
4235
LoggerInterface $logger,
43-
OrderSender $orderSender,
44-
InvoiceSender $invoiceSender
36+
OrderSender $orderSender
4537
) {
4638
$this->logger = $logger;
4739
$this->orderSender = $orderSender;
48-
$this->invoiceSender = $invoiceSender;
4940
}
5041

5142
/**
52-
* Send order and invoice email.
43+
* Send order email.
5344
*
5445
* @param Observer $observer
5546
*
@@ -69,10 +60,6 @@ public function execute(Observer $observer)
6960
if (!$redirectUrl && $order->getCanSendNewEmailFlag()) {
7061
try {
7162
$this->orderSender->send($order);
72-
$invoice = current($order->getInvoiceCollection()->getItems());
73-
if ($invoice) {
74-
$this->invoiceSender->send($invoice);
75-
}
7663
} catch (\Exception $e) {
7764
$this->logger->critical($e);
7865
}

app/code/Magento/Quote/etc/frontend/events.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
99
<event name="sales_model_service_quote_submit_success">
10-
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver" />
10+
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver"/>
11+
<observer name="sendInvoiceEmail" instance="Magento\Quote\Observer\SendInvoiceEmailObserver"/>
1112
</event>
1213
</config>

app/code/Magento/Quote/etc/webapi_rest/events.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
99
<event name="sales_model_service_quote_submit_success">
10-
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver" />
10+
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver"/>
11+
<observer name="sendInvoiceEmail" instance="Magento\Quote\Observer\SendInvoiceEmailObserver"/>
1112
</event>
1213
</config>

app/code/Magento/Quote/etc/webapi_soap/events.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
99
<event name="sales_model_service_quote_submit_success">
10-
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver" />
10+
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver"/>
11+
<observer name="sendInvoiceEmail" instance="Magento\Quote\Observer\SendInvoiceEmailObserver"/>
1112
</event>
1213
</config>

app/code/Magento/QuoteGraphQl/etc/graphql/events.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
99
<event name="sales_model_service_quote_submit_success">
10-
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver" />
10+
<observer name="sendEmail" instance="Magento\Quote\Observer\SubmitObserver"/>
11+
<observer name="sendInvoiceEmail" instance="Magento\Quote\Observer\SendInvoiceEmailObserver"/>
1112
</event>
1213
</config>

0 commit comments

Comments
 (0)