123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\InventoryShippingAdminUi\Ui\DataProvider;
- use Magento\Framework\Exception\NoSuchEntityException;
- use Magento\InventorySourceSelectionApi\Model\GetInventoryRequestFromOrder;
- use Magento\InventorySourceSelectionApi\Api\Data\ItemRequestInterfaceFactory;
- use Magento\InventorySourceSelectionApi\Api\SourceSelectionServiceInterface;
- use Magento\InventorySourceSelectionApi\Api\GetDefaultSourceSelectionAlgorithmCodeInterface;
- use Magento\InventoryApi\Api\SourceRepositoryInterface;
- /**
- * Class GetSourcesByOrderIdSkuAndQty
- */
- class GetSourcesByOrderIdSkuAndQty
- {
- /**
- * @var ItemRequestInterfaceFactory
- */
- private $itemRequestFactory;
- /**
- * @var SourceSelectionServiceInterface
- */
- private $sourceSelectionService;
- /**
- * @var GetDefaultSourceSelectionAlgorithmCodeInterface
- */
- private $getDefaultSourceSelectionAlgorithmCode;
- /**
- * @var SourceRepositoryInterface
- */
- private $sourceRepository;
- /**
- * @var GetInventoryRequestFromOrder
- */
- private $getInventoryRequestFromOrder;
- /**
- * @var array
- */
- private $sources = [];
- /**
- * @param ItemRequestInterfaceFactory $itemRequestFactory
- * @param SourceSelectionServiceInterface $sourceSelectionService
- * @param GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode
- * @param GetInventoryRequestFromOrder $getInventoryRequestFromOrder
- * @param SourceRepositoryInterface $sourceRepository
- * @SuppressWarnings(PHPMD.LongVariable)
- */
- public function __construct(
- ItemRequestInterfaceFactory $itemRequestFactory,
- SourceSelectionServiceInterface $sourceSelectionService,
- GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode,
- GetInventoryRequestFromOrder $getInventoryRequestFromOrder,
- SourceRepositoryInterface $sourceRepository
- ) {
- $this->itemRequestFactory = $itemRequestFactory;
- $this->sourceSelectionService = $sourceSelectionService;
- $this->getDefaultSourceSelectionAlgorithmCode = $getDefaultSourceSelectionAlgorithmCode;
- $this->sourceRepository = $sourceRepository;
- $this->getInventoryRequestFromOrder = $getInventoryRequestFromOrder;
- }
- /**
- * Get sources by order id sku and qty
- *
- * @param int $orderId
- * @param string $sku
- * @param float $qty
- * @return array
- * @throws NoSuchEntityException
- * @SuppressWarnings(PHPMD.LongVariable)
- */
- public function execute(int $orderId, string $sku, float $qty): array
- {
- $algorithmCode = $this->getDefaultSourceSelectionAlgorithmCode->execute();
- $requestItem = $this->itemRequestFactory->create([
- 'sku' => $sku,
- 'qty' => $qty
- ]);
- $inventoryRequest = $this->getInventoryRequestFromOrder->execute($orderId, [$requestItem]);
- $sourceSelectionResult = $this->sourceSelectionService->execute(
- $inventoryRequest,
- $algorithmCode
- );
- $result = [];
- foreach ($sourceSelectionResult->getSourceSelectionItems() as $item) {
- $sourceCode = $item->getSourceCode();
- $result[] = [
- 'sourceName' => $this->getSourceName($sourceCode),
- 'sourceCode' => $sourceCode,
- 'qtyAvailable' => $item->getQtyAvailable(),
- 'qtyToDeduct' => $item->getQtyToDeduct()
- ];
- }
- return $result;
- }
- /**
- * Get source name by code
- *
- * @param string $sourceCode
- * @return mixed
- * @throws NoSuchEntityException
- */
- private function getSourceName(string $sourceCode): string
- {
- if (!isset($this->sources[$sourceCode])) {
- $this->sources[$sourceCode] = $this->sourceRepository->get($sourceCode)->getName();
- }
- return $this->sources[$sourceCode];
- }
- }
|