From 281e77709065d8809636e60521c243d49f669ee0 Mon Sep 17 00:00:00 2001
From: Oleksandr Radchenko <oradchenko@magento.com>
Date: Mon, 24 Oct 2016 15:21:53 +0300
Subject: [PATCH] MAGETWO-59074: Creditmemo return to stock only one unit of
 configurable product

---
 .../Sales/Model/Order/CreditmemoFactory.php    | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Sales/Model/Order/CreditmemoFactory.php b/app/code/Magento/Sales/Model/Order/CreditmemoFactory.php
index 8207e784229..ff687074e4a 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;
-- 
GitLab