Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
GetSourceDeductedOrderItemsChain.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
12 use Magento\InventorySalesApi\Model\ReturnProcessor\Result\SourceDeductedOrderItemsResultFactory;
14 
16 {
20  private $sourceDeductedItemsSelector;
21 
25  private $sourceDeductedOrderItemsResultFactory;
26 
32  public function __construct(
33  SourceDeductedOrderItemsResultFactory $sourceDeductedOrderItemsResultFactory,
34  array $sourceDeductedItemsSelector = []
35  ) {
36  foreach ($sourceDeductedItemsSelector as $selector) {
37  if (!$selector instanceof GetSourceDeductedOrderItemsInterface) {
38  throw new InputException(
39  __('%1 doesn\'t implement GetSourceDeductedOrderItemsInterface', get_class($selector))
40  );
41  }
42  }
43  $this->sourceDeductedItemsSelector = $sourceDeductedItemsSelector;
44  $this->sourceDeductedOrderItemsResultFactory = $sourceDeductedOrderItemsResultFactory;
45  }
46 
50  public function execute(OrderInterface $order, array $returnToStockItems): array
51  {
52  $sourceDeductedItems = [];
53  foreach ($this->sourceDeductedItemsSelector as $selector) {
54  $resultItems = $selector->execute($order, $returnToStockItems);
55  if (!empty($resultItems)) {
56  $sourceDeductedItems[] = $resultItems;
57  }
58  }
59 
60  return $this->groupResultBySourceCode($sourceDeductedItems);
61  }
62 
67  private function groupResultBySourceCode($sourceDeductedItems): array
68  {
69  $groupedItems = $result = [];
70  foreach ($sourceDeductedItems as $resultItems) {
71  foreach ($resultItems as $resultItem) {
72  if (!empty($groupedItems[$resultItem->getSourceCode()])) {
73  $resultArray = array_merge($groupedItems[$resultItem->getSourceCode()], $resultItem->getItems());
74  $groupedItems[$resultItem->getSourceCode()] = $resultArray;
75  } else {
76  $groupedItems[$resultItem->getSourceCode()] = $resultItem->getItems();
77  }
78  }
79  }
80 
81  foreach ($groupedItems as $sourceCode => $items) {
82  $result[] = $this->sourceDeductedOrderItemsResultFactory->create([
83  'sourceCode' => $sourceCode,
84  'items' => $items
85  ]);
86  }
87 
88  return $result;
89  }
90 }
$order
Definition: order.php:55
__()
Definition: __.php:13
__construct(SourceDeductedOrderItemsResultFactory $sourceDeductedOrderItemsResultFactory, array $sourceDeductedItemsSelector=[])
$sourceCode
Definition: inventory.phtml:11
$items