6 declare(strict_types=1);
13 use Magento\InventorySourceSelectionApi\Api\Data\InventoryRequestInterfaceFactory;
14 use Magento\InventorySourceSelectionApi\Api\Data\ItemRequestInterfaceFactory;
32 private $getSkuFromOrderItem;
37 private $itemRequestFactory;
42 private $inventoryRequestFactory;
47 private $stockByWebsiteIdResolver;
52 private $getDefaultSourceSelectionAlgorithmCode;
57 private $sourceSelectionService;
69 ItemRequestInterfaceFactory $itemRequestFactory,
71 InventoryRequestInterfaceFactory $inventoryRequestFactory,
75 $this->itemRequestFactory = $itemRequestFactory;
76 $this->inventoryRequestFactory = $inventoryRequestFactory;
77 $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver;
78 $this->getDefaultSourceSelectionAlgorithmCode = $getDefaultSourceSelectionAlgorithmCode;
79 $this->sourceSelectionService = $sourceSelectionService;
80 $this->getSkuFromOrderItem = $getSkuFromOrderItem;
91 $stockId = (int)$this->stockByWebsiteIdResolver->execute((
int)
$websiteId)->getStockId();
94 $inventoryRequest = $this->inventoryRequestFactory->create([
95 'stockId' => $stockId,
96 'items' => $this->getSelectionRequestItems(
$invoice->getItems())
99 $selectionAlgorithmCode = $this->getDefaultSourceSelectionAlgorithmCode->execute();
100 return $this->sourceSelectionService->execute($inventoryRequest, $selectionAlgorithmCode);
107 private function getSelectionRequestItems(Traversable $invoiceItems): array
109 $selectionRequestItems = [];
117 $itemSku = $this->getSkuFromOrderItem->execute(
$orderItem);
120 $selectionRequestItems[] = $this->itemRequestFactory->create([
125 return $selectionRequestItems;
133 private function castQty(OrderItemInterface
$item, $qty)
135 if (
$item->getIsQtyDecimal()) {
141 return $qty > 0 ? $qty : 0;
__construct(GetSkuFromOrderItemInterface $getSkuFromOrderItem, ItemRequestInterfaceFactory $itemRequestFactory, StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, InventoryRequestInterfaceFactory $inventoryRequestFactory, GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode, SourceSelectionServiceInterface $sourceSelectionService)