Skip to content

Commit 5c5c62d

Browse files
committed
ACP2E-2174: allow qty change for cart items without errors
1 parent 867d074 commit 5c5c62d

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

app/code/Magento/Checkout/Controller/Cart/UpdateItemQty.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,12 @@ public function execute()
129129
private function updateItemQuantity(Item $item, float $qty)
130130
{
131131
if ($qty > 0) {
132-
$item->clearMessage();
133-
$item->setHasError(false);
134-
$item->setQty($qty);
135-
136132
if ($item->getHasError()) {
137133
throw new LocalizedException(__($item->getMessage()));
134+
} else {
135+
$item->clearMessage();
136+
$item->setHasError(false);
137+
$item->setQty($qty);
138138
}
139139
}
140140
}

app/code/Magento/Checkout/Controller/Cart/UpdatePost.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ protected function _updateShoppingCart()
8383
$this->cart->updateItems($cartData)->save();
8484
}
8585
} catch (\Magento\Framework\Exception\LocalizedException $e) {
86+
$this->cart->save();
8687
$this->messageManager->addErrorMessage(
8788
$this->_objectManager->get(\Magento\Framework\Escaper::class)->escapeHtml($e->getMessage())
8889
);

app/code/Magento/Checkout/Model/Cart.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,7 @@ public function updateItems($data)
522522
);
523523

524524
$qtyRecalculatedFlag = false;
525+
$deferredErrors = [];
525526
foreach ($data as $itemId => $itemInfo) {
526527
$item = $this->getQuote()->getItemById($itemId);
527528
if (!$item) {
@@ -535,12 +536,13 @@ public function updateItems($data)
535536

536537
$qty = isset($itemInfo['qty']) ? (double)$itemInfo['qty'] : false;
537538
if ($qty > 0) {
538-
$item->clearMessage();
539-
$item->setHasError(false);
540-
$item->setQty($qty);
541-
542539
if ($item->getHasError()) {
543-
throw new \Magento\Framework\Exception\LocalizedException(__($item->getMessage()));
540+
$deferredErrors[$item->getId()] = __($item->getMessage());
541+
continue;
542+
} else {
543+
$item->clearMessage();
544+
$item->setHasError(false);
545+
$item->setQty($qty);
544546
}
545547

546548
if (isset($itemInfo['before_suggest_qty']) && $itemInfo['before_suggest_qty'] != $qty) {
@@ -564,6 +566,10 @@ public function updateItems($data)
564566
['cart' => $this, 'info' => $infoDataObject]
565567
);
566568

569+
if (count($deferredErrors)) {
570+
throw new \Magento\Framework\Exception\LocalizedException(current($deferredErrors));
571+
}
572+
567573
return $this;
568574
}
569575

0 commit comments

Comments
 (0)