L'article en stock n'est pas remis en stock automatiquement une fois l'inventaire positif atteint

magento.stackexchange https://magento.stackexchange.com//questions/72756

  •  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 ?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top