Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ReturnProcessor.php
Go to the documentation of this file.
1 <?php
7 
10 
17 {
21  private $stockManagement;
22 
26  private $stockIndexerProcessor;
27 
31  private $priceIndexer;
32 
36  private $storeManager;
37 
41  private $orderItemRepository;
42 
51  public function __construct(
52  \Magento\CatalogInventory\Api\StockManagementInterface $stockManagement,
53  \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexer,
54  \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer,
55  \Magento\Store\Model\StoreManagerInterface $storeManager,
56  \Magento\Sales\Api\OrderItemRepositoryInterface $orderItemRepository
57  ) {
58  $this->stockManagement = $stockManagement;
59  $this->stockIndexerProcessor = $stockIndexer;
60  $this->priceIndexer = $priceIndexer;
61  $this->storeManager = $storeManager;
62  $this->orderItemRepository = $orderItemRepository;
63  }
64 
72  public function execute(
75  array $returnToStockItems = [],
76  $isAutoReturn = false
77  ) {
78  $itemsToUpdate = [];
79  foreach ($creditmemo->getItems() as $item) {
80  $productId = $item->getProductId();
81  $orderItem = $this->orderItemRepository->get($item->getOrderItemId());
82  $parentItemId = $orderItem->getParentItemId();
83  $qty = $item->getQty();
84  if ($isAutoReturn || $this->canReturnItem($item, $qty, $parentItemId, $returnToStockItems)) {
85  if (isset($itemsToUpdate[$productId])) {
86  $itemsToUpdate[$productId] += $qty;
87  } else {
88  $itemsToUpdate[$productId] = $qty;
89  }
90  }
91  }
92 
93  if (!empty($itemsToUpdate)) {
94  $store = $this->storeManager->getStore($order->getStoreId());
95  foreach ($itemsToUpdate as $productId => $qty) {
96  $this->stockManagement->backItemQty(
97  $productId,
98  $qty,
99  $store->getWebsiteId()
100  );
101  }
102 
103  $updatedItemIds = array_keys($itemsToUpdate);
104  $this->stockIndexerProcessor->reindexList($updatedItemIds);
105  $this->priceIndexer->reindexList($updatedItemIds);
106  }
107  }
108 
116  private function canReturnItem(
117  \Magento\Sales\Api\Data\CreditmemoItemInterface $item,
118  $qty,
119  $parentItemId = null,
120  array $returnToStockItems = []
121  ) {
122  return (in_array($item->getOrderItemId(), $returnToStockItems) || in_array($parentItemId, $returnToStockItems))
123  && $qty;
124  }
125 }
__construct(\Magento\CatalogInventory\Api\StockManagementInterface $stockManagement, \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexer, \Magento\Catalog\Model\Indexer\Product\Price\Processor $priceIndexer, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Sales\Api\OrderItemRepositoryInterface $orderItemRepository)
$orderItem
Definition: order.php:30
$order
Definition: order.php:55
$storeManager
execute(CreditmemoInterface $creditmemo, OrderInterface $order, array $returnToStockItems=[], $isAutoReturn=false)