Skip to content

Commit 4052051

Browse files
committed
MAGETWO-54658: Order status change after Invoice creation through API
1 parent 5236b37 commit 4052051

File tree

1 file changed

+41
-10
lines changed

1 file changed

+41
-10
lines changed

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

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,43 @@
1313
*/
1414
class StateResolver implements OrderStateResolverInterface
1515
{
16+
17+
/**
18+
* Check is order in complete state
19+
*
20+
* @param OrderInterface $order
21+
* @return bool
22+
*/
23+
private function checkIsOrderComplete(OrderInterface $order)
24+
{
25+
/** @var $order Order|OrderInterface */
26+
if (0 == $order->getBaseGrandTotal() || $order->canCreditmemo()) {
27+
if ($order->getState() !== Order::STATE_COMPLETE) {
28+
return true;
29+
}
30+
}
31+
return false;
32+
}
33+
34+
/**
35+
* Check is order in cancel state
36+
*
37+
* @param OrderInterface $order
38+
* @param array $arguments
39+
* @return bool
40+
*/
41+
private function checkIsOrderClosed(OrderInterface $order, $arguments)
42+
{
43+
/** @var $order Order|OrderInterface */
44+
$forceCreditmemo = in_array(self::FORCED_CREDITMEMO, $arguments);
45+
if (floatval($order->getTotalRefunded()) || !$order->getTotalRefunded() && $forceCreditmemo) {
46+
if ($order->getState() !== Order::STATE_CLOSED) {
47+
return true;
48+
}
49+
}
50+
return false;
51+
}
52+
1653
/**
1754
* @param OrderInterface $order
1855
* @param array $arguments
@@ -23,16 +60,10 @@ public function getStateForOrder(OrderInterface $order, array $arguments = [])
2360
/** @var $order Order|OrderInterface */
2461
$orderState = $order->getState() === Order::STATE_PROCESSING ? Order::STATE_PROCESSING : Order::STATE_NEW;
2562
if (!$order->isCanceled() && !$order->canUnhold() && !$order->canInvoice() && !$order->canShip()) {
26-
if (0 == $order->getBaseGrandTotal() || $order->canCreditmemo()) {
27-
if ($order->getState() !== Order::STATE_COMPLETE) {
28-
$orderState = Order::STATE_COMPLETE;
29-
}
30-
} elseif (floatval($order->getTotalRefunded())
31-
|| !$order->getTotalRefunded() && in_array(self::FORCED_CREDITMEMO, $arguments)
32-
) {
33-
if ($order->getState() !== Order::STATE_CLOSED) {
34-
$orderState = Order::STATE_CLOSED;
35-
}
63+
if ($this->checkIsOrderComplete($order)) {
64+
$orderState = Order::STATE_COMPLETE;
65+
} elseif ($this->checkIsOrderClosed($order, $arguments)) {
66+
$orderState = Order::STATE_CLOSED;
3667
}
3768
}
3869
if ($order->getState() == Order::STATE_NEW && in_array(self::IN_PROGRESS, $arguments)) {

0 commit comments

Comments
 (0)