File tree 10 files changed +173
-0
lines changed
10 files changed +173
-0
lines changed Original file line number Diff line number Diff line change @@ -26,6 +26,7 @@ interface ConfigInterface
26
26
public const XML_PATH_GENERAL_MODE = 'cm_payments/general/mode ' ;
27
27
public const XML_PATH_GENERAL_UPDATE_ON_RESULT_PAGE = 'cm_payments/general/update_on_result_page ' ;
28
28
public const XML_PATH_GENERAL_CHECK_AVAILABLE_PAYMENT_METHODS = 'cm_payments/general/check_available_methods ' ;
29
+ public const XML_PATH_GENERAL_SEND_ORDER_EMAIL_FOR_PAID = 'cm_payments/general/send_order_email_for_paid ' ;
29
30
public const XML_PATH_GENERAL_CUSTOM_SUCCESS_URL = 'cm_payments/general/custom_success_url ' ;
30
31
public const XML_PATH_GENERAL_CUSTOM_ERROR_URL = 'cm_payments/general/custom_error_url ' ;
31
32
public const XML_PATH_GENERAL_SHIPPING_FEE_NAME = 'cm_payments/general/shipping_fee_name ' ;
@@ -250,6 +251,11 @@ public function isUpdateOnResultPageEnabled(): ?bool;
250
251
*/
251
252
public function isAvailablePaymentMethodsCheckEnabled (): ?bool ;
252
253
254
+ /**
255
+ * @return bool
256
+ */
257
+ public function isSendOrderEmailForPaid (): bool ;
258
+
253
259
/**
254
260
* @return string
255
261
*/
Original file line number Diff line number Diff line change @@ -81,6 +81,19 @@ public function isAvailablePaymentMethodsCheckEnabled(): ?bool
81
81
);
82
82
}
83
83
84
+ /**
85
+ * @inheritDoc
86
+ */
87
+ public function isSendOrderEmailForPaid (): bool
88
+ {
89
+ return $ this ->getConfig (
90
+ self ::XML_PATH_GENERAL_SEND_ORDER_EMAIL_FOR_PAID ,
91
+ ScopeInterface::SCOPE_STORES ,
92
+ (string )$ this ->storeManager ->getStore ()->getId (),
93
+ true
94
+ );
95
+ }
96
+
84
97
/**
85
98
* @inheritDoc
86
99
*/
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace CM \Payments \Observer ;
6
+
7
+ use CM \Payments \Config \Config ;
8
+ use CM \Payments \Model \ConfigProvider ;
9
+ use Magento \Framework \Event \ObserverInterface ;
10
+ use Magento \Framework \Event \Observer ;
11
+ use Magento \Sales \Model \Order \Email \Sender \OrderSender ;
12
+ use Magento \Sales \Model \Order \Invoice ;
13
+
14
+ class SendOrderEmailAfterInvoicePay implements ObserverInterface
15
+ {
16
+ /**
17
+ * @var Config
18
+ */
19
+ private $ config ;
20
+
21
+ /**
22
+ * @var OrderSender
23
+ */
24
+ private $ orderSender ;
25
+
26
+ /**
27
+ * @param Config $config
28
+ * @param OrderSender $orderSender
29
+ */
30
+ public function __construct (
31
+ Config $ config ,
32
+ OrderSender $ orderSender
33
+ ) {
34
+ $ this ->config = $ config ;
35
+ $ this ->orderSender = $ orderSender ;
36
+ }
37
+
38
+ /**
39
+ * Observer for sales_order_invoice_pay
40
+ *
41
+ * @param Observer $observer
42
+ * @return void
43
+ * @throws \Exception
44
+ */
45
+ public function execute (Observer $ observer )
46
+ {
47
+ if (!$ this ->config ->isSendOrderEmailForPaid ()) {
48
+ return ;
49
+ }
50
+
51
+ $ event = $ observer ->getEvent ();
52
+ /** @var Invoice $invoice */
53
+ $ invoice = $ event ->getInvoice ();
54
+ $ order = $ invoice ->getOrder ();
55
+
56
+ if (\strpos ($ order ->getPayment ()->getMethod (), ConfigProvider::CODE ) !== false ) {
57
+ $ this ->orderSender ->send ($ order );
58
+ }
59
+ }
60
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types=1 );
4
+
5
+ namespace CM \Payments \Plugin ;
6
+
7
+ use CM \Payments \Config \Config ;
8
+ use CM \Payments \Model \ConfigProvider ;
9
+ use Magento \Framework \Event \Observer ;
10
+ use Magento \Quote \Observer \SubmitObserver ;
11
+ use Magento \Sales \Model \Order ;
12
+
13
+ /**
14
+ * Send admin order confirmation
15
+ */
16
+ class AdjustOrderEmailSendFlag
17
+ {
18
+ /**
19
+ * @var Config
20
+ */
21
+ private $ config ;
22
+
23
+ /**
24
+ * @param Config $config
25
+ */
26
+ public function __construct (Config $ config )
27
+ {
28
+ $ this ->config = $ config ;
29
+ }
30
+
31
+ /**
32
+ * Adjusts order flag to not send email for CM Payments orders which are not yet paid
33
+ *
34
+ * @param SubmitObserver $subject
35
+ * @param Observer $observer
36
+ * @return Observer[]
37
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
38
+ */
39
+ public function beforeExecute (SubmitObserver $ subject , Observer $ observer ): array
40
+ {
41
+ if (!$ this ->config ->isSendOrderEmailForPaid ()) {
42
+ return [$ observer ];
43
+ }
44
+
45
+ /** @var Order $order */
46
+ $ order = $ observer ->getEvent ()->getOrder ();
47
+ /** @var Order\Payment $payment */
48
+ $ payment = $ order ->getPayment ();
49
+
50
+ if (\strpos ($ payment ->getMethod (), ConfigProvider::CODE ) !== false ) {
51
+ $ order ->setCanSendNewEmailFlag (false );
52
+ }
53
+
54
+ return [$ observer ];
55
+ }
56
+ }
Original file line number Diff line number Diff line change 44
44
payment methods you want to show to the customer.]]> </comment >
45
45
<config_path >payment/cm_payments_methods/profile</config_path >
46
46
</field >
47
+ <field id =" send_order_email_for_paid" translate =" label comment" type =" select" sortOrder =" 10"
48
+ showInDefault =" 1" showInWebsite =" 1" showInStore =" 1" >
49
+ <label >Send new order email for only paid orders</label >
50
+ <comment ><![CDATA[ This will disable default Magento order sending right after order is placed
51
+ (for only CM Payments) and instead will send email when invoice is paid]]> </comment >
52
+ <source_model >Magento\Config\Model\Config\Source\Yesno</source_model >
53
+ <config_path >cm_payments/general/send_order_email_for_paid</config_path >
54
+ </field >
47
55
<field id =" update_on_result_page" translate =" label" type =" select" sortOrder =" 2" showInDefault =" 1"
48
56
showInWebsite =" 1" showInStore =" 1" canRestore =" 1" >
49
57
<label >Update order status on result page</label >
Original file line number Diff line number Diff line change 16
16
<live_merchant_key backend_model =" Magento\Config\Model\Config\Backend\Encrypted" />
17
17
<live_merchant_password backend_model =" Magento\Config\Model\Config\Backend\Encrypted" />
18
18
<update_on_result_page >1</update_on_result_page >
19
+ <send_order_email_for_paid >0</send_order_email_for_paid >
19
20
<check_available_methods >1</check_available_methods >
20
21
<shipping_fee_name >CM Shipping Fee</shipping_fee_name >
21
22
<adjustment_fee_name >CM Adjustment Fee</adjustment_fee_name >
Original file line number Diff line number Diff line change 36
36
<argument name =" checkoutSession" xsi : type =" object" >Magento\Checkout\Model\Session\Proxy</argument >
37
37
</arguments >
38
38
</type >
39
+
40
+ <type name =" Magento\Quote\Observer\SubmitObserver" >
41
+ <plugin name =" adjust_order_email_send_flag" type =" CM\Payments\Plugin\AdjustOrderEmailSendFlag" sortOrder =" 1" disabled =" false" />
42
+ </type >
39
43
</config >
Original file line number Diff line number Diff line change
1
+ <?xml version =" 1.0" ?>
2
+ <config xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi : noNamespaceSchemaLocation =" urn:magento:framework:Event/etc/events.xsd" >
4
+ <event name =" sales_order_invoice_pay" >
5
+ <observer name =" send_order_email_after_invoice_pay" instance =" CM\Payments\Observer\SendOrderEmailAfterInvoicePay" />
6
+ </event >
7
+ </config >
Original file line number Diff line number Diff line change
1
+ <?xml version =" 1.0" ?>
2
+ <!--
3
+ ~ Copyright © CM.com. All rights reserved.
4
+ ~ See LICENSE.txt for license details.
5
+ -->
6
+
7
+ <config xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance" xsi : noNamespaceSchemaLocation =" urn:magento:framework:ObjectManager/etc/config.xsd" >
8
+ <type name =" Magento\Quote\Observer\SubmitObserver" >
9
+ <plugin name =" adjust_order_email_send_flag_rest" type =" CM\Payments\Plugin\AdjustOrderEmailSendFlag" sortOrder =" 1" disabled =" false" />
10
+ </type >
11
+ </config >
Original file line number Diff line number Diff line change
1
+ <?xml version =" 1.0" ?>
2
+ <config xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi : noNamespaceSchemaLocation =" urn:magento:framework:Event/etc/events.xsd" >
4
+ <event name =" sales_order_invoice_pay" >
5
+ <observer name =" send_order_email_after_invoice_pay_rest" instance =" CM\Payments\Observer\SendOrderEmailAfterInvoicePay" />
6
+ </event >
7
+ </config >
You can’t perform that action at this time.
0 commit comments