Skip to content

Commit 71f27ab

Browse files
authored
Merge pull request #36 from cmdotcom-plugins/test
Merge CMP-185 to main branch
2 parents ed3da56 + 31218df commit 71f27ab

File tree

10 files changed

+173
-0
lines changed

10 files changed

+173
-0
lines changed

Api/Config/ConfigInterface.php

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ interface ConfigInterface
2626
public const XML_PATH_GENERAL_MODE = 'cm_payments/general/mode';
2727
public const XML_PATH_GENERAL_UPDATE_ON_RESULT_PAGE = 'cm_payments/general/update_on_result_page';
2828
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';
2930
public const XML_PATH_GENERAL_CUSTOM_SUCCESS_URL = 'cm_payments/general/custom_success_url';
3031
public const XML_PATH_GENERAL_CUSTOM_ERROR_URL = 'cm_payments/general/custom_error_url';
3132
public const XML_PATH_GENERAL_SHIPPING_FEE_NAME = 'cm_payments/general/shipping_fee_name';
@@ -250,6 +251,11 @@ public function isUpdateOnResultPageEnabled(): ?bool;
250251
*/
251252
public function isAvailablePaymentMethodsCheckEnabled(): ?bool;
252253

254+
/**
255+
* @return bool
256+
*/
257+
public function isSendOrderEmailForPaid(): bool;
258+
253259
/**
254260
* @return string
255261
*/

Config/Config.php

+13
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,19 @@ public function isAvailablePaymentMethodsCheckEnabled(): ?bool
8181
);
8282
}
8383

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+
8497
/**
8598
* @inheritDoc
8699
*/
+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
}

Plugin/AdjustOrderEmailSendFlag.php

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
}

etc/adminhtml/system.xml

+8
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@
4444
payment methods you want to show to the customer.]]></comment>
4545
<config_path>payment/cm_payments_methods/profile</config_path>
4646
</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>
4755
<field id="update_on_result_page" translate="label" type="select" sortOrder="2" showInDefault="1"
4856
showInWebsite="1" showInStore="1" canRestore="1">
4957
<label>Update order status on result page</label>

etc/config.xml

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<live_merchant_key backend_model="Magento\Config\Model\Config\Backend\Encrypted" />
1717
<live_merchant_password backend_model="Magento\Config\Model\Config\Backend\Encrypted" />
1818
<update_on_result_page>1</update_on_result_page>
19+
<send_order_email_for_paid>0</send_order_email_for_paid>
1920
<check_available_methods>1</check_available_methods>
2021
<shipping_fee_name>CM Shipping Fee</shipping_fee_name>
2122
<adjustment_fee_name>CM Adjustment Fee</adjustment_fee_name>

etc/frontend/di.xml

+4
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@
3636
<argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
3737
</arguments>
3838
</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>
3943
</config>

etc/frontend/events.xml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
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>

etc/webapi_rest/di.xml

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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>

etc/webapi_rest/events.xml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
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>

0 commit comments

Comments
 (0)