|
11 | 11 | use Magento\Customer\Model\Metadata\Form as CustomerForm;
|
12 | 12 | use Magento\Framework\Api\ExtensibleDataObjectConverter;
|
13 | 13 | use Magento\Framework\App\ObjectManager;
|
| 14 | +use Magento\Framework\Exception\LocalizedException; |
14 | 15 | use Magento\Quote\Model\Quote\Address;
|
15 | 16 | use Magento\Quote\Model\Quote\Address\CustomAttributeListInterface;
|
16 | 17 | use Magento\Quote\Model\Quote\Item;
|
|
20 | 21 | use Magento\Store\Model\StoreManagerInterface;
|
21 | 22 | use Psr\Log\LoggerInterface;
|
22 | 23 | use Magento\Quote\Model\Quote;
|
| 24 | +use Magento\Framework\App\Request\Http as HttpRequest; |
23 | 25 |
|
24 | 26 | /**
|
25 | 27 | * Order create model
|
@@ -264,6 +266,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
|
264 | 266 | */
|
265 | 267 | private $orderRepositoryInterface;
|
266 | 268 |
|
| 269 | + /** |
| 270 | + * @var HttpRequest |
| 271 | + */ |
| 272 | + private $request; |
| 273 | + |
267 | 274 | /**
|
268 | 275 | * @param \Magento\Framework\ObjectManagerInterface $objectManager
|
269 | 276 | * @param \Magento\Framework\Event\ManagerInterface $eventManager
|
@@ -298,6 +305,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
|
298 | 305 | * @param StoreManagerInterface $storeManager
|
299 | 306 | * @param CustomAttributeListInterface|null $customAttributeList
|
300 | 307 | * @param OrderRepositoryInterface|null $orderRepositoryInterface
|
| 308 | + * @param HttpRequest|null $request |
301 | 309 | * @SuppressWarnings(PHPMD.ExcessiveParameterList)
|
302 | 310 | */
|
303 | 311 | public function __construct(
|
@@ -333,7 +341,8 @@ public function __construct(
|
333 | 341 | ExtensibleDataObjectConverter $dataObjectConverter = null,
|
334 | 342 | StoreManagerInterface $storeManager = null,
|
335 | 343 | CustomAttributeListInterface $customAttributeList = null,
|
336 |
| - OrderRepositoryInterface $orderRepositoryInterface = null |
| 344 | + OrderRepositoryInterface $orderRepositoryInterface = null, |
| 345 | + HttpRequest $request = null |
337 | 346 | ) {
|
338 | 347 | $this->_objectManager = $objectManager;
|
339 | 348 | $this->_eventManager = $eventManager;
|
@@ -372,6 +381,8 @@ public function __construct(
|
372 | 381 | ->get(CustomAttributeListInterface::class);
|
373 | 382 | $this->orderRepositoryInterface = $orderRepositoryInterface ?: ObjectManager::getInstance()
|
374 | 383 | ->get(OrderRepositoryInterface::class);
|
| 384 | + $this->request = $request ?: ObjectManager::getInstance() |
| 385 | + ->get(HttpRequest::class); |
375 | 386 | }
|
376 | 387 |
|
377 | 388 | /**
|
@@ -895,15 +906,16 @@ public function moveQuoteItem($item, $moveTo, $qty)
|
895 | 906 | }
|
896 | 907 | $canBeRestored = $this->restoreTransferredItem('cart', $cartItemsToRestore);
|
897 | 908 |
|
| 909 | + $cartItem = $cart->addProduct($product, $info); |
898 | 910 | if (!$canBeRestored) {
|
899 |
| - $cartItem = $cart->addProduct($product, $info); |
900 | 911 | if (is_string($cartItem)) {
|
901 | 912 | throw new \Magento\Framework\Exception\LocalizedException(__($cartItem));
|
902 | 913 | }
|
903 | 914 | $cartItem->setPrice($item->getProduct()->getPrice());
|
904 | 915 | }
|
905 | 916 | $this->_needCollectCart = true;
|
906 | 917 | $removeItem = true;
|
| 918 | + $this->removeCartTransferredItemsAndUpdateQty($cartItem, $item->getId()); |
907 | 919 | }
|
908 | 920 | break;
|
909 | 921 | case 'wishlist':
|
@@ -2310,4 +2322,33 @@ private function formattedOptions(\Magento\Catalog\Model\Product $product, $buyR
|
2310 | 2322 | }
|
2311 | 2323 | return $this;
|
2312 | 2324 | }
|
| 2325 | + |
| 2326 | + /** |
| 2327 | + * Remove cart from transferred items and update the qty. |
| 2328 | + * |
| 2329 | + * @param int|null|Item $cartItem |
| 2330 | + * @param int $itemId |
| 2331 | + * @return void |
| 2332 | + */ |
| 2333 | + private function removeCartTransferredItemsAndUpdateQty(int|null|Item $cartItem, int $itemId) |
| 2334 | + { |
| 2335 | + $removeCartTransferredItems = $this->getSession()->getTransferredItems() ?? []; |
| 2336 | + if (isset($removeCartTransferredItems['cart'])) { |
| 2337 | + $removeTransferredItemKey = array_search($cartItem->getId(), $removeCartTransferredItems['cart']); |
| 2338 | + if ($removeCartTransferredItems['cart'][$removeTransferredItemKey]) { |
| 2339 | + $cartItem->clearMessage(); |
| 2340 | + $cartItem->setHasError(false); |
| 2341 | + if (isset($this->request->get('item')[$itemId]['qty'])) { |
| 2342 | + $qty = $this->request->get('item')[$itemId]['qty']; |
| 2343 | + $cartItem->setQty($qty); |
| 2344 | + } |
| 2345 | + |
| 2346 | + if ($cartItem->getHasError()) { |
| 2347 | + throw new LocalizedException(__($cartItem->getMessage())); |
| 2348 | + } |
| 2349 | + unset($removeCartTransferredItems['cart'][$removeTransferredItemKey]); |
| 2350 | + } |
| 2351 | + $this->getSession()->setTransferredItems($removeCartTransferredItems); |
| 2352 | + } |
| 2353 | + } |
2313 | 2354 | }
|
0 commit comments