Item de estoque não colocar de volta no estoque automaticamente ao atingir positivo inventário

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

  •  13-12-2019
  •  | 
  •  

Pergunta

Quando um item de estoque atinge QTD 0 ou negativo (concedido em atraso são deficientes e com uma QUANTIDADE para o item ficar fora de estoque é 0), is_in_stock é definido para 0 automaticamente.

No entanto, quando então atinge uma positiva nível de estoque, is_in_stock não é automaticamente definido para 1.Por que é assim?

Considere o seguinte exemplo:

$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();

O produto está agora listado como fora de estoque.

$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();

O produto continua fora de estoque.No caso de não ser colocada de volta em estoque?

Foi útil?

Solução

Eu corri um grep para "setIsInStock" e há apenas alguns lugares onde esta é definida:

O que eu encontrei no Mage_CatalogInventory_Model_Stock e Mage_CatalogInventory_Model_Stock_Item é, que há um check-as funções dessas classes para a quantidade mínima do produto.O back-end para definir esse (o produto editar página) é "Qty para Status do Item de Ficar Fora de Estoque".

Este é, por exemplo, o código 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;
    }

e verifyStock que também verifica a quantidade mínima: $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;
    }

Solução possível:

Meu palpite é que você tem uma quantidade mínima, que é maior do que "1".

Atualização:

Como testado nos comentários abaixo, o is_in_stock o valor não está definido de volta ao atualizar um produto no backend.Parece que o único lugar onde um produto é definido em estoque, por padrão, é backItemQty() método em Mage_CatalogInventory_Model_Stock quando um pedido é cancelado/devolvidos.

Outras dicas

para outros lendo isso:dispõe de módulo no magento connect faz exatamente o que você está procurando.Mudar o nível de inventário automaticamente no estoque, quando ele está de volta em números positivos > 0

Eu acho que é uma falta no Magento e este deveria ter sido implementado em todas as lojas Magento!

https://www.magentocommerce.com/magento-connect/back-in-stock-status-update.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top