Skip to content

Commit 718533f

Browse files
author
Dmytro Yushkin
committed
MAGETWO-57846: [Github] New Order Status config in payment method is useless #5860
1 parent 5c4ee14 commit 718533f

File tree

10 files changed

+813
-375
lines changed

10 files changed

+813
-375
lines changed

app/code/Magento/Sales/Model/Order/Payment/State/AuthorizeCommand.php

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,28 @@
55
*/
66
namespace Magento\Sales\Model\Order\Payment\State;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Sales\Api\Data\OrderInterface;
910
use Magento\Sales\Api\Data\OrderPaymentInterface;
1011
use Magento\Sales\Model\Order;
11-
use Magento\Sales\Model\Order\Payment;
12+
use Magento\Sales\Model\Order\StatusResolver;
1213

13-
/**
14-
* Class AuthorizeCommand
15-
*/
1614
class AuthorizeCommand implements CommandInterface
1715
{
16+
/**
17+
* @var StatusResolver
18+
*/
19+
private $statusResolver;
20+
21+
/**
22+
* @param StatusResolver|null $statusResolver
23+
*/
24+
public function __construct(StatusResolver $statusResolver = null)
25+
{
26+
$this->statusResolver = $statusResolver
27+
? : ObjectManager::getInstance()->get(StatusResolver::class);
28+
}
29+
1830
/**
1931
* @param OrderPaymentInterface $payment
2032
* @param string|float $amount
@@ -24,27 +36,33 @@ class AuthorizeCommand implements CommandInterface
2436
public function execute(OrderPaymentInterface $payment, $amount, OrderInterface $order)
2537
{
2638
$state = Order::STATE_PROCESSING;
27-
$status = false;
28-
$formattedAmount = $order->getBaseCurrency()->formatTxt($amount);
39+
$status = null;
40+
$message = 'Authorized amount of %1.';
2941

3042
if ($payment->getIsTransactionPending()) {
3143
$state = Order::STATE_PAYMENT_REVIEW;
3244
$message = 'We will authorize %1 after the payment is approved at the payment gateway.';
33-
} else {
34-
$message = 'Authorized amount of %1.';
3545
}
3646

3747
if ($payment->getIsFraudDetected()) {
3848
$state = Order::STATE_PAYMENT_REVIEW;
3949
$status = Order::STATUS_FRAUD;
4050
$message .= ' Order is suspended as its authorizing amount %1 is suspected to be fraudulent.';
4151
}
42-
$this->setOrderStateAndStatus($order, $status, $state);
4352

44-
return __($message, $formattedAmount);
53+
if (!isset($status)) {
54+
$status = $this->statusResolver->getOrderStatusByState($order, $state);
55+
}
56+
57+
$order->setState($state);
58+
$order->setStatus($status);
59+
60+
return __($message, $order->getBaseCurrency()->formatTxt($amount));
4561
}
4662

4763
/**
64+
* @deprecated Replaced by a StatusResolver class call.
65+
*
4866
* @param Order $order
4967
* @param string $status
5068
* @param string $state

app/code/Magento/Sales/Model/Order/Payment/State/CaptureCommand.php

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,54 +5,70 @@
55
*/
66
namespace Magento\Sales\Model\Order\Payment\State;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Sales\Api\Data\OrderInterface;
910
use Magento\Sales\Api\Data\OrderPaymentInterface;
10-
use Magento\Sales\Model\Order as SalesOrder;
11+
use Magento\Sales\Model\Order;
12+
use Magento\Sales\Model\Order\StatusResolver;
1113

12-
/**
13-
* Class CaptureCommand
14-
*/
1514
class CaptureCommand implements CommandInterface
1615
{
1716
/**
18-
* Run command
19-
*
17+
* @var StatusResolver
18+
*/
19+
private $statusResolver;
20+
21+
/**
22+
* @param StatusResolver|null $statusResolver
23+
*/
24+
public function __construct(StatusResolver $statusResolver = null)
25+
{
26+
$this->statusResolver = $statusResolver
27+
? : ObjectManager::getInstance()->get(StatusResolver::class);
28+
}
29+
30+
/**
2031
* @param OrderPaymentInterface $payment
21-
* @param string|float|int $amount
32+
* @param string|float $amount
2233
* @param OrderInterface $order
23-
* @return string
34+
* @return \Magento\Framework\Phrase
2435
*/
2536
public function execute(OrderPaymentInterface $payment, $amount, OrderInterface $order)
2637
{
27-
$state = SalesOrder::STATE_PROCESSING;
28-
$status = false;
29-
$formattedAmount = $order->getBaseCurrency()->formatTxt($amount);
38+
$state = Order::STATE_PROCESSING;
39+
$status = null;
40+
$message = 'Captured amount of %1 online.';
3041

3142
if ($payment->getIsTransactionPending()) {
32-
$state = SalesOrder::STATE_PAYMENT_REVIEW;
43+
$state = Order::STATE_PAYMENT_REVIEW;
3344
$message = 'An amount of %1 will be captured after being approved at the payment gateway.';
34-
} else {
35-
// normal online capture: invoice is marked as "paid"
36-
$message = 'Captured amount of %1 online.';
3745
}
3846

3947
if ($payment->getIsFraudDetected()) {
40-
$state = SalesOrder::STATE_PAYMENT_REVIEW;
41-
$status = SalesOrder::STATUS_FRAUD;
48+
$state = Order::STATE_PAYMENT_REVIEW;
49+
$status = Order::STATUS_FRAUD;
4250
$message .= ' Order is suspended as its capturing amount %1 is suspected to be fraudulent.';
4351
}
44-
$this->setOrderStateAndStatus($order, $status, $state);
4552

46-
return __($message, $formattedAmount);
53+
if (!isset($status)) {
54+
$status = $this->statusResolver->getOrderStatusByState($order, $state);
55+
}
56+
57+
$order->setState($state);
58+
$order->setStatus($status);
59+
60+
return __($message, $order->getBaseCurrency()->formatTxt($amount));
4761
}
4862

4963
/**
50-
* @param SalesOrder $order
64+
* @deprecated Replaced by a StatusResolver class call.
65+
*
66+
* @param Order $order
5167
* @param string $status
5268
* @param string $state
5369
* @return void
5470
*/
55-
protected function setOrderStateAndStatus(SalesOrder $order, $status, $state)
71+
protected function setOrderStateAndStatus(Order $order, $status, $state)
5672
{
5773
if (!$status) {
5874
$status = $order->getConfig()->getStateDefaultStatus($state);

app/code/Magento/Sales/Model/Order/Payment/State/OrderCommand.php

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,64 @@
55
*/
66
namespace Magento\Sales\Model\Order\Payment\State;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Sales\Api\Data\OrderInterface;
910
use Magento\Sales\Api\Data\OrderPaymentInterface;
1011
use Magento\Sales\Model\Order;
12+
use Magento\Sales\Model\Order\StatusResolver;
1113

12-
/**
13-
* Class Order
14-
*/
1514
class OrderCommand implements CommandInterface
1615
{
1716
/**
18-
* Run command
19-
*
17+
* @var StatusResolver
18+
*/
19+
private $statusResolver;
20+
21+
/**
22+
* @param StatusResolver|null $statusResolver
23+
*/
24+
public function __construct(StatusResolver $statusResolver = null)
25+
{
26+
$this->statusResolver = $statusResolver
27+
? : ObjectManager::getInstance()->get(StatusResolver::class);
28+
}
29+
30+
/**
2031
* @param OrderPaymentInterface $payment
21-
* @param string|float|int $amount
32+
* @param string|float $amount
2233
* @param OrderInterface $order
2334
* @return string
2435
*/
2536
public function execute(OrderPaymentInterface $payment, $amount, OrderInterface $order)
2637
{
2738
$state = Order::STATE_PROCESSING;
28-
$status = false;
29-
$formattedAmount = $order->getBaseCurrency()->formatTxt($amount);
39+
$status = null;
40+
$message = 'Ordered amount of %1';
41+
3042
if ($payment->getIsTransactionPending()) {
31-
$message = __(
32-
'The order amount of %1 is pending approval on the payment gateway.',
33-
$formattedAmount
34-
);
3543
$state = Order::STATE_PAYMENT_REVIEW;
36-
if ($payment->getIsFraudDetected()) {
37-
$status = Order::STATUS_FRAUD;
38-
}
39-
} else {
40-
$message = __('Ordered amount of %1', $formattedAmount);
44+
$message = 'The order amount of %1 is pending approval on the payment gateway.';
45+
}
46+
47+
if ($payment->getIsFraudDetected()) {
48+
$state = Order::STATE_PAYMENT_REVIEW;
49+
$status = Order::STATUS_FRAUD;
50+
$message = 'The order amount of %1 is pending approval on the payment gateway.';
4151
}
42-
$this->setOrderStateAndStatus($order, $status, $state);
4352

44-
return $message;
53+
if (!isset($status)) {
54+
$status = $this->statusResolver->getOrderStatusByState($order, $state);
55+
}
56+
57+
$order->setState($state);
58+
$order->setStatus($status);
59+
60+
return __($message, $order->getBaseCurrency()->formatTxt($amount));
4561
}
4662

4763
/**
64+
* @deprecated Replaced by a StatusResolver class call.
65+
*
4866
* @param Order $order
4967
* @param string $status
5068
* @param string $state

app/code/Magento/Sales/Model/Order/Payment/State/RegisterCaptureNotificationCommand.php

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,64 @@
55
*/
66
namespace Magento\Sales\Model\Order\Payment\State;
77

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Sales\Api\Data\OrderInterface;
910
use Magento\Sales\Api\Data\OrderPaymentInterface;
1011
use Magento\Sales\Model\Order;
11-
use Magento\Sales\Model\Order\Payment;
12+
use Magento\Sales\Model\Order\StatusResolver;
1213

1314
class RegisterCaptureNotificationCommand implements CommandInterface
1415
{
1516
/**
16-
* Run command
17-
*
17+
* @var StatusResolver
18+
*/
19+
private $statusResolver;
20+
21+
/**
22+
* @param StatusResolver|null $statusResolver
23+
*/
24+
public function __construct(StatusResolver $statusResolver = null)
25+
{
26+
$this->statusResolver = $statusResolver
27+
? : ObjectManager::getInstance()->get(StatusResolver::class);
28+
}
29+
30+
/**
1831
* @param OrderPaymentInterface $payment
1932
* @param string|float|int $amount
2033
* @param OrderInterface $order
2134
* @return string
2235
*/
2336
public function execute(OrderPaymentInterface $payment, $amount, OrderInterface $order)
2437
{
25-
/**
26-
* @var $payment Payment
27-
*/
2838
$state = Order::STATE_PROCESSING;
29-
$status = false;
30-
$formattedAmount = $order->getBaseCurrency()->formatTxt($amount);
39+
$status = null;
40+
$message = 'Registered notification about captured amount of %1.';
41+
3142
if ($payment->getIsTransactionPending()) {
32-
$message = __(
33-
'An amount of %1 will be captured after being approved at the payment gateway.',
34-
$formattedAmount
35-
);
3643
$state = Order::STATE_PAYMENT_REVIEW;
37-
} else {
38-
$message = __('Registered notification about captured amount of %1.', $formattedAmount);
44+
$message = 'An amount of %1 will be captured after being approved at the payment gateway.';
3945
}
46+
4047
if ($payment->getIsFraudDetected()) {
4148
$state = Order::STATE_PAYMENT_REVIEW;
42-
$message = __(
43-
'Order is suspended as its capture amount %1 is suspected to be fraudulent.',
44-
$formattedAmount
45-
);
4649
$status = Order::STATUS_FRAUD;
50+
$message = 'Order is suspended as its capture amount %1 is suspected to be fraudulent.';
4751
}
48-
$this->setOrderStateAndStatus($order, $status, $state);
4952

50-
return $message;
53+
if (!isset($status)) {
54+
$status = $this->statusResolver->getOrderStatusByState($order, $state);
55+
}
56+
57+
$order->setState($state);
58+
$order->setStatus($status);
59+
60+
return __($message, $order->getBaseCurrency()->formatTxt($amount));
5161
}
5262

5363
/**
64+
* @deprecated Replaced by a StatusResolver class call.
65+
*
5466
* @param Order $order
5567
* @param string $status
5668
* @param string $state
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Sales\Model\Order;
7+
8+
use Magento\Sales\Api\Data\OrderInterface;
9+
10+
class StatusResolver
11+
{
12+
/**
13+
* @param OrderInterface $order
14+
* @param string $state
15+
* @return string
16+
*/
17+
public function getOrderStatusByState(OrderInterface $order, $state)
18+
{
19+
$paymentMethodOrderStatus = $order->getPayment()->getMethodInstance()
20+
->getConfigData('order_status');
21+
22+
return array_key_exists($paymentMethodOrderStatus, $order->getConfig()->getStateStatuses($state))
23+
? $paymentMethodOrderStatus
24+
: $order->getConfig()->getStateDefaultStatus($state);
25+
}
26+
}

0 commit comments

Comments
 (0)