|
20 | 20 | use Magento\Store\Model\StoreManagerInterface;
|
21 | 21 | use Psr\Log\LoggerInterface;
|
22 | 22 | use Magento\Quote\Model\Quote;
|
| 23 | +use Magento\Framework\App\Request\Http as HttpRequest; |
23 | 24 |
|
24 | 25 | /**
|
25 | 26 | * Order create model
|
@@ -264,6 +265,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
|
264 | 265 | */
|
265 | 266 | private $orderRepositoryInterface;
|
266 | 267 |
|
| 268 | + /** |
| 269 | + * @var HttpRequest |
| 270 | + */ |
| 271 | + private $request; |
| 272 | + |
267 | 273 | /**
|
268 | 274 | * @param \Magento\Framework\ObjectManagerInterface $objectManager
|
269 | 275 | * @param \Magento\Framework\Event\ManagerInterface $eventManager
|
@@ -298,6 +304,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\
|
298 | 304 | * @param StoreManagerInterface $storeManager
|
299 | 305 | * @param CustomAttributeListInterface|null $customAttributeList
|
300 | 306 | * @param OrderRepositoryInterface|null $orderRepositoryInterface
|
| 307 | + * @param HttpRequest|null $request |
301 | 308 | * @SuppressWarnings(PHPMD.ExcessiveParameterList)
|
302 | 309 | */
|
303 | 310 | public function __construct(
|
@@ -333,7 +340,8 @@ public function __construct(
|
333 | 340 | ExtensibleDataObjectConverter $dataObjectConverter = null,
|
334 | 341 | StoreManagerInterface $storeManager = null,
|
335 | 342 | CustomAttributeListInterface $customAttributeList = null,
|
336 |
| - OrderRepositoryInterface $orderRepositoryInterface = null |
| 343 | + OrderRepositoryInterface $orderRepositoryInterface = null, |
| 344 | + HttpRequest $request = null |
337 | 345 | ) {
|
338 | 346 | $this->_objectManager = $objectManager;
|
339 | 347 | $this->_eventManager = $eventManager;
|
@@ -372,6 +380,8 @@ public function __construct(
|
372 | 380 | ->get(CustomAttributeListInterface::class);
|
373 | 381 | $this->orderRepositoryInterface = $orderRepositoryInterface ?: ObjectManager::getInstance()
|
374 | 382 | ->get(OrderRepositoryInterface::class);
|
| 383 | + $this->request = $request ?: ObjectManager::getInstance() |
| 384 | + ->get(HttpRequest::class); |
375 | 385 | }
|
376 | 386 |
|
377 | 387 | /**
|
@@ -893,7 +903,7 @@ public function moveQuoteItem($item, $moveTo, $qty)
|
893 | 903 | $cartItem->setPrice($item->getProduct()->getPrice());
|
894 | 904 | $this->_needCollectCart = true;
|
895 | 905 | $removeItem = true;
|
896 |
| - $this->removeCartTransferredItems(); |
| 906 | + $this->removeCartTransferredItemsAndUpdateQty($cartItem, $item->getId()); |
897 | 907 | }
|
898 | 908 | break;
|
899 | 909 | case 'wishlist':
|
@@ -2274,16 +2284,31 @@ private function formattedOptions(\Magento\Catalog\Model\Product $product, $buyR
|
2274 | 2284 | }
|
2275 | 2285 |
|
2276 | 2286 | /**
|
2277 |
| - * Remove cart from transferred items. |
| 2287 | + * Remove cart from transferred items and update the qty. |
2278 | 2288 | *
|
| 2289 | + * @param int|null|Item $cartItem |
| 2290 | + * @param int $itemId |
2279 | 2291 | * @return void
|
2280 | 2292 | */
|
2281 |
| - private function removeCartTransferredItems() |
| 2293 | + private function removeCartTransferredItemsAndUpdateQty(int|null|Item $cartItem, int $itemId) |
2282 | 2294 | {
|
2283 | 2295 | $removeCartTransferredItems = $this->getSession()->getTransferredItems() ?? [];
|
2284 | 2296 | if (isset($removeCartTransferredItems['cart'])) {
|
2285 |
| - unset($removeCartTransferredItems['cart']); |
| 2297 | + $removeTransferredItemKey = array_search($cartItem->getId(), $removeCartTransferredItems['cart']); |
| 2298 | + if ($removeCartTransferredItems['cart'][$removeTransferredItemKey]) { |
| 2299 | + $cartItem->clearMessage(); |
| 2300 | + $cartItem->setHasError(false); |
| 2301 | + if (isset($this->request->get('item')[$itemId]['qty'])) { |
| 2302 | + $qty = $this->request->get('item')[$itemId]['qty']; |
| 2303 | + } |
| 2304 | + $cartItem->setQty($qty); |
| 2305 | + |
| 2306 | + if ($cartItem->getHasError()) { |
| 2307 | + throw new LocalizedException(__($cartItem->getMessage())); |
| 2308 | + } |
| 2309 | + unset($removeCartTransferredItems['cart'][$removeTransferredItemKey]); |
| 2310 | + } |
| 2311 | + $this->getSession()->setTransferredItems($removeCartTransferredItems); |
2286 | 2312 | }
|
2287 |
| - $this->getSession()->setTransferredItems($removeCartTransferredItems); |
2288 | 2313 | }
|
2289 | 2314 | }
|
0 commit comments