L'article en stock n'est pas remis en stock automatiquement une fois l'inventaire positif atteint
-
13-12-2019 - |
Question
Lorsqu'un article en stock atteint la quantité 0 ou négative (les commandes en souffrance accordées sont désactivées et la quantité pour l'article en rupture de stock est également 0), is_in_stock
est automatiquement mis à 0.
Cependant, lorsqu'il atteint ensuite un niveau de stock positif, is_in_stock
n’est pas automatiquement mis à 1.pourquoi est-ce le cas?
Prenons l'exemple suivant :
$product = Mage::getModel('catalog/product')->load($product_id); //where $product_id is an in stock product
$stock_item = $product->getStockItem();
$stock_item->setQty(0);
$stock_item->save();
Le produit est désormais répertorié comme étant en rupture de stock.
$product = Mage::getModel('catalog/product')->load($product_id); //where $product_id is the product now out of stock
$stock_item = $product->getStockItem();
$stock_item->setQty(1);
$stock_item->save();
Le produit reste en rupture de stock.Ne faut-il pas le remettre en stock ?
La solution
J'ai exécuté un grep pour "setIsInStock" et il n'y a que quelques endroits où cela est défini :
Ce que j'ai trouvé dans Mage_CatalogInventory_Model_Stock
et Mage_CatalogInventory_Model_Stock_Item
c'est-à-dire qu'il y a un contrôle des fonctions de ces classes pour la quantité minimale du produit.Le paramètre backend pour cela (sur la page de modification du produit) est « Quantité pour que le statut de l'article devienne en rupture de stock ».
C'est par exemple le code dans Mage_CatalogInventory_Model_Stock_Item
:
/**
* Before save prepare process
*
* @return Mage_CatalogInventory_Model_Stock_Item
*/
protected function _beforeSave()
{
//...
$isQty = Mage::helper('catalogInventory')->isQty($typeId);
if ($isQty) {
if (!$this->verifyStock()) {
$this->setIsInStock(false)
->setStockStatusChangedAutomaticallyFlag(true);
}
//.....
} else {
$this->setQty(0);
}
return $this;
}
et verifyStock qui vérifie également le quantité minimum: $qty <= $this->getMinQty()
/**
* Chceck if item should be in stock or out of stock based on $qty param of existing item qty
*
* @param float|null $qty
* @return bool true - item in stock | false - item out of stock
*/
public function verifyStock($qty = null)
{
if ($qty === null) {
$qty = $this->getQty();
}
if ($this->getBackorders() == Mage_CatalogInventory_Model_Stock::BACKORDERS_NO && $qty <= $this->getMinQty()) {
return false;
}
return true;
}
Solution possible:
Je suppose que vous avez défini une quantité minimale supérieure à "1".
Mise à jour:
Comme testé dans les commentaires ci-dessous, le is_in_stock
la valeur n’est pas rétablie lors de la mise à jour d’un produit dans le backend.Il semble que le seul endroit où un produit est mis en stock par défaut soit backItemQty()
méthode dans Mage_CatalogInventory_Model_Stock
lorsqu'une commande est annulée/retournée.
Autres conseils
Pour les autres lisant ceci: il y a un module libre sur Magento Connect fait exactement ce que vous recherchez.Basculer le niveau d'inventaire automatiquement en stock lorsqu'il est de retour dans les numéros positifs> 0
Je pense que c'est un manque de magentaine et cela aurait dû être mis en œuvre dans tous les magasins magento!
https://www.magentocommerce.com/Magento-Connect / Back-in-Stock-Status-Update.html