Skip to content

Commit 8eecb61

Browse files
author
Oleksii Korshenko
committed
Merge remote-tracking branch 'mainline/2.2-develop' into 2.2-develop-prs
2 parents 2270483 + 94b1db0 commit 8eecb61

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-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: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,21 @@ public function resetJoinQuotes($quotesTableName, $productId = null)
147147
return $this;
148148
}
149149

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

0 commit comments

Comments
 (0)