diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Algorithms/DistanceBasedAlgorithm.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Algorithms/DistanceBasedAlgorithm.php index 55be34d5662f..9b833a9e4f6c 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Algorithms/DistanceBasedAlgorithm.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Algorithms/DistanceBasedAlgorithm.php @@ -11,7 +11,7 @@ use Magento\InventoryApi\Api\GetSourcesAssignedToStockOrderedByPriorityInterface; use Magento\InventoryApi\Api\Data\SourceInterface; use Magento\InventoryDistanceBasedSourceSelection\Model\DistanceProvider\GetDistanceFromSourceToAddress; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; use Magento\InventorySourceSelectionApi\Model\Algorithms\Result\GetDefaultSortedSourcesResult; use Magento\InventorySourceSelectionApi\Api\Data\InventoryRequestInterface; use Magento\InventorySourceSelectionApi\Api\Data\SourceSelectionResultInterface; diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToComponentsString.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToComponentsString.php index ebea921666fc..b03ad341edf3 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToComponentsString.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToComponentsString.php @@ -7,7 +7,7 @@ namespace Magento\InventoryDistanceBasedSourceSelection\Model\Convert; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; class AddressToComponentsString { diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToQueryString.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToQueryString.php index 12a7f502be24..1ac5dd46a3ee 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToQueryString.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToQueryString.php @@ -7,7 +7,7 @@ namespace Magento\InventoryDistanceBasedSourceSelection\Model\Convert; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; class AddressToQueryString { diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToString.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToString.php index f8307981f341..e6f5908e0f98 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToString.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Convert/AddressToString.php @@ -7,7 +7,7 @@ namespace Magento\InventoryDistanceBasedSourceSelection\Model\Convert; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; class AddressToString { diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetDistanceFromSourceToAddress.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetDistanceFromSourceToAddress.php index 4b1362491a74..40aad7326a53 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetDistanceFromSourceToAddress.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetDistanceFromSourceToAddress.php @@ -8,7 +8,7 @@ namespace Magento\InventoryDistanceBasedSourceSelection\Model\DistanceProvider; use Magento\InventoryApi\Api\Data\SourceInterface; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetDistanceInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetLatLngFromAddressInterface; diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetLatLngFromSource.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetLatLngFromSource.php index 24a6b3e5d0d5..36539ffc38ca 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetLatLngFromSource.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GetLatLngFromSource.php @@ -8,7 +8,7 @@ namespace Magento\InventoryDistanceBasedSourceSelection\Model\DistanceProvider; use Magento\InventoryApi\Api\Data\SourceInterface; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterfaceFactory; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterfaceFactory; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetLatLngFromAddressInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterfaceFactory; diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GoogleMap/GetLatLngFromAddress.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GoogleMap/GetLatLngFromAddress.php index 27809e93a138..6b95c3b6674e 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GoogleMap/GetLatLngFromAddress.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/GoogleMap/GetLatLngFromAddress.php @@ -13,7 +13,7 @@ use Magento\InventoryDistanceBasedSourceSelection\Model\Convert\AddressToComponentsString; use Magento\InventoryDistanceBasedSourceSelection\Model\Convert\AddressToQueryString; use Magento\InventoryDistanceBasedSourceSelection\Model\Convert\AddressToString; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterfaceFactory; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetLatLngFromAddressInterface; diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/Offline/GetLatLngFromAddress.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/Offline/GetLatLngFromAddress.php index 87496f5b4b8d..b875b31f30fe 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/Offline/GetLatLngFromAddress.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/DistanceProvider/Offline/GetLatLngFromAddress.php @@ -13,7 +13,7 @@ use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterfaceFactory; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetLatLngFromAddressInterface; use Magento\InventoryDistanceBasedSourceSelection\Model\ResourceModel\GetGeoNameDataByAddress; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; /** * @inheritdoc diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/GetAddressFromOrder.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/GetAddressFromOrder.php deleted file mode 100644 index 76a5f4910dfd..000000000000 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/GetAddressFromOrder.php +++ /dev/null @@ -1,65 +0,0 @@ -addressInterfaceFactory = $addressInterfaceFactory; - $this->orderRepository = $orderRepository; - } - - /** - * Create an address from an order - * - * @param int $orderId - * @return AddressInterface - */ - public function execute(int $orderId): AddressInterface - { - $order = $this->orderRepository->get($orderId); - - /** @var \Magento\Sales\Model\Order\Address $shippingAddress */ - $shippingAddress = $order->getShippingAddress(); - - return $this->addressInterfaceFactory->create([ - 'country' => $shippingAddress->getCountryId(), - 'postcode' => $shippingAddress->getPostcode(), - 'streetAddress' => implode("\n", $shippingAddress->getStreet()), - 'region' => $shippingAddress->getRegion() ?? $shippingAddress->getRegionCode() ?? '', - 'city' => $shippingAddress->getCity() - ]); - } -} diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/InventoryRequestBuilder/FromOrder/DistanceBuilder.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/InventoryRequestBuilder/FromOrder/DistanceBuilder.php deleted file mode 100644 index 4b61b129e24b..000000000000 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/InventoryRequestBuilder/FromOrder/DistanceBuilder.php +++ /dev/null @@ -1,72 +0,0 @@ -inventoryRequestFactory = $inventoryRequestFactory; - $this->getAddressFromOrder = $getAddressFromOrder; - $this->inventoryRequestExtensionInterfaceFactory = $inventoryRequestExtensionInterfaceFactory; - } - - /** - * @inheritdoc - */ - public function execute(int $stockId, int $orderId, array $requestItems): InventoryRequestInterface - { - $address = $this->getAddressFromOrder->execute($orderId); - - $inventoryRequest = $this->inventoryRequestFactory->create([ - 'stockId' => $stockId, - 'items' => $requestItems - ]); - - $extensionAttributes = $this->inventoryRequestExtensionInterfaceFactory->create(); - $extensionAttributes->setDestinationAddress($address); - $inventoryRequest->setExtensionAttributes($extensionAttributes); - - return $inventoryRequest; - } -} diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/ResourceModel/GetGeoNameDataByAddress.php b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/ResourceModel/GetGeoNameDataByAddress.php index 366b26cbae85..66b310200fe5 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/ResourceModel/GetGeoNameDataByAddress.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/ResourceModel/GetGeoNameDataByAddress.php @@ -10,7 +10,7 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\Exception\NoSuchEntityException; use Magento\InventoryDistanceBasedSourceSelection\Model\Convert\AddressToString; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; /** * Get geoname data by postcode diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/composer.json b/app/code/Magento/InventoryDistanceBasedSourceSelection/composer.json index 945ebfbe7fc7..75238bb167a0 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/composer.json +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/composer.json @@ -6,10 +6,8 @@ "magento/framework": "*", "magento/module-inventory-distance-based-source-selection-api": "*", "magento/module-inventory-source-selection-api": "*", - "magento/module-inventory-source-selection": "*", "magento/module-inventory-api": "*", - "magento/module-config": "*", - "magento/module-sales": "*" + "magento/module-config": "*" }, "type": "magento2-module", "license": [ diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/etc/di.xml b/app/code/Magento/InventoryDistanceBasedSourceSelection/etc/di.xml index 9439c8ae84c4..62afa6d97a53 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/etc/di.xml +++ b/app/code/Magento/InventoryDistanceBasedSourceSelection/etc/di.xml @@ -9,12 +9,10 @@ xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> - - + - - - - Magento\InventoryDistanceBasedSourceSelection\Model\InventoryRequestBuilder\FromOrder\DistanceBuilder - - - - diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/GetLatLngFromAddressInterface.php b/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/GetLatLngFromAddressInterface.php index 1529c239081f..d2f5589d2fd1 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/GetLatLngFromAddressInterface.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/GetLatLngFromAddressInterface.php @@ -15,12 +15,12 @@ interface GetLatLngFromAddressInterface { /** - * Get latitude and longitude object from source + * Get latitude and longitude object from address * - * @param \Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface $address + * @param \Magento\InventorySourceSelectionApi\Api\Data\AddressInterface $address * @return \Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterface */ public function execute( - \Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface $address + \Magento\InventorySourceSelectionApi\Api\Data\AddressInterface $address ): \Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterface; } diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Model/GetLatLngFromAddress.php b/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Model/GetLatLngFromAddress.php index 2ce146b1ac3c..185189b0ea96 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Model/GetLatLngFromAddress.php +++ b/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Model/GetLatLngFromAddress.php @@ -7,7 +7,7 @@ namespace Magento\InventoryDistanceBasedSourceSelectionApi\Model; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\LatLngInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetDistanceProviderCodeInterface; use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetLatLngFromAddressInterface; diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/composer.json b/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/composer.json index ff5bccb8526a..fe027de3d297 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/composer.json +++ b/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/composer.json @@ -3,7 +3,8 @@ "description": "N/A", "require": { "php": "~7.1.3||~7.2.0", - "magento/framework": "*" + "magento/framework": "*", + "magento/module-inventory-source-selection-api": "*" }, "type": "magento2-module", "license": [ diff --git a/app/code/Magento/InventoryShipping/Model/GetSourceSelectionResultFromInvoice.php b/app/code/Magento/InventoryShipping/Model/GetSourceSelectionResultFromInvoice.php index 0241b559f12f..21b3b47a053a 100644 --- a/app/code/Magento/InventoryShipping/Model/GetSourceSelectionResultFromInvoice.php +++ b/app/code/Magento/InventoryShipping/Model/GetSourceSelectionResultFromInvoice.php @@ -9,10 +9,7 @@ use Magento\Framework\App\ObjectManager; use Magento\InventorySalesApi\Model\GetSkuFromOrderItemInterface; -use Magento\InventorySalesApi\Model\StockByWebsiteIdResolverInterface; -use Magento\InventorySourceSelectionApi\Api\Data\InventoryRequestInterfaceFactory; -use Magento\InventorySourceSelectionApi\Exception\UndefinedInventoryRequestBuilderException; -use Magento\InventorySourceSelectionApi\Model\GetInventoryRequestFromOrderBuilder; +use Magento\InventorySourceSelectionApi\Model\GetInventoryRequestFromOrder; use Magento\InventorySourceSelectionApi\Api\Data\ItemRequestInterfaceFactory; use Magento\Sales\Api\Data\InvoiceInterface; use Magento\Sales\Api\Data\InvoiceItemInterface; @@ -24,8 +21,8 @@ use Traversable; /** - * Creates instance of InventoryRequestInterface by given InvoiceInterface object. - * Only virtual type items will be used. + * Provides Source Selection by given InvoiceInterface object. + * Used for Virtual and Downloadable products only */ class GetSourceSelectionResultFromInvoice { @@ -39,11 +36,6 @@ class GetSourceSelectionResultFromInvoice */ private $itemRequestFactory; - /** - * @var StockByWebsiteIdResolverInterface - */ - private $stockByWebsiteIdResolver; - /** * @var GetDefaultSourceSelectionAlgorithmCodeInterface */ @@ -55,38 +47,37 @@ class GetSourceSelectionResultFromInvoice private $sourceSelectionService; /** - * @var GetInventoryRequestFromOrderBuilder + * @var GetInventoryRequestFromOrder */ - private $getInventoryRequestFromOrderBuilder; + private $getInventoryRequestFromOrder; /** * GetSourceSelectionResultFromInvoice constructor. * * @param GetSkuFromOrderItemInterface $getSkuFromOrderItem * @param ItemRequestInterfaceFactory $itemRequestFactory - * @param StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver - * @param InventoryRequestInterfaceFactory $inventoryRequestFactory + * @param null $stockByWebsiteIdResolver @deprecated + * @param null $inventoryRequestFactory @deprecated * @param GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode * @param SourceSelectionServiceInterface $sourceSelectionService - * @param GetInventoryRequestFromOrderBuilder|null $getInventoryRequestFromOrderBuilder + * @param GetInventoryRequestFromOrder|null $getInventoryRequestFromOrder * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( GetSkuFromOrderItemInterface $getSkuFromOrderItem, ItemRequestInterfaceFactory $itemRequestFactory, - StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, - InventoryRequestInterfaceFactory $inventoryRequestFactory, + $stockByWebsiteIdResolver, + $inventoryRequestFactory, GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode, SourceSelectionServiceInterface $sourceSelectionService, - GetInventoryRequestFromOrderBuilder $getInventoryRequestFromOrderBuilder = null + GetInventoryRequestFromOrder $getInventoryRequestFromOrder = null ) { $this->itemRequestFactory = $itemRequestFactory; - $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; $this->getDefaultSourceSelectionAlgorithmCode = $getDefaultSourceSelectionAlgorithmCode; $this->sourceSelectionService = $sourceSelectionService; $this->getSkuFromOrderItem = $getSkuFromOrderItem; - $this->getInventoryRequestFromOrderBuilder = $getInventoryRequestFromOrderBuilder ?: - ObjectManager::getInstance()->get(GetInventoryRequestFromOrderBuilder::class); + $this->getInventoryRequestFromOrder = $getInventoryRequestFromOrder ?: + ObjectManager::getInstance()->get(GetInventoryRequestFromOrder::class); } /** @@ -94,20 +85,12 @@ public function __construct( * * @param InvoiceInterface $invoice * @return SourceSelectionResultInterface - * @throws UndefinedInventoryRequestBuilderException */ public function execute(InvoiceInterface $invoice): SourceSelectionResultInterface { /** @var OrderInterface $order */ $order = $invoice->getOrder(); - $websiteId = (int) $order->getStore()->getWebsiteId(); - $stockId = (int) $this->stockByWebsiteIdResolver->execute($websiteId)->getStockId(); - - $selectionAlgorithmCode = $this->getDefaultSourceSelectionAlgorithmCode->execute(); - $inventoryRequestBuilder = $this->getInventoryRequestFromOrderBuilder->execute($selectionAlgorithmCode); - - $inventoryRequest = $inventoryRequestBuilder->execute( - $stockId, + $inventoryRequest = $this->getInventoryRequestFromOrder->execute( (int) $order->getEntityId(), $this->getSelectionRequestItems($invoice->getItems()) ); diff --git a/app/code/Magento/InventoryShipping/etc/di.xml b/app/code/Magento/InventoryShipping/etc/di.xml index d19203b41a40..bf575600c911 100644 --- a/app/code/Magento/InventoryShipping/etc/di.xml +++ b/app/code/Magento/InventoryShipping/etc/di.xml @@ -21,6 +21,14 @@ + + + + + + + + diff --git a/app/code/Magento/InventoryShippingAdminUi/Controller/Adminhtml/SourceSelection/ProcessAlgorithm.php b/app/code/Magento/InventoryShippingAdminUi/Controller/Adminhtml/SourceSelection/ProcessAlgorithm.php index 1b3d84aadc6f..43f1b12ca80a 100644 --- a/app/code/Magento/InventoryShippingAdminUi/Controller/Adminhtml/SourceSelection/ProcessAlgorithm.php +++ b/app/code/Magento/InventoryShippingAdminUi/Controller/Adminhtml/SourceSelection/ProcessAlgorithm.php @@ -15,14 +15,12 @@ use Magento\Framework\Controller\ResultFactory; use Magento\Framework\Controller\ResultInterface; use Magento\Framework\Exception\NoSuchEntityException; -use Magento\InventorySalesApi\Model\StockByWebsiteIdResolverInterface; use Magento\InventorySourceSelectionApi\Api\Data\InventoryRequestInterfaceFactory; -use Magento\InventorySourceSelectionApi\Exception\UndefinedInventoryRequestBuilderException; -use Magento\InventorySourceSelectionApi\Model\GetInventoryRequestFromOrderBuilder; use Magento\InventorySourceSelectionApi\Api\Data\ItemRequestInterfaceFactory; use Magento\InventorySourceSelectionApi\Api\SourceSelectionServiceInterface; use Magento\InventorySourceSelectionApi\Api\GetDefaultSourceSelectionAlgorithmCodeInterface; use Magento\InventoryApi\Api\SourceRepositoryInterface; +use Magento\InventorySourceSelectionApi\Model\GetInventoryRequestFromOrder; /** * ProcessAlgorithm Controller @@ -49,16 +47,6 @@ class ProcessAlgorithm extends Action implements HttpPostActionInterface */ private $sourceRepository; - /** - * @var StockByWebsiteIdResolverInterface - */ - private $stockByWebsiteIdResolver; - - /** - * @var GetInventoryRequestFromOrderBuilder - */ - private $getInventoryRequestFromOrderBuilder; - /** * @var ItemRequestInterfaceFactory */ @@ -69,36 +57,41 @@ class ProcessAlgorithm extends Action implements HttpPostActionInterface */ private $sources = []; + /** + * @var GetInventoryRequestFromOrder + */ + private $getInventoryRequestFromOrder; + /** * ProcessAlgorithm constructor. * * @param Context $context - * @param StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver + * @param null $stockByWebsiteIdResolver @deprecated * @param ItemRequestInterfaceFactory $itemRequestFactory - * @param InventoryRequestInterfaceFactory $inventoryRequestFactory + * @param null $inventoryRequestFactory @deprecated * @param SourceSelectionServiceInterface $sourceSelectionService * @param GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode * @param SourceRepositoryInterface $sourceRepository - * @param GetInventoryRequestFromOrderBuilder|null $getInventoryRequestFromOrderBuilder + * @param GetInventoryRequestFromOrder|null $getInventoryRequestFromOrder + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( Context $context, - StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, + $stockByWebsiteIdResolver, ItemRequestInterfaceFactory $itemRequestFactory, - InventoryRequestInterfaceFactory $inventoryRequestFactory, + $inventoryRequestFactory, SourceSelectionServiceInterface $sourceSelectionService, GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode, SourceRepositoryInterface $sourceRepository, - GetInventoryRequestFromOrderBuilder $getInventoryRequestFromOrderBuilder = null + GetInventoryRequestFromOrder $getInventoryRequestFromOrder = null ) { parent::__construct($context); $this->sourceSelectionService = $sourceSelectionService; $this->getDefaultSourceSelectionAlgorithmCode = $getDefaultSourceSelectionAlgorithmCode; $this->sourceRepository = $sourceRepository; - $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; $this->itemRequestFactory = $itemRequestFactory; - $this->getInventoryRequestFromOrderBuilder = $getInventoryRequestFromOrderBuilder ?: - ObjectManager::getInstance()->get(GetInventoryRequestFromOrderBuilder::class); + $this->getInventoryRequestFromOrder = $getInventoryRequestFromOrder ?: + ObjectManager::getInstance()->get(GetInventoryRequestFromOrder::class); } /** @@ -123,7 +116,6 @@ private function getRequestItems(array $requestData): array /** * @inheritdoc * @throws NoSuchEntityException - * @throws UndefinedInventoryRequestBuilderException */ public function execute(): ResultInterface { @@ -137,16 +129,9 @@ public function execute(): ResultInterface $requestData = $postRequest['requestData']; $defaultCode = $this->getDefaultSourceSelectionAlgorithmCode->execute(); $algorithmCode = !empty($postRequest['algorithmCode']) ? $postRequest['algorithmCode'] : $defaultCode; - - //TODO: maybe need to add exception when websiteId empty - $websiteId = (int) $postRequest['websiteId'] ?? 1; - $stockId = (int) $this->stockByWebsiteIdResolver->execute($websiteId)->getStockId(); - $requestItems = $this->getRequestItems($requestData); - $inventoryRequestBuilder = $this->getInventoryRequestFromOrderBuilder->execute($algorithmCode); - $inventoryRequest = $inventoryRequestBuilder->execute($stockId, $orderId, $requestItems); - + $inventoryRequest = $this->getInventoryRequestFromOrder->execute($orderId, $requestItems); $sourceSelectionResult = $this->sourceSelectionService->execute($inventoryRequest, $algorithmCode); foreach ($requestData as $data) { diff --git a/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/GetSourcesByOrderIdStockIdSkuAndQty.php b/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/GetSourcesByOrderIdSkuAndQty.php similarity index 76% rename from app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/GetSourcesByOrderIdStockIdSkuAndQty.php rename to app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/GetSourcesByOrderIdSkuAndQty.php index 1e130712c214..358820e9f2f4 100644 --- a/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/GetSourcesByOrderIdStockIdSkuAndQty.php +++ b/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/GetSourcesByOrderIdSkuAndQty.php @@ -8,18 +8,16 @@ namespace Magento\InventoryShippingAdminUi\Ui\DataProvider; use Magento\Framework\Exception\NoSuchEntityException; -use Magento\InventorySourceSelectionApi\Exception\UndefinedInventoryRequestBuilderException; -use Magento\InventorySourceSelectionApi\Model\GetInventoryRequestFromOrderBuilder; +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 GetSourcesByOrderIdStockIdSkuAndQty - * @package Magento\InventoryShippingAdminUi\Ui\DataProvider + * Class GetSourcesByOrderIdSkuAndQty */ -class GetSourcesByOrderIdStockIdSkuAndQty +class GetSourcesByOrderIdSkuAndQty { /** * @var ItemRequestInterfaceFactory @@ -42,9 +40,9 @@ class GetSourcesByOrderIdStockIdSkuAndQty private $sourceRepository; /** - * @var GetInventoryRequestFromOrderBuilder + * @var GetInventoryRequestFromOrder */ - private $getInventoryRequestFromOrderBuilder; + private $getInventoryRequestFromOrder; /** * @var array @@ -52,12 +50,10 @@ class GetSourcesByOrderIdStockIdSkuAndQty private $sources = []; /** - * GetSourcesByStockIdSkuAndQty constructor. - * * @param ItemRequestInterfaceFactory $itemRequestFactory * @param SourceSelectionServiceInterface $sourceSelectionService * @param GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode - * @param GetInventoryRequestFromOrderBuilder $getInventoryRequestFromOrderBuilder + * @param GetInventoryRequestFromOrder $getInventoryRequestFromOrder * @param SourceRepositoryInterface $sourceRepository * @SuppressWarnings(PHPMD.LongVariable) */ @@ -65,29 +61,27 @@ public function __construct( ItemRequestInterfaceFactory $itemRequestFactory, SourceSelectionServiceInterface $sourceSelectionService, GetDefaultSourceSelectionAlgorithmCodeInterface $getDefaultSourceSelectionAlgorithmCode, - GetInventoryRequestFromOrderBuilder $getInventoryRequestFromOrderBuilder, + GetInventoryRequestFromOrder $getInventoryRequestFromOrder, SourceRepositoryInterface $sourceRepository ) { $this->itemRequestFactory = $itemRequestFactory; $this->sourceSelectionService = $sourceSelectionService; $this->getDefaultSourceSelectionAlgorithmCode = $getDefaultSourceSelectionAlgorithmCode; $this->sourceRepository = $sourceRepository; - $this->getInventoryRequestFromOrderBuilder = $getInventoryRequestFromOrderBuilder; + $this->getInventoryRequestFromOrder = $getInventoryRequestFromOrder; } /** - * Get sources by stock id sku and qty + * Get sources by order id sku and qty * * @param int $orderId - * @param int $stockId * @param string $sku * @param float $qty * @return array * @throws NoSuchEntityException - * @throws UndefinedInventoryRequestBuilderException * @SuppressWarnings(PHPMD.LongVariable) */ - public function execute(int $orderId, int $stockId, string $sku, float $qty): array + public function execute(int $orderId, string $sku, float $qty): array { $algorithmCode = $this->getDefaultSourceSelectionAlgorithmCode->execute(); @@ -96,9 +90,7 @@ public function execute(int $orderId, int $stockId, string $sku, float $qty): ar 'qty' => $qty ]); - $inventoryRequestBuilder = $this->getInventoryRequestFromOrderBuilder->execute($algorithmCode); - $inventoryRequest = $inventoryRequestBuilder->execute($stockId, $orderId, [$requestItem]); - + $inventoryRequest = $this->getInventoryRequestFromOrder->execute($orderId, [$requestItem]); $sourceSelectionResult = $this->sourceSelectionService->execute( $inventoryRequest, $algorithmCode diff --git a/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/SourceSelectionDataProvider.php b/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/SourceSelectionDataProvider.php index 739071b84018..32cefe7eb116 100644 --- a/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/SourceSelectionDataProvider.php +++ b/app/code/Magento/InventoryShippingAdminUi/Ui/DataProvider/SourceSelectionDataProvider.php @@ -31,11 +31,6 @@ class SourceSelectionDataProvider extends AbstractDataProvider */ private $orderRepository; - /** - * @var StockByWebsiteIdResolverInterface - */ - private $stockByWebsiteIdResolver; - /** * @var GetStockItemConfigurationInterface */ @@ -52,9 +47,9 @@ class SourceSelectionDataProvider extends AbstractDataProvider private $sources = []; /** - * @var GetSourcesByOrderIdStockIdSkuAndQty + * @var GetSourcesByOrderIdSkuAndQty */ - private $getSourcesByOrderIdStockIdSkuAndQty; + private $getSourcesByOrderIdSkuAndQty; /** * @param string $name @@ -64,9 +59,9 @@ class SourceSelectionDataProvider extends AbstractDataProvider * @param OrderRepository $orderRepository * @param StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver * @param GetStockItemConfigurationInterface $getStockItemConfiguration - * @param GetSourcesByStockIdSkuAndQty $getSourcesByStockIdSkuAndQty + * @param null $getSourcesByStockIdSkuAndQty @deprecated * @param GetSkuFromOrderItemInterface $getSkuFromOrderItem - * @param GetSourcesByOrderIdStockIdSkuAndQty $getSourcesByOrderIdStockIdSkuAndQty + * @param GetSourcesByOrderIdSkuAndQty $getSourcesByOrderIdSkuAndQty * @param array $meta * @param array $data * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -81,20 +76,19 @@ public function __construct( OrderRepository $orderRepository, StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver, GetStockItemConfigurationInterface $getStockItemConfiguration, - GetSourcesByStockIdSkuAndQty $getSourcesByStockIdSkuAndQty, + $getSourcesByStockIdSkuAndQty, GetSkuFromOrderItemInterface $getSkuFromOrderItem, - GetSourcesByOrderIdStockIdSkuAndQty $getSourcesByOrderIdStockIdSkuAndQty = null, + GetSourcesByOrderIdSkuAndQty $getSourcesByOrderIdSkuAndQty = null, array $meta = [], array $data = [] ) { parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data); $this->request = $request; $this->orderRepository = $orderRepository; - $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; $this->getStockItemConfiguration = $getStockItemConfiguration; $this->getSkuFromOrderItem = $getSkuFromOrderItem; - $this->getSourcesByOrderIdStockIdSkuAndQty = $getSourcesByOrderIdStockIdSkuAndQty ?: - ObjectManager::getInstance()->get(GetSourcesByOrderIdStockIdSkuAndQty::class); + $this->getSourcesByOrderIdSkuAndQty = $getSourcesByOrderIdSkuAndQty ?: + ObjectManager::getInstance()->get(GetSourcesByOrderIdSkuAndQty::class); } /** @@ -137,7 +131,7 @@ public function getData() 'sku' => $sku, 'product' => $this->getProductName($orderItem), 'qtyToShip' => $qty, - 'sources' => $this->getSources($orderId, $stockId, $sku, $qty), + 'sources' => $this->getSources($orderId, $sku, $qty), 'isManageStock' => $this->isManageStock($sku, $stockId) ]; } @@ -157,15 +151,14 @@ public function getData() * Get sources * * @param int $orderId - * @param int $stockId * @param string $sku * @param float $qty * @return array * @throws NoSuchEntityException */ - private function getSources(int $orderId, int $stockId, string $sku, float $qty): array + private function getSources(int $orderId, string $sku, float $qty): array { - $sources = $this->getSourcesByOrderIdStockIdSkuAndQty->execute($orderId, $stockId, $sku, $qty); + $sources = $this->getSourcesByOrderIdSkuAndQty->execute($orderId, $sku, $qty); foreach ($sources as $source) { $this->sources[$source['sourceCode']] = $source['sourceName']; } diff --git a/app/code/Magento/InventoryShippingAdminUi/etc/adminhtml/di.xml b/app/code/Magento/InventoryShippingAdminUi/etc/adminhtml/di.xml index 132a0bbd2689..f2d41f52f6a9 100644 --- a/app/code/Magento/InventoryShippingAdminUi/etc/adminhtml/di.xml +++ b/app/code/Magento/InventoryShippingAdminUi/etc/adminhtml/di.xml @@ -23,4 +23,18 @@ + + + + + + + + + + + + + + diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Address.php b/app/code/Magento/InventorySourceSelection/Model/Address.php similarity index 92% rename from app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Address.php rename to app/code/Magento/InventorySourceSelection/Model/Address.php index 84d9b2a68836..0673e10aae58 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelection/Model/Address.php +++ b/app/code/Magento/InventorySourceSelection/Model/Address.php @@ -5,9 +5,9 @@ */ declare(strict_types=1); -namespace Magento\InventoryDistanceBasedSourceSelection\Model; +namespace Magento\InventorySourceSelection\Model; -use Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data\AddressInterface; +use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface; /** * @inheritdoc diff --git a/app/code/Magento/InventorySourceSelection/Model/InventoryRequestBuilder/FromOrder/DefaultBuilder.php b/app/code/Magento/InventorySourceSelection/Model/InventoryRequestBuilder/FromOrder/DefaultBuilder.php deleted file mode 100644 index 6ef2c9f8dd88..000000000000 --- a/app/code/Magento/InventorySourceSelection/Model/InventoryRequestBuilder/FromOrder/DefaultBuilder.php +++ /dev/null @@ -1,49 +0,0 @@ -inventoryRequestFactory = $inventoryRequestFactory; - } - - /** - * @inheritdoc - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function execute(int $stockId, int $orderId, array $requestItems): InventoryRequestInterface - { - $inventoryRequest = $this->inventoryRequestFactory->create([ - 'stockId' => $stockId, - 'items' => $requestItems - ]); - - return $inventoryRequest; - } -} diff --git a/app/code/Magento/InventorySourceSelection/etc/di.xml b/app/code/Magento/InventorySourceSelection/etc/di.xml index aaf5acda3f4c..30e7d66b5149 100644 --- a/app/code/Magento/InventorySourceSelection/etc/di.xml +++ b/app/code/Magento/InventorySourceSelection/etc/di.xml @@ -17,12 +17,12 @@ type="Magento\InventorySourceSelection\Model\Result\SourceSelectionItem"/> - + - + - - - - Magento\InventorySourceSelection\Model\InventoryRequestBuilder\FromOrder\DefaultBuilder - - - diff --git a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/Data/AddressInterface.php b/app/code/Magento/InventorySourceSelectionApi/Api/Data/AddressInterface.php similarity index 86% rename from app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/Data/AddressInterface.php rename to app/code/Magento/InventorySourceSelectionApi/Api/Data/AddressInterface.php index bbf94d6e89b8..fea3be369f0b 100644 --- a/app/code/Magento/InventoryDistanceBasedSourceSelectionApi/Api/Data/AddressInterface.php +++ b/app/code/Magento/InventorySourceSelectionApi/Api/Data/AddressInterface.php @@ -5,10 +5,10 @@ */ declare(strict_types=1); -namespace Magento\InventoryDistanceBasedSourceSelectionApi\Api\Data; +namespace Magento\InventorySourceSelectionApi\Api\Data; /** - * DTO for shipping source or shipping destination + * Data interface for shipping source or shipping destination * * @api */ diff --git a/app/code/Magento/InventorySourceSelectionApi/Exception/UndefinedInventoryRequestBuilderException.php b/app/code/Magento/InventorySourceSelectionApi/Exception/UndefinedInventoryRequestBuilderException.php deleted file mode 100644 index 30b7542e27c2..000000000000 --- a/app/code/Magento/InventorySourceSelectionApi/Exception/UndefinedInventoryRequestBuilderException.php +++ /dev/null @@ -1,15 +0,0 @@ -getItems() as $item) { $itemSku = $item->getSku(); $qtyToDeliver = $item->getQty(); diff --git a/app/code/Magento/InventorySourceSelectionApi/Model/GetInventoryRequestFromOrder.php b/app/code/Magento/InventorySourceSelectionApi/Model/GetInventoryRequestFromOrder.php new file mode 100644 index 000000000000..c378eb28b0ac --- /dev/null +++ b/app/code/Magento/InventorySourceSelectionApi/Model/GetInventoryRequestFromOrder.php @@ -0,0 +1,127 @@ +inventoryRequestFactory = $inventoryRequestFactory; + $this->inventoryRequestExtensionFactory = $inventoryRequestExtensionFactory; + $this->orderRepository = $orderRepository; + $this->addressInterfaceFactory = $addressInterfaceFactory; + $this->storeManager = $storeManager; + $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; + } + + /** + * Build inventory request based on Order Id and provided request items + * + * @param int $orderId + * @param array $requestItems + */ + public function execute(int $orderId, array $requestItems): InventoryRequestInterface + { + /** @var OrderInterface $order */ + $order = $this->orderRepository->get($orderId); + + $address = $this->getAddressFromOrder($order); + $store = $this->storeManager->getStore($order->getStoreId()); + $stock = $this->stockByWebsiteIdResolver->execute($store->getWebsiteId()); + + $inventoryRequest = $this->inventoryRequestFactory->create([ + 'stockId' => $stock->getStockId(), + 'items' => $requestItems + ]); + + $extensionAttributes = $this->inventoryRequestExtensionFactory->create(); + $extensionAttributes->setDestinationAddress($address); + $inventoryRequest->setExtensionAttributes($extensionAttributes); + + return $inventoryRequest; + } + + /** + * Create an address from an order + * + * @param OrderInterface $order + * @return AddressInterface + */ + private function getAddressFromOrder(OrderInterface $order): AddressInterface + { + /** @var Address $shippingAddress */ + $shippingAddress = $order->getShippingAddress(); + + return $this->addressInterfaceFactory->create([ + 'country' => $shippingAddress->getCountryId(), + 'postcode' => $shippingAddress->getPostcode(), + 'streetAddress' => implode("\n", $shippingAddress->getStreet()), + 'region' => $shippingAddress->getRegion() ?? $shippingAddress->getRegionCode() ?? '', + 'city' => $shippingAddress->getCity() + ]); + } +} diff --git a/app/code/Magento/InventorySourceSelectionApi/Model/GetInventoryRequestFromOrderBuilder.php b/app/code/Magento/InventorySourceSelectionApi/Model/GetInventoryRequestFromOrderBuilder.php deleted file mode 100644 index 68b94057471c..000000000000 --- a/app/code/Magento/InventorySourceSelectionApi/Model/GetInventoryRequestFromOrderBuilder.php +++ /dev/null @@ -1,61 +0,0 @@ -buildersByAlgorithm = $buildersByAlgorithm; - - foreach ($this->buildersByAlgorithm as $code => $builder) { - if (!($builder instanceof InventoryRequestFromOrderBuilderInterface)) { - throw new \InvalidArgumentException( - 'Builder ' . $code . ' must implement InventoryRequestBuilderFromOrderInterface' - ); - } - } - } - - /** - * Get a builder from one algorithm - * - * @param string $algorithm - * @return InventoryRequestFromOrderBuilderInterface - * @throws UndefinedInventoryRequestBuilderException - */ - public function execute(string $algorithm): InventoryRequestFromOrderBuilderInterface - { - if (!isset($this->buildersByAlgorithm[$algorithm])) { - throw new UndefinedInventoryRequestBuilderException( - __('No request builder is defined for algorithm %1', $algorithm) - ); - } - - return $this->buildersByAlgorithm[$algorithm]; - } -} diff --git a/app/code/Magento/InventorySourceSelectionApi/Model/InventoryRequestFromOrderBuilderInterface.php b/app/code/Magento/InventorySourceSelectionApi/Model/InventoryRequestFromOrderBuilderInterface.php deleted file mode 100644 index 5bb9c33d6325..000000000000 --- a/app/code/Magento/InventorySourceSelectionApi/Model/InventoryRequestFromOrderBuilderInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - +