98
Magento 2 product saleable quantity
Hiya fellow devs, this is my first post here. Please bear with me.
Stock Management in Magento 2 is usually not that difficult before they deprecated the StockRegistryInterface.
This post explains how to get the saleable quantity of a product in Magento 2.
To get this you need product SKU (Stock Keeping unit) and website code of the website you need the saleable quantity for. So now lets get down to code.
First inject the
Magento\InventorySalesApi\Api\StockResolverInterface
and Magento\InventorySalesApi\Api\GetProductSalableQtyInterface
into the constructor of the class.public function __construct(
...
\Magento\InventorySalesApi\Api\StockResolverInterface $stockResolver,
\Magento\InventorySalesApi\Api\GetProductSalableQtyInterface
$getProductSaleableQty
...){
...
$this->stockResolver = $stockResolver;
$this->getProductSaleableQty = $getProductSaleableQty;
}
You have guessed it correctly, we are going to use
GetProductSalableQtyInterface
to get the saleable quantity of the product.Then all that is left is to write the logic. You have to retrieve the stock ID of the stock that is appointed to the website. Then you have to pass the SKU and stock ID to get the saleable quantity. Here stock ID is important and to get that we need to use the
StockResolverInterface
. These terminologies come from MSI feature of Magento.public function getProductSaleableQty($productSku, $websiteCode){
$stockId = $this->stockResolver->execute(SalesChannelInterface::TYPE_WEBSITE, $websiteCode)->getStockId();
try{
$qty = $this->getProductSalableQty->execute($productSku, $stockId);
} catch(Exception $exception){
$qty = 0;
}
return $qty;
}
Here
SalesChannelInterface
is from Magento\InventorySalesApi\Api\Data\SalesChannelInterface
.Just by this stock ID you can get the following details related to stock in Magento 2:
GetSourcesAssignedToStockOrderedByPriorityInterface
StockRepositoryInterface
to get the details of the stock.IsProductAssignedToStockInterface
AreProductsSalableInterface
.AreProductsSalableForRequestedQtyInterface
Hope this helps for someone.
98