Skip to content

Commit

Permalink
MSI-2719: MSI-2719: Introduce a Bulk version of IsProductSalableForRe…
Browse files Browse the repository at this point in the history
…questedQtyInterface API.
  • Loading branch information
nmalevanec committed Jan 29, 2020
1 parent d00588d commit 6a338ae
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 77 deletions.
18 changes: 9 additions & 9 deletions InventorySales/Model/AreProductsSalableForRequestedQty.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

use Magento\Framework\Exception\LocalizedException;
use Magento\InventorySalesApi\Api\AreProductsSalableForRequestedQtyInterface;
use Magento\InventorySalesApi\Api\Data\AreProductsSalableResultInterface;
use Magento\InventorySalesApi\Api\Data\AreProductsSalableResultInterfaceFactory;
use Magento\InventorySalesApi\Api\Data\ProductsSalableResultInterface;
use Magento\InventorySalesApi\Api\Data\ProductsSalableResultInterfaceFactory;
use Magento\InventorySalesApi\Api\IsProductSalableForRequestedQtyInterface;
use Psr\Log\LoggerInterface;

Expand All @@ -30,29 +30,29 @@ class AreProductsSalableForRequestedQty implements AreProductsSalableForRequeste
private $logger;

/**
* @var AreProductsSalableResultInterfaceFactory
* @var ProductsSalableResultInterfaceFactory
*/
private $areProductsSalableResultInterfaceFactory;
private $productsSalableResultFactory;

/**
* @param IsProductSalableForRequestedQtyInterface $isProductSalableForRequestedQtyInterface
* @param AreProductsSalableResultInterfaceFactory $areProductsSalableResultInterfaceFactory
* @param ProductsSalableResultInterfaceFactory $productsSalableResultFactory
* @param LoggerInterface $logger
*/
public function __construct(
IsProductSalableForRequestedQtyInterface $isProductSalableForRequestedQtyInterface,
AreProductsSalableResultInterfaceFactory $areProductsSalableResultInterfaceFactory,
ProductsSalableResultInterfaceFactory $productsSalableResultFactory,
LoggerInterface $logger
) {
$this->isProductSalableForRequestedQtyInterface = $isProductSalableForRequestedQtyInterface;
$this->logger = $logger;
$this->areProductsSalableResultInterfaceFactory = $areProductsSalableResultInterfaceFactory;
$this->productsSalableResultFactory = $productsSalableResultFactory;
}

/**
* @inheritDoc
*/
public function execute(array $skuRequests, int $stockId): AreProductsSalableResultInterface
public function execute(array $skuRequests, int $stockId): ProductsSalableResultInterface
{
$results = [];
foreach ($skuRequests as $sku => $quantity) {
Expand All @@ -67,6 +67,6 @@ public function execute(array $skuRequests, int $stockId): AreProductsSalableRes
}
}

return $this->areProductsSalableResultInterfaceFactory->create(['results' => $results]);
return $this->productsSalableResultFactory->create(['results' => $results]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
use Magento\Framework\Model\Context;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Registry;
use Magento\InventorySalesApi\Api\Data\AreProductsSalableResultExtensionInterface;
use Magento\InventorySalesApi\Api\Data\AreProductsSalableResultInterface;
use Magento\InventorySalesApi\Api\Data\ProductsSalableResultExtensionInterface;
use Magento\InventorySalesApi\Api\Data\ProductsSalableResultInterface;

/**
* @inheritDoc
*/
class AreProductSalableResult extends AbstractExtensibleModel implements AreProductsSalableResultInterface
class ProductsSalableResult extends AbstractExtensibleModel implements ProductsSalableResultInterface
{
/**
* @var array
Expand Down Expand Up @@ -62,23 +62,23 @@ public function __construct(
/**
* @inheritDoc
*/
public function getAreSalable(): array
public function getSalable(): array
{
return $this->results;
}

/**
* @inheritDoc
*/
public function getExtensionAttributes(): ?AreProductsSalableResultExtensionInterface
public function getExtensionAttributes(): ?ProductsSalableResultExtensionInterface
{
return $this->_getExtensionAttributes();
}

/**
* @inheritDoc
*/
public function setExtensionAttributes(AreProductsSalableResultExtensionInterface $extensionAttributes): void
public function setExtensionAttributes(ProductsSalableResultExtensionInterface $extensionAttributes): void
{
$this->_setExtensionAttributes($extensionAttributes);
}
Expand Down
12 changes: 2 additions & 10 deletions InventorySales/Model/CheckItemsQuantity.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,19 @@
*/
class CheckItemsQuantity
{
/**
* @deprecated
* @see AreProductsSalableForRequestedQty
* @var IsProductSalableForRequestedQtyInterface
*/
private $isProductSalableForRequestedQty;

/**
* @var AreProductsSalableForRequestedQtyInterface
*/
private $areProductsSalableForRequestedQty;

/**
* @param IsProductSalableForRequestedQtyInterface $isProductSalableForRequestedQty
* @param IsProductSalableForRequestedQtyInterface $isProductSalableForRequestedQty @deprecated
* @param AreProductsSalableForRequestedQtyInterface $areProductsSalableForRequestedQty
*/
public function __construct(
IsProductSalableForRequestedQtyInterface $isProductSalableForRequestedQty,
AreProductsSalableForRequestedQtyInterface $areProductsSalableForRequestedQty = null
) {
$this->isProductSalableForRequestedQty = $isProductSalableForRequestedQty;
$this->areProductsSalableForRequestedQty = $areProductsSalableForRequestedQty ?: ObjectManager::getInstance()
->get(AreProductsSalableForRequestedQtyInterface::class);
}
Expand All @@ -54,7 +46,7 @@ public function __construct(
public function execute(array $items, int $stockId): void
{
$result = $this->areProductsSalableForRequestedQty->execute($items, $stockId);
foreach ($result->getAreSalable() as $isSalable) {
foreach ($result->getSalable() as $isSalable) {
if (false === $isSalable->isSalable()) {
$errors = $isSalable->getErrors();
/** @var ProductSalabilityErrorInterface $errorMessage */
Expand Down
9 changes: 2 additions & 7 deletions InventorySales/etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -132,15 +132,10 @@
</argument>
</arguments>
</virtualType>
<virtualType name="AreProductsSalableForRequestedQtyConditionChainOnPlaceOrder" type="Magento\InventorySales\Model\AreProductsSalableForRequestedQty">
<type name="Magento\InventorySales\Model\AreProductsSalableForRequestedQty">
<arguments>
<argument name="isProductSalableForRequestedQty" xsi:type="object">IsProductSalableForRequestedQtyConditionChainOnPlaceOrder</argument>
</arguments>
</virtualType>
<type name="Magento\InventorySales\Model\CheckItemsQuantity">
<arguments>
<argument name="areProductsSalableForRequestedQty" xsi:type="object">AreProductsSalableForRequestedQtyConditionChainOnPlaceOrder</argument>
</arguments>
</type>
<type name="Magento\CatalogInventory\Model\StockManagement">
<plugin name="process_back_item_qty" type="Magento\InventorySales\Plugin\CatalogInventory\StockManagement\ProcessBackItemQtyPlugin"/>
Expand Down Expand Up @@ -185,5 +180,5 @@
type="Magento\InventoryCatalog\Plugin\InventoryConfigurationApi\GetStockItemConfiguration\LoadIsInStockPlugin"/>
</type>
<preference for="Magento\InventorySalesApi\Model\GetSkuFromOrderItemInterface" type="Magento\InventorySales\Model\GetSkuFromOrderItem"/>
<preference for="Magento\InventorySalesApi\Api\Data\AreProductsSalableResultInterface" type="Magento\InventorySales\Model\AreProductsSalableForRequestedQty\AreProductSalableResult"/>
<preference for="Magento\InventorySalesApi\Api\Data\ProductsSalableResultInterface" type="Magento\InventorySales\Model\AreProductsSalableForRequestedQty\ProductsSalableResult"/>
</config>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace Magento\InventorySalesApi\Api;

use Magento\InventorySalesApi\Api\Data\AreProductsSalableResultInterface;
use Magento\InventorySalesApi\Api\Data\ProductsSalableResultInterface;

/**
* Service which detects whether a given products quantities are salable for a given stock (stock data + reservations).
Expand All @@ -21,7 +21,7 @@ interface AreProductsSalableForRequestedQtyInterface
*
* @param array $skuRequests array('sku' => 'quantity', ..., ...)
* @param int $stockId
* @return \Magento\InventorySalesApi\Api\Data\AreProductsSalableResultInterface
* @return \Magento\InventorySalesApi\Api\Data\ProductsSalableResultInterface
*/
public function execute(array $skuRequests, int $stockId): AreProductsSalableResultInterface;
public function execute(array $skuRequests, int $stockId): ProductsSalableResultInterface;
}
42 changes: 0 additions & 42 deletions InventorySalesApi/Api/Data/AreProductsSalableResultInterface.php

This file was deleted.

42 changes: 42 additions & 0 deletions InventorySalesApi/Api/Data/ProductsSalableResultInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\InventorySalesApi\Api\Data;

use Magento\Framework\Api\ExtensibleDataInterface;

/**
* Represents result of service \Magento\InventorySalesApi\Api\AreProductsSalableForRequestedQtyInterface::execute()
*
* @api
*/
interface ProductsSalableResultInterface extends ExtensibleDataInterface
{
/**
* Retrieve is salable results.
*
* @return \Magento\InventorySalesApi\Api\Data\ProductSalableResultInterface[]
*/
public function getSalable(): array;

/**
* Retrieve existing extension attributes object.
*
* @return \Magento\InventorySalesApi\Api\Data\ProductsSalableResultExtensionInterface|null
*/
public function getExtensionAttributes(): ?ProductsSalableResultExtensionInterface;

/**
* Set an extension attributes object.
*
* @param \Magento\InventorySalesApi\Api\Data\ProductsSalableResultExtensionInterface $extensionAttributes
* @return void
*/
public function setExtensionAttributes(
\Magento\InventorySalesApi\Api\Data\ProductsSalableResultExtensionInterface $extensionAttributes
): void;
}

0 comments on commit 6a338ae

Please sign in to comment.