6 declare(strict_types=1);
16 use Magento\InventorySourceSelectionApi\Api\Data\ItemRequestInterfaceFactory;
17 use Magento\InventorySourceSelectionApi\Api\Data\InventoryRequestInterfaceFactory;
35 private $stockByWebsiteIdResolver;
40 private $itemRequestFactory;
45 private $inventoryRequestFactory;
50 private $sourceSelectionService;
55 private $getDefaultSourceSelectionAlgorithmCode;
60 private $sourceRepository;
65 private $sources = [];
79 ItemRequestInterfaceFactory $itemRequestFactory,
80 InventoryRequestInterfaceFactory $inventoryRequestFactory,
85 parent::__construct($context);
86 $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver;
87 $this->itemRequestFactory = $itemRequestFactory;
88 $this->inventoryRequestFactory = $inventoryRequestFactory;
89 $this->sourceSelectionService = $sourceSelectionService;
90 $this->getDefaultSourceSelectionAlgorithmCode = $getDefaultSourceSelectionAlgorithmCode;
102 $postRequest =
$request->getPost()->toArray();
104 if (
$request->isPost() && !empty($postRequest[
'requestData'])) {
106 $defaultCode = $this->getDefaultSourceSelectionAlgorithmCode->execute();
107 $algorithmCode = !empty($postRequest[
'algorithmCode']) ? $postRequest[
'algorithmCode'] : $defaultCode;
111 $stockId = (int)$this->stockByWebsiteIdResolver->execute((
int)
$websiteId)->getStockId();
115 $requestItems[] = $this->itemRequestFactory->create([
116 'sku' =>
$data[
'sku'],
117 'qty' =>
$data[
'qty']
120 $inventoryRequest = $this->inventoryRequestFactory->create([
121 'stockId' => $stockId,
122 'items' => $requestItems
125 $sourceSelectionResult = $this->sourceSelectionService->execute($inventoryRequest, $algorithmCode);
129 foreach ($sourceSelectionResult->getSourceSelectionItems() as
$item) {
133 'sourceCode' =>
$item->getSourceCode(),
134 'qtyAvailable' =>
$item->getQtyAvailable(),
135 'qtyToDeduct' =>
$item->getQtyToDeduct()
getSourceName(string $sourceCode)
__construct(Context $context, StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, ItemRequestInterfaceFactory $itemRequestFactory, InventoryRequestInterfaceFactory $inventoryRequestFactory, SourceSelectionServiceInterface $sourceSelectionService, GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode, SourceRepositoryInterface $sourceRepository)