Skip to content

Commit b06194e

Browse files
committed
Merge remote-tracking branch '37553/fix-for-issue-37538' into 247beta3_jan
2 parents 3ec083c + 4cfd176 commit b06194e

File tree

2 files changed

+127
-9
lines changed

2 files changed

+127
-9
lines changed

app/code/Magento/Sales/Model/AdminOrder/Create.php

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,9 @@ public function getCustomerGroupId()
826826
* @return $this
827827
* @throws \Magento\Framework\Exception\LocalizedException
828828
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
829+
* @SuppressWarnings(PHPMD.NPathComplexity)
829830
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
831+
* phpcs:disable Generic.Metrics.NestingLevel
830832
*/
831833
public function moveQuoteItem($item, $moveTo, $qty)
832834
{
@@ -886,11 +888,20 @@ public function moveQuoteItem($item, $moveTo, $qty)
886888
);
887889
}
888890

889-
$cartItem = $cart->addProduct($product, $info);
890-
if (is_string($cartItem)) {
891-
throw new \Magento\Framework\Exception\LocalizedException(__($cartItem));
891+
$cartItems = $cart->getAllVisibleItems();
892+
$cartItemsToRestore = [];
893+
foreach ($cartItems as $cartItem) {
894+
$cartItemsToRestore[$cartItem->getItemId()] = $cartItem->getItemId();
895+
}
896+
$canBeRestored = $this->restoreTransferredItem('cart', $cartItemsToRestore);
897+
898+
if (!$canBeRestored) {
899+
$cartItem = $cart->addProduct($product, $info);
900+
if (is_string($cartItem)) {
901+
throw new \Magento\Framework\Exception\LocalizedException(__($cartItem));
902+
}
903+
$cartItem->setPrice($item->getProduct()->getPrice());
892904
}
893-
$cartItem->setPrice($item->getProduct()->getPrice());
894905
$this->_needCollectCart = true;
895906
$removeItem = true;
896907
}
@@ -933,7 +944,11 @@ public function moveQuoteItem($item, $moveTo, $qty)
933944
)->setStoreId(
934945
$this->getSession()->getStoreId()
935946
);
936-
$wishlist->addNewItem($item->getProduct(), $info);
947+
$wishlistItems = $wishlist->getItemCollection()->getItems();
948+
$canBeRestored = $this->restoreTransferredItem('wishlist', $wishlistItems);
949+
if (!$canBeRestored) {
950+
$wishlist->addNewItem($item->getProduct(), $info);
951+
}
937952
$removeItem = true;
938953
}
939954
break;
@@ -980,8 +995,8 @@ public function applySidebarData($data)
980995
if ($item) {
981996
$this->moveQuoteItem($item, 'order', $qty);
982997
$transferredItems = $this->_session->getTransferredItems() ?? [];
983-
$transferredItems['cart'][] = $itemId;
984-
$this->_session->setTransferredItems($transferredItems) ;
998+
$transferredItems['cart'][$itemId] = $itemId;
999+
$this->_session->setTransferredItems($transferredItems);
9851000
}
9861001
}
9871002
}
@@ -996,8 +1011,8 @@ public function applySidebarData($data)
9961011
if ($item->getId()) {
9971012
$this->addProduct($item->getProduct(), $item->getBuyRequest()->toArray());
9981013
$transferredItems = $this->_session->getTransferredItems() ?? [];
999-
$transferredItems['wishlist'][] = $itemId;
1000-
$this->_session->setTransferredItems($transferredItems) ;
1014+
$transferredItems['wishlist'][$itemId] = $itemId;
1015+
$this->_session->setTransferredItems($transferredItems);
10011016
}
10021017
}
10031018
}
@@ -2094,6 +2109,30 @@ private function removeTransferredItems(): void
20942109
}
20952110
}
20962111

2112+
/**
2113+
* Restore items that were transferred from ordered items to their original sources (cart, wishlist, ...)
2114+
*
2115+
* @param string $area
2116+
* @param \Magento\Quote\Model\Quote\Item[]|\Magento\Wishlist\Model\Item[] $items
2117+
* @return bool
2118+
*/
2119+
private function restoreTransferredItem(string $area, array $items): bool
2120+
{
2121+
$transferredItems = $this->_session->getTransferredItems() ?? [];
2122+
if (!isset($transferredItems[$area])) {
2123+
return false;
2124+
}
2125+
$itemToRestore = array_intersect_key($items, $transferredItems[$area]);
2126+
$itemToRestoreId = array_key_first($itemToRestore);
2127+
2128+
if ($itemToRestoreId) {
2129+
unset($transferredItems[$area][$itemToRestoreId]);
2130+
$this->_session->setTransferredItems($transferredItems);
2131+
return true;
2132+
}
2133+
return false;
2134+
}
2135+
20972136
/**
20982137
* Validate quote data before order creation
20992138
*
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="AdminCreateOrderToVerifyMoveItemToOrderItemsAndBackToCartTest">
12+
<annotations>
13+
<stories value="Create Order in Admin and move an item from an order to the cart and back "/>
14+
<title value="Create Order to verify moving an item from an order to the cart and back works correctly test"/>
15+
<description value="Create Order to verify moving an item from an order to the cart and back works correctly test"/>
16+
<severity value="AVERAGE"/>
17+
<testCaseId value="https://github.com/magento/magento2/issues/37538"/>
18+
<group value="sales"/>
19+
</annotations>
20+
<before>
21+
<actionGroup ref="AdminLoginActionGroup" stepKey="LoginAsAdmin"/>
22+
<createData entity="Simple_US_Customer" stepKey="createCustomer"/>
23+
<createData entity="SimpleProduct2" stepKey="createSimpleProduct">
24+
<field key="price">10</field>
25+
</createData>
26+
<createData entity="SalesRuleSpecificCouponWithFixedDiscount" stepKey="createCartPriceRule"/>
27+
<createData entity="SimpleSalesRuleCoupon" stepKey="createCouponForCartPriceRule">
28+
<requiredEntity createDataKey="createCartPriceRule"/>
29+
</createData>
30+
<magentoCLI
31+
command="config:set {{EnablePaymentBankTransferConfigData.path}} {{EnablePaymentBankTransferConfigData.value}}"
32+
stepKey="enableBankTransferPayment"/>
33+
<magentoCLI command="config:set {{EnableFlatRateConfigData.path}} {{EnableFlatRateConfigData.value}}"
34+
stepKey="enableFlatRate"/>
35+
</before>
36+
<after>
37+
<magentoCLI
38+
command="config:set {{DisablePaymentBankTransferConfigData.path}} {{DisablePaymentBankTransferConfigData.value}}"
39+
stepKey="disableBankTransferPayment"/>
40+
<deleteData createDataKey="createCartPriceRule" stepKey="deleteCartPriceRule"/>
41+
<actionGroup ref="StorefrontCustomerLogoutActionGroup" stepKey="logoutCustomer" />
42+
<deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
43+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
44+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
45+
</after>
46+
<actionGroup ref="AdminNavigateToNewOrderPageExistingCustomerActionGroup" stepKey="goToCreateOrderPage">
47+
<argument name="customer" value="$$createCustomer$$"/>
48+
</actionGroup>
49+
50+
<!-- Add product to order -->
51+
<actionGroup ref="AddSimpleProductToOrderActionGroup" stepKey="addProductToOrder">
52+
<argument name="product" value="$$createSimpleProduct$$"/>
53+
</actionGroup>
54+
55+
<!-- move the product to SHOPPING CART -->
56+
<actionGroup ref="AdminSelectValueFromActionSelectInItemsOrderedGridOnCreateOrderPageActionGroup" stepKey="moveSimpleProductToShoppingCart">
57+
<argument name="product" value="$$createSimpleProduct$$"/>
58+
<argument name="option" value="Move to Shopping Cart"/>
59+
</actionGroup>
60+
<actionGroup ref="AdminClickUpdateItemsAndQuantitesOnCreateOrderPageActionGroup" stepKey="clickOnUpdateItemsAndQuantity"/>
61+
<comment userInput="Comment is added to preserve the step key for backward compatibility" stepKey="waitForAdminCreateOrderWishListSectionPageLoad"/>
62+
63+
<!-- Again move product to Order. -->
64+
<checkOption selector="{{AdminCustomerActivitiesShoppingCartSection.addToOrder}}" stepKey="checkOptionAddToOrder"/>
65+
<actionGroup ref="AdminClickUpdateChangesOnCreateOrderPageActionGroup" stepKey="clickUpdateChangesBtn"/>
66+
<comment userInput="Comment is added to preserve the step key for backward compatibility" stepKey="waitForOrderUpdating"/>
67+
68+
<!-- Put the items back into the cart. -->
69+
<actionGroup ref="AdminSelectValueFromActionSelectInItemsOrderedGridOnCreateOrderPageActionGroup" stepKey="moveSimpleProductToShoppingCartBack">
70+
<argument name="product" value="$$createSimpleProduct$$"/>
71+
<argument name="option" value="Move to Shopping Cart"/>
72+
</actionGroup>
73+
<actionGroup ref="AdminClickUpdateItemsAndQuantitesOnCreateOrderPageActionGroup" stepKey="clickOnUpdateItemsAndQuantity2"/>
74+
<comment userInput="Comment is added to preserve the step key for backward compatibility" stepKey="waitForAdminCreateOrderWishListSectionPageLoad2"/>
75+
76+
<!-- Check to see if the item exists in the cart -->
77+
<see selector="{{AdminCreateOrderShoppingCartSection.shoppingCartBlock}}" userInput="$$createSimpleProduct.name$$" stepKey="seeProductInShoppingCart"/>
78+
</test>
79+
</tests>

0 commit comments

Comments
 (0)