|
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