Skip to content

Commit 281e777

Browse files
committed
MAGETWO-59074: Creditmemo return to stock only one unit of configurable product
1 parent ec29630 commit 281e777

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

app/code/Magento/Sales/Model/Order/CreditmemoFactory.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,12 @@ public function createByOrder(\Magento\Sales\Model\Order $order, array $data = [
6161

6262
$item = $this->convertor->itemToCreditmemoItem($orderItem);
6363
if ($orderItem->isDummy()) {
64-
$qty = 1;
6564
if (isset($data['qtys'][$orderItem->getParentItemId()])) {
66-
$qty = $this->calculateProductOptions($orderItem, $data['qtys']);
65+
$parentQty = $data['qtys'][$orderItem->getParentItemId()];
66+
} else {
67+
$parentQty = $orderItem->getParentItem() ? $orderItem->getParentItem()->getQtyToRefund() : 1;
6768
}
69+
$qty = $this->calculateProductOptions($orderItem, $parentQty);
6870
$orderItem->setLockedDoShip(true);
6971
} else {
7072
if (isset($qtys[$orderItem->getId()])) {
@@ -139,10 +141,12 @@ public function createByInvoice(\Magento\Sales\Model\Order\Invoice $invoice, arr
139141

140142
$item = $this->convertor->itemToCreditmemoItem($orderItem);
141143
if ($orderItem->isDummy()) {
142-
$qty = 1;
143144
if (isset($data['qtys'][$orderItem->getParentItemId()])) {
144-
$qty = $this->calculateProductOptions($orderItem, $data['qtys']);
145+
$parentQty = $data['qtys'][$orderItem->getParentItemId()];
146+
} else {
147+
$parentQty = $orderItem->getParentItem() ? $orderItem->getParentItem()->getQtyToRefund() : 1;
145148
}
149+
$qty = $this->calculateProductOptions($orderItem, $parentQty);
146150
} else {
147151
if (isset($qtys[$orderItem->getId()])) {
148152
$qty = (double)$qtys[$orderItem->getId()];
@@ -261,15 +265,15 @@ protected function initData($creditmemo, $data)
261265
* @param array $qtys
262266
* @return int
263267
*/
264-
private function calculateProductOptions(\Magento\Sales\Api\Data\OrderItemInterface $orderItem, $qtys)
268+
private function calculateProductOptions(\Magento\Sales\Api\Data\OrderItemInterface $orderItem, $parentQty)
265269
{
266-
$qty = 1;
270+
$qty = $parentQty;
267271
$productOptions = $orderItem->getProductOptions();
268272
if (isset($productOptions['bundle_selection_attributes'])) {
269273
$bundleSelectionAttributes = $this->getUnserialize()
270274
->unserialize($productOptions['bundle_selection_attributes']);
271275
if ($bundleSelectionAttributes) {
272-
$qty = $bundleSelectionAttributes['qty'] * $qtys[$orderItem->getParentItemId()];
276+
$qty = $bundleSelectionAttributes['qty'] * $parentQty;
273277
}
274278
}
275279
return $qty;

0 commit comments

Comments
 (0)