Item de estoque não colocar de volta no estoque automaticamente ao atingir positivo inventário
-
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?
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