Skip to content

Commit ae31731

Browse files
committed
MAGETWO-83169: Loaded quote items collection contains removed product items
1 parent 0483421 commit ae31731

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

app/code/Magento/Quote/Model/QuoteManagement.php

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -412,17 +412,24 @@ public function submit(QuoteEntity $quote, $orderData = [])
412412
*/
413413
protected function resolveItems(QuoteEntity $quote)
414414
{
415-
$quoteItems = [];
416-
foreach ($quote->getAllItems() as $quoteItem) {
417-
/** @var \Magento\Quote\Model\ResourceModel\Quote\Item $quoteItem */
418-
$quoteItems[$quoteItem->getId()] = $quoteItem;
419-
}
420415
$orderItems = [];
421-
foreach ($quoteItems as $quoteItem) {
422-
$parentItem = (isset($orderItems[$quoteItem->getParentItemId()])) ?
423-
$orderItems[$quoteItem->getParentItemId()] : null;
424-
$orderItems[$quoteItem->getId()] =
425-
$this->quoteItemToOrderItem->convert($quoteItem, ['parent_item' => $parentItem]);
416+
foreach ($quote->getAllItems() as $quoteItem) {
417+
$itemId = $quoteItem->getId();
418+
419+
if (!empty($orderItems[$itemId])) {
420+
continue;
421+
}
422+
423+
$parentItemId = $quoteItem->getParentItemId();
424+
/** @var \Magento\Quote\Model\ResourceModel\Quote\Item $parentItem */
425+
if ($parentItemId && !isset($orderItems[$parentItemId])) {
426+
$orderItems[$parentItemId] = $this->quoteItemToOrderItem->convert(
427+
$quoteItem->getParentItem(),
428+
['parent_item' => null]
429+
);
430+
}
431+
$parentItem = isset($orderItems[$parentItemId]) ? $orderItems[$parentItemId] : null;
432+
$orderItems[$itemId] = $this->quoteItemToOrderItem->convert($quoteItem, ['parent_item' => $parentItem]);
426433
}
427434
return array_values($orderItems);
428435
}

app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,19 @@ public function resetJoinQuotes($quotesTableName, $productId = null)
147147
return $this;
148148
}
149149

150+
/**
151+
* Join product entities to select existing products items only
152+
*/
153+
protected function _beforeLoad()
154+
{
155+
parent::_beforeLoad();
156+
$this->join(
157+
['cpe' => $this->getResource()->getTable('catalog_product_entity')],
158+
"cpe.entity_id = main_table.product_id",
159+
[]
160+
);
161+
}
162+
150163
/**
151164
* After load processing
152165
*

0 commit comments

Comments
 (0)