Skip to content

Commit f989d67

Browse files
committed
MAGETWO-89079: Different order statuses with zero value and none zero statuses
- Order States fix - Tests fix
1 parent 56b9c6c commit f989d67

File tree

14 files changed

+212
-160
lines changed

14 files changed

+212
-160
lines changed

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Magento\Framework\Locale\ResolverInterface;
1313
use Magento\Framework\Pricing\PriceCurrencyInterface;
1414
use Magento\Sales\Api\Data\OrderInterface;
15+
use Magento\Sales\Api\Data\OrderItemInterface;
1516
use Magento\Sales\Api\Data\OrderStatusHistoryInterface;
1617
use Magento\Sales\Model\Order\Payment;
1718
use Magento\Sales\Model\Order\ProductOption;
@@ -750,7 +751,7 @@ public function canComment()
750751
}
751752

752753
/**
753-
* Retrieve order shipment availability
754+
* Retrieve order shipment availability.
754755
*
755756
* @return bool
756757
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
@@ -770,13 +771,29 @@ public function canShip()
770771
}
771772

772773
foreach ($this->getAllItems() as $item) {
773-
if ($item->getQtyToShip() > 0 && !$item->getIsVirtual() && !$item->getLockedDoShip()) {
774+
if ($item->getQtyToShip() > 0
775+
&& !$item->getIsVirtual()
776+
&& !$item->getLockedDoShip()
777+
&& !$this->isRefunded($item)
778+
) {
774779
return true;
775780
}
776781
}
782+
777783
return false;
778784
}
779785

786+
/**
787+
* Check if item is refunded.
788+
*
789+
* @param OrderItemInterface $item
790+
* @return bool
791+
*/
792+
private function isRefunded(OrderItemInterface $item): bool
793+
{
794+
return $item->getQtyRefunded() == $item->getQtyOrdered();
795+
}
796+
780797
/**
781798
* Retrieve order edit availability
782799
*

app/code/Magento/Sales/Model/ResourceModel/Order/Handler/State.php

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
use Magento\Sales\Model\Order;
1010

1111
/**
12-
* Class State
12+
* Class to check order State.
1313
*/
1414
class State
1515
{
1616
/**
17-
* Check order status before save
17+
* Check order status and adjust the status before save.
1818
*
1919
* @param Order $order
2020
* @return $this
@@ -23,25 +23,23 @@ class State
2323
*/
2424
public function check(Order $order)
2525
{
26-
if (!$order->isCanceled() && !$order->canUnhold() && !$order->canInvoice() && !$order->canShip()) {
27-
if (0 == $order->getBaseGrandTotal() || $order->canCreditmemo()) {
28-
if ($order->getState() !== Order::STATE_COMPLETE) {
29-
$order->setState(Order::STATE_COMPLETE)
30-
->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_COMPLETE));
31-
}
32-
} elseif ((float)$order->getTotalRefunded()
33-
|| !$order->getTotalRefunded() && $order->hasForcedCanCreditmemo()
34-
) {
35-
if ($order->getState() !== Order::STATE_CLOSED) {
36-
$order->setState(Order::STATE_CLOSED)
37-
->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_CLOSED));
38-
}
39-
}
40-
}
41-
if ($order->getState() == Order::STATE_NEW && $order->getIsInProcess()) {
26+
$currentState = $order->getState();
27+
if ($currentState == Order::STATE_NEW && $order->getIsInProcess()) {
4228
$order->setState(Order::STATE_PROCESSING)
4329
->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_PROCESSING));
30+
$currentState = Order::STATE_PROCESSING;
31+
}
32+
33+
if (!$order->isCanceled() && !$order->canUnhold() && !$order->canInvoice()) {
34+
if (in_array($currentState, [Order::STATE_PROCESSING, Order::STATE_COMPLETE]) && !$order->canCreditmemo()) {
35+
$order->setState(Order::STATE_CLOSED)
36+
->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_CLOSED));
37+
} elseif ($currentState === Order::STATE_PROCESSING && !$order->canShip()) {
38+
$order->setState(Order::STATE_COMPLETE)
39+
->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_COMPLETE));
40+
}
4441
}
42+
4543
return $this;
4644
}
4745
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd">
11+
<entity name="CONST" type="CONST">
12+
<data key="Complete">Complete</data>
13+
<data key="Closed">Closed</data>
14+
<data key="Pending">Pending</data>
15+
<data key="Processing">Processing</data>
16+
</entity>
17+
</entities>
18+
19+
20+

app/code/Magento/Sales/Test/Mftf/Test/AdminAbleToShipPartiallyInvoicedItemsTest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
<grabFromCurrentUrl regex="~/order_id/(\d+)/~" stepKey="grabOrderId"/>
6060
<seeInCurrentUrl url="{{AdminOrderDetailsPage.url('$grabOrderId')}}" after="grabOrderId" stepKey="seeViewOrderPage"/>
6161
<see selector="{{AdminMessagesSection.success}}" userInput="You created the order." after="seeViewOrderPage" stepKey="seeSuccessMessage"/>
62+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Pending}}" stepKey="seeOrderPending"/>
6263
<grabTextFrom selector="|Order # (\d+)|" after="seeSuccessMessage" stepKey="getOrderId"/>
6364
<scrollTo selector="{{AdminOrderItemsOrderedSection.qtyColumn}}" after="getOrderId" stepKey="scrollToItemsOrdered"/>
6465
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Ordered 10" after="scrollToItemsOrdered" stepKey="seeQtyOfItemsOrdered"/>
@@ -79,6 +80,7 @@
7980
<waitForPageLoad stepKey="waitForInvoiceToSubmit1"/>
8081
<!--Invoice created successfully-->
8182
<see selector="{{AdminMessagesSection.success}}" userInput="The invoice has been created." stepKey="seeInvoiceSuccessMessage"/>
83+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Processing}}" stepKey="seeOrderProcessing1"/>
8284
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems"/>
8385
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Invoiced 5" stepKey="see5itemsInvoiced"/>
8486
<scrollTo selector="{{AdminHeaderSection.pageTitle}}" stepKey="scrollToTopOfPage"/>
@@ -98,6 +100,7 @@
98100
<waitForLoadingMaskToDisappear stepKey="waitForShipmentToSubmit"/>
99101
<!--Verify shipment created successfully-->
100102
<see selector="{{AdminMessagesSection.success}}" userInput="The shipment has been created." after="submitShipment" stepKey="successfullShipmentCreation"/>
103+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Processing}}" stepKey="seeOrderProcessing2"/>
101104
<see selector="{{AdminHeaderSection.pageTitle}}" userInput="$getOrderId" stepKey="seeOrderIdInPageTitleAfterShip"/>
102105
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems1"/>
103106
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Shipped 5" stepKey="see5itemsShipped"/>
@@ -117,6 +120,7 @@
117120
<click selector="{{AdminCreditMemoTotalSection.submitRefundOffline}}" stepKey="submitRefundOffline"/>
118121
<!--Verify Credit Memo created successfully-->
119122
<see selector="{{AdminMessagesSection.success}}" userInput="You created the credit memo." after="submitRefundOffline" stepKey="seeCreditMemoSuccessMsg"/>
123+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Processing}}" stepKey="seeOrderProcessing3"/>
120124
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems2"/>
121125
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Refunded 5" stepKey="see5itemsRefunded"/>
122126
<scrollTo selector="{{AdminHeaderSection.pageTitle}}" stepKey="scrollToTopOfPage2"/>
@@ -138,6 +142,7 @@
138142
<waitForPageLoad stepKey="waitForInvoiceToSubmit2"/>
139143
<!--Invoice created successfully for the rest of the ordered items-->
140144
<see selector="{{AdminMessagesSection.success}}" userInput="The invoice has been created." stepKey="seeInvoiceSuccessMessage2"/>
145+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Processing}}" stepKey="seeOrderProcessing4"/>
141146
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems3"/>
142147
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Invoiced 10" stepKey="see10itemsInvoiced"/>
143148
<scrollTo selector="{{AdminHeaderSection.pageTitle}}" stepKey="scrollToTopOfPage3"/>
@@ -156,6 +161,7 @@
156161
<!--Submit Shipment-->
157162
<click selector="{{AdminShipmentMainActionsSection.submitShipment}}" after="fillRestOfItemsToShip" stepKey="submitShipment2" />
158163
<see selector="{{AdminMessagesSection.success}}" userInput="The shipment has been created." after="submitShipment2" stepKey="successfullyCreatedShipment"/>
164+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Complete}}" stepKey="seeOrderComplete"/>
159165

160166
<!--Verify Items Status and Shipped Qty in the Items Ordered section-->
161167
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToItemsOrdered2"/>

app/code/Magento/Sales/Test/Mftf/Test/CreditMemoTotalAfterShippingDiscountTest.xml renamed to app/code/Magento/Sales/Test/Mftf/Test/AdminCreditMemoTotalAfterShippingDiscountTest.xml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
-->
88

99
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10-
xsi:noNamespaceSchemaLocation="../../../../../../../dev/tests/acceptance/vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd">
11-
<test name="CreditMemoTotalAfterShippingDiscountTest">
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminCreditMemoTotalAfterShippingDiscountTest">
1212
<annotations>
1313
<features value="Credit memo"/>
1414
<title value="Verify credit memo grand total after shipping discount is applied via Cart Price Rule"/>
@@ -97,7 +97,9 @@
9797
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMask4"/>
9898

9999
<!-- Create invoice -->
100-
<click selector="{{OrdersGridSection.firstRow}}" stepKey="clickOrderRow"/>
100+
<click selector="{{AdminDataGridTableSection.firstRow}}" stepKey="clickOrderRow"/>
101+
<waitForPageLoad stepKey="waitForPageLoad"/>
102+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Pending}}" stepKey="seeOrderPending"/>
101103
<click selector="{{AdminOrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoiceButton"/>
102104
<see selector="{{AdminHeaderSection.pageTitle}}" userInput="New Invoice" stepKey="seeNewInvoiceInPageTitle" after="clickInvoiceButton"/>
103105

@@ -115,6 +117,7 @@
115117
<grabTextFrom selector="{{AdminInvoiceTotalSection.grandTotal}}" stepKey="grabInvoiceGrandTotal" after="seeCorrectGrandTotal"/>
116118
<click selector="{{AdminInvoiceMainActionsSection.submitInvoice}}" stepKey="clickSubmitInvoice"/>
117119
<see selector="{{OrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." stepKey="seeSuccessMessage1"/>
120+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.Processing}}" stepKey="seeOrderProcessing"/>
118121

119122
<!--Create Credit Memo-->
120123
<comment userInput="Admin creates credit memo" stepKey="createCreditMemoComment"/>

0 commit comments

Comments
 (0)