Skip to content

Commit 84682b7

Browse files
committed
MAGETWO-59080: Introduce ability return to stock through api for Configurable and Bundle products
1 parent 3d1fbb3 commit 84682b7

File tree

4 files changed

+44
-118
lines changed

4 files changed

+44
-118
lines changed

app/code/Magento/SalesInventory/Model/Order/ReturnItemProcessor.php

Lines changed: 0 additions & 99 deletions
This file was deleted.

app/code/Magento/SalesInventory/Model/Order/ReturnProcessor.php

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,20 +88,26 @@ public function __construct(
8888
/**
8989
* @param CreditmemoInterface $creditmemo
9090
* @param OrderInterface $order
91+
* @param array $returnToStockItems
9192
* @return void
9293
*/
9394
public function execute(
9495
CreditmemoInterface $creditmemo,
95-
OrderInterface $order
96+
OrderInterface $order,
97+
array $returnToStockItems = []
9698
) {
9799
if ($this->stockConfiguration->isAutoReturnEnabled()) {
98100
return;
99101
}
100102
$itemsToUpdate = [];
101103
foreach ($creditmemo->getItems() as $item) {
102-
if ($item->getExtensionAttributes() && $item->getExtensionAttributes()->getReturnToStock()) {
103-
$productId = $item->getProductId();
104-
$qty = $item->getExtensionAttributes()->getReturnToStockQty();
104+
$qty = $item->getQty();
105+
$productId = $item->getProductId();
106+
$orderItem = $this->orderItemRepository->get($item->getOrderItemId());
107+
$parentItemId = $orderItem->getParentItemId();
108+
if ($this->canReturnItem($item, $parentItemId, $returnToStockItems, $qty)) {
109+
$parentItem = $parentItemId ? $this->getItemByOrderId($creditmemo, $parentItemId) : false;
110+
$qty = $parentItem ? $parentItem->getQty() * $qty : $qty;
105111
if (isset($itemsToUpdate[$productId])) {
106112
$itemsToUpdate[$productId] += $qty;
107113
} else {
@@ -125,4 +131,36 @@ public function execute(
125131
$this->priceIndexer->reindexList($updatedItemIds);
126132
}
127133
}
134+
135+
/**
136+
* @param \Magento\Sales\Api\Data\CreditmemoInterface $creditmemo
137+
* @param int $parentItemId
138+
* @return bool|CreditmemoItemInterface
139+
*/
140+
private function getItemByOrderId(\Magento\Sales\Api\Data\CreditmemoInterface $creditmemo, $parentItemId)
141+
{
142+
foreach ($creditmemo->getItems() as $item) {
143+
if ($item->getOrderItemId() == $parentItemId) {
144+
return $item;
145+
}
146+
}
147+
return false;
148+
}
149+
150+
/**
151+
* @param \Magento\Sales\Api\Data\CreditmemoItemInterface $item
152+
* @param int[] $returnToStockItems
153+
* @param int $parentItemId
154+
* @param int $qty
155+
* @return bool
156+
*/
157+
private function canReturnItem(
158+
\Magento\Sales\Api\Data\CreditmemoItemInterface $item,
159+
$parentItemId = null,
160+
array $returnToStockItems = [],
161+
$qty
162+
) {
163+
return (in_array($item->getOrderItemId(), $returnToStockItems) || in_array($parentItemId, $returnToStockItems))
164+
&& $qty;
165+
}
128166
}

app/code/Magento/SalesInventory/Model/Plugin/Order/ReturnToStockOrder.php

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Magento\Sales\Api\CreditmemoRepositoryInterface;
1010
use Magento\Sales\Api\OrderRepositoryInterface;
1111
use Magento\Sales\Api\RefundOrderInterface;
12-
use Magento\SalesInventory\Model\Order\ReturnItemProcessor;
1312

1413
/**
1514
* Class ReturnToStock
@@ -31,28 +30,21 @@ class ReturnToStockOrder
3130
*/
3231
private $orderRepository;
3332

34-
/**
35-
* @var ReturnItemProcessor
36-
*/
37-
private $returnItemProcessor;
3833
/**
3934
* ReturnToStockPlugin constructor.
4035
*
4136
* @param ReturnProcessor $returnProcessor
4237
* @param CreditmemoRepositoryInterface $creditmemoRepository
4338
* @param OrderRepositoryInterface $orderRepository
44-
* @param ReturnItemProcessor $returnItemProcessor
4539
*/
4640
public function __construct(
4741
ReturnProcessor $returnProcessor,
4842
CreditmemoRepositoryInterface $creditmemoRepository,
49-
OrderRepositoryInterface $orderRepository,
50-
ReturnItemProcessor $returnItemProcessor
43+
OrderRepositoryInterface $orderRepository
5144
) {
5245
$this->returnProcessor = $returnProcessor;
5346
$this->creditmemoRepository = $creditmemoRepository;
5447
$this->orderRepository = $orderRepository;
55-
$this->returnItemProcessor = $returnItemProcessor;
5648
}
5749

5850
/**
@@ -88,8 +80,7 @@ public function afterExecute(
8880
}
8981

9082
$creditmemo = $this->creditmemoRepository->get($resultEntityId);
91-
$this->returnItemProcessor->execute($creditmemo, $returnToStockItems);
92-
$this->returnProcessor->execute($creditmemo, $order);
83+
$this->returnProcessor->execute($creditmemo, $order, $returnToStockItems);
9384

9485
return $resultEntityId;
9586
}

app/code/Magento/SalesInventory/etc/extension_attributes.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,4 @@
99
<extension_attributes for="Magento\Sales\Api\Data\CreditmemoCreationArgumentsInterface">
1010
<attribute code="return_to_stock_items" type="int[]"/>
1111
</extension_attributes>
12-
<extension_attributes for="Magento\Sales\Api\Data\CreditmemoItemInterface">
13-
<attribute code="return_to_stock" type="bool"/>
14-
<attribute code="return_to_stock_qty" type="int"/>
15-
</extension_attributes>
1612
</config>

0 commit comments

Comments
 (0)