This is Magento default bug. I just checked and solved the bug and create a pull request in Git.
Please check commit: 28b8863
Override vendor/magento/module-checkout/Model/Cart.php
Pass request qty to the addProduct()
in addProductsByIds()
function
$request = null;
$stockItem = $this->stockRegistry->getStockItem($productId, $product->getStore()->getWebsiteId());
$minimumQty = $stockItem->getMinSaleQty();
if ($minimumQty && $minimumQty > 0) {
$request = $minimumQty;
}
try {
$this->getQuote()->addProduct($product, $request);
} catch (\Exception $e) {
$allAdded = false;
}
Final addProductsByIds()
function look like:
public function addProductsByIds($productIds)
{
$allAvailable = true;
$allAdded = true;
if (!empty($productIds)) {
foreach ($productIds as $productId) {
$productId = (int)$productId;
if (!$productId) {
continue;
}
$product = $this->_getProduct($productId);
if ($product->getId() && $product->isVisibleInCatalog()) {
$request = null;
$stockItem = $this->stockRegistry->getStockItem($productId, $product->getStore()->getWebsiteId());
$minimumQty = $stockItem->getMinSaleQty();
if ($minimumQty && $minimumQty > 0) {
$request = $minimumQty;
}
try {
$this->getQuote()->addProduct($product, $request);
} catch (\Exception $e) {
$allAdded = false;
}
} else {
$allAvailable = false;
}
}
if (!$allAvailable) {
$this->messageManager->addError(__("We don't have some of the products you want."));
}
if (!$allAdded) {
$this->messageManager->addError(__("We don't have as many of some products as you want."));
}
}
return $this;
}
addProductsByIds
in modelMagento\Checkout\Model\Cart
doesn't check forminimumQty