Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SourceDeductionRequestsFromSourceSelectionFactory.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
12 use Magento\InventorySourceDeductionApi\Model\ItemToDeductInterfaceFactory;
14 use Magento\InventorySourceDeductionApi\Model\SourceDeductionRequestInterfaceFactory;
17 use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
20 
22 {
26  private $sourceDeductionRequestFactory;
27 
31  private $itemToDeductFactory;
32 
36  private $salesChannelFactory;
37 
41  private $websiteRepository;
42 
49  public function __construct(
50  SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory,
51  ItemToDeductInterfaceFactory $itemToDeductFactory,
52  SalesChannelInterfaceFactory $salesChannelFactory,
53  WebsiteRepositoryInterface $websiteRepository
54  ) {
55  $this->sourceDeductionRequestFactory = $sourceDeductionRequestFactory;
56  $this->itemToDeductFactory = $itemToDeductFactory;
57  $this->salesChannelFactory = $salesChannelFactory;
58  $this->websiteRepository = $websiteRepository;
59  }
60 
67  public function create(
68  SourceSelectionResultInterface $sourceSelectionResult,
69  SalesEventInterface $salesEvent,
70  int $websiteId
71  ): array {
72  $sourceDeductionRequests = [];
73  $websiteCode = $this->websiteRepository->getById($websiteId)->getCode();
74  $salesChannel = $this->salesChannelFactory->create([
75  'data' => [
77  'code' => $websiteCode
78  ]
79  ]);
80 
81  foreach ($this->getItemsPerSource($sourceSelectionResult->getSourceSelectionItems()) as $sourceCode => $items) {
83  $sourceDeductionRequests[] = $this->sourceDeductionRequestFactory->create([
84  'sourceCode' => $sourceCode,
85  'items' => $items,
86  'salesChannel' => $salesChannel,
87  'salesEvent' => $salesEvent
88  ]);
89  }
90  return $sourceDeductionRequests;
91  }
92 
97  private function getItemsPerSource(array $sourceSelectionItems)
98  {
99  $itemsPerSource = [];
100  foreach ($sourceSelectionItems as $sourceSelectionItem) {
101  if ($sourceSelectionItem->getQtyToDeduct() < 0.000001) {
102  continue;
103  }
104  if (!isset($itemsPerSource[$sourceSelectionItem->getSourceCode()])) {
105  $itemsPerSource[$sourceSelectionItem->getSourceCode()] = [];
106  }
107  $itemsPerSource[$sourceSelectionItem->getSourceCode()][] = $this->itemToDeductFactory->create([
108  'sku' => $sourceSelectionItem->getSku(),
109  'qty' => $sourceSelectionItem->getQtyToDeduct(),
110  ]);
111  }
112  return $itemsPerSource;
113  }
114 }
__construct(SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory, ItemToDeductInterfaceFactory $itemToDeductFactory, SalesChannelInterfaceFactory $salesChannelFactory, WebsiteRepositoryInterface $websiteRepository)
$sourceCode
Definition: inventory.phtml:11
if(!isset($_GET['website_code'])) $websiteCode
Definition: website.php:11
$items