Skip to content

Commit 345e288

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-89079' into 2.2-develop-pr69
2 parents c0ec315 + 092835b commit 345e288

File tree

16 files changed

+227
-162
lines changed

16 files changed

+227
-162
lines changed

app/code/Magento/Quote/Api/Data/CartInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,14 +223,14 @@ public function setBillingAddress(\Magento\Quote\Api\Data\AddressInterface $bill
223223
/**
224224
* Returns the reserved order ID for the cart.
225225
*
226-
* @return int|null Reserved order ID. Otherwise, null.
226+
* @return string|null Reserved order ID. Otherwise, null.
227227
*/
228228
public function getReservedOrderId();
229229

230230
/**
231231
* Sets the reserved order ID for the cart.
232232
*
233-
* @param int $reservedOrderId
233+
* @param string $reservedOrderId
234234
* @return $this
235235
*/
236236
public function setReservedOrderId($reservedOrderId);

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="orderStatusComplete">Complete</data>
13+
<data key="orderStatusClosed">Closed</data>
14+
<data key="orderStatusPending">Pending</data>
15+
<data key="orderStatusProcessing">Processing</data>
16+
</entity>
17+
</entities>
18+
19+
20+

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
<severity value="CRITICAL"/>
1515
<testCaseId value="MAGETWO-95524"/>
1616
<group value="sales"/>
17+
<skip>
18+
<issueId value="MAGETWO-97664"/>
19+
</skip>
1720
</annotations>
1821
<before>
1922
<createData entity="_defaultCategory" stepKey="createCategory"/>
@@ -59,6 +62,7 @@
5962
<grabFromCurrentUrl regex="~/order_id/(\d+)/~" stepKey="grabOrderId"/>
6063
<seeInCurrentUrl url="{{AdminOrderDetailsPage.url('$grabOrderId')}}" after="grabOrderId" stepKey="seeViewOrderPage"/>
6164
<see selector="{{AdminMessagesSection.success}}" userInput="You created the order." after="seeViewOrderPage" stepKey="seeSuccessMessage"/>
65+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.orderStatusPending}}" stepKey="seeOrderPending"/>
6266
<grabTextFrom selector="|Order # (\d+)|" after="seeSuccessMessage" stepKey="getOrderId"/>
6367
<scrollTo selector="{{AdminOrderItemsOrderedSection.qtyColumn}}" after="getOrderId" stepKey="scrollToItemsOrdered"/>
6468
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Ordered 10" after="scrollToItemsOrdered" stepKey="seeQtyOfItemsOrdered"/>
@@ -79,6 +83,7 @@
7983
<waitForPageLoad stepKey="waitForInvoiceToSubmit1"/>
8084
<!--Invoice created successfully-->
8185
<see selector="{{AdminMessagesSection.success}}" userInput="The invoice has been created." stepKey="seeInvoiceSuccessMessage"/>
86+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.orderStatusProcessing}}" stepKey="seeOrderProcessing1"/>
8287
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems"/>
8388
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Invoiced 5" stepKey="see5itemsInvoiced"/>
8489
<scrollTo selector="{{AdminHeaderSection.pageTitle}}" stepKey="scrollToTopOfPage"/>
@@ -98,6 +103,7 @@
98103
<waitForLoadingMaskToDisappear stepKey="waitForShipmentToSubmit"/>
99104
<!--Verify shipment created successfully-->
100105
<see selector="{{AdminMessagesSection.success}}" userInput="The shipment has been created." after="submitShipment" stepKey="successfullShipmentCreation"/>
106+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.orderStatusProcessing}}" stepKey="seeOrderProcessing2"/>
101107
<see selector="{{AdminHeaderSection.pageTitle}}" userInput="$getOrderId" stepKey="seeOrderIdInPageTitleAfterShip"/>
102108
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems1"/>
103109
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Shipped 5" stepKey="see5itemsShipped"/>
@@ -117,6 +123,7 @@
117123
<click selector="{{AdminCreditMemoTotalSection.submitRefundOffline}}" stepKey="submitRefundOffline"/>
118124
<!--Verify Credit Memo created successfully-->
119125
<see selector="{{AdminMessagesSection.success}}" userInput="You created the credit memo." after="submitRefundOffline" stepKey="seeCreditMemoSuccessMsg"/>
126+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.orderStatusProcessing}}" stepKey="seeOrderProcessing3"/>
120127
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems2"/>
121128
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Refunded 5" stepKey="see5itemsRefunded"/>
122129
<scrollTo selector="{{AdminHeaderSection.pageTitle}}" stepKey="scrollToTopOfPage2"/>
@@ -138,6 +145,7 @@
138145
<waitForPageLoad stepKey="waitForInvoiceToSubmit2"/>
139146
<!--Invoice created successfully for the rest of the ordered items-->
140147
<see selector="{{AdminMessagesSection.success}}" userInput="The invoice has been created." stepKey="seeInvoiceSuccessMessage2"/>
148+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.orderStatusProcessing}}" stepKey="seeOrderProcessing4"/>
141149
<scrollTo selector="{{AdminOrderItemsOrderedSection.itemStatus('1')}}" stepKey="scrollToOrderItems3"/>
142150
<see selector="{{AdminOrderItemsOrderedSection.itemQty('1')}}" userInput="Invoiced 10" stepKey="see10itemsInvoiced"/>
143151
<scrollTo selector="{{AdminHeaderSection.pageTitle}}" stepKey="scrollToTopOfPage3"/>
@@ -156,6 +164,7 @@
156164
<!--Submit Shipment-->
157165
<click selector="{{AdminShipmentMainActionsSection.submitShipment}}" after="fillRestOfItemsToShip" stepKey="submitShipment2" />
158166
<see selector="{{AdminMessagesSection.success}}" userInput="The shipment has been created." after="submitShipment2" stepKey="successfullyCreatedShipment"/>
167+
<see selector="{{AdminOrderDetailsInformationSection.orderStatus}}" userInput="{{CONST.orderStatusComplete}}" stepKey="seeOrderComplete"/>
159168

160169
<!--Verify Items Status and Shipped Qty in the Items Ordered section-->
161170
<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.orderStatusPending}}" 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.orderStatusProcessing}}" stepKey="seeOrderProcessing"/>
118121

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

0 commit comments

Comments
 (0)