diff --git a/app/code/Magento/Sales/Model/Order/CreditmemoFactory.php b/app/code/Magento/Sales/Model/Order/CreditmemoFactory.php index 8207e78422950a616c2c3b92e2bf8113c418282d..ff687074e4a66cc50c457c685fc1757d1529dcb6 100644 --- a/app/code/Magento/Sales/Model/Order/CreditmemoFactory.php +++ b/app/code/Magento/Sales/Model/Order/CreditmemoFactory.php @@ -61,10 +61,12 @@ class CreditmemoFactory $item = $this->convertor->itemToCreditmemoItem($orderItem); if ($orderItem->isDummy()) { - $qty = 1; if (isset($data['qtys'][$orderItem->getParentItemId()])) { - $qty = $this->calculateProductOptions($orderItem, $data['qtys']); + $parentQty = $data['qtys'][$orderItem->getParentItemId()]; + } else { + $parentQty = $orderItem->getParentItem() ? $orderItem->getParentItem()->getQtyToRefund() : 1; } + $qty = $this->calculateProductOptions($orderItem, $parentQty); $orderItem->setLockedDoShip(true); } else { if (isset($qtys[$orderItem->getId()])) { @@ -139,10 +141,12 @@ class CreditmemoFactory $item = $this->convertor->itemToCreditmemoItem($orderItem); if ($orderItem->isDummy()) { - $qty = 1; if (isset($data['qtys'][$orderItem->getParentItemId()])) { - $qty = $this->calculateProductOptions($orderItem, $data['qtys']); + $parentQty = $data['qtys'][$orderItem->getParentItemId()]; + } else { + $parentQty = $orderItem->getParentItem() ? $orderItem->getParentItem()->getQtyToRefund() : 1; } + $qty = $this->calculateProductOptions($orderItem, $parentQty); } else { if (isset($qtys[$orderItem->getId()])) { $qty = (double)$qtys[$orderItem->getId()]; @@ -261,15 +265,15 @@ class CreditmemoFactory * @param array $qtys * @return int */ - private function calculateProductOptions(\Magento\Sales\Api\Data\OrderItemInterface $orderItem, $qtys) + private function calculateProductOptions(\Magento\Sales\Api\Data\OrderItemInterface $orderItem, $parentQty) { - $qty = 1; + $qty = $parentQty; $productOptions = $orderItem->getProductOptions(); if (isset($productOptions['bundle_selection_attributes'])) { $bundleSelectionAttributes = $this->getUnserialize() ->unserialize($productOptions['bundle_selection_attributes']); if ($bundleSelectionAttributes) { - $qty = $bundleSelectionAttributes['qty'] * $qtys[$orderItem->getParentItemId()]; + $qty = $bundleSelectionAttributes['qty'] * $parentQty; } } return $qty;