Товар не возвращается на склад автоматически при достижении положительного запаса
Когда количество товаров на складе достигает 0 или отрицательного значения (предоставленные резервные заказы отключены, и количество товаров, которые могут отсутствовать на складе, также равно 0), is_in_stock
автоматически устанавливается в 0.
Однако, когда он затем достигает положительного уровня запасов, is_in_stock
не устанавливается автоматически равным 1. Почему это так?
Рассмотрим следующий пример:
$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();
Товар теперь указан как отсутствующий на складе.
$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();
Товар по-прежнему отсутствует на складе. Не должно ли это быть вернуть на склад?
2 answers
Я запустил grep для "Setisinstock", и есть только несколько мест, где это установлено:
Что я нашел в Mage_CatalogInventory_Model_Stock
и Mage_CatalogInventory_Model_Stock_Item
, так это то, что есть проверка функций этих классов на минимальное количество продукта.
Внутренний параметр для этого (на странице редактирования продукта) - "Количество для статуса товара, чтобы его не было на складе".
Это, например, код в 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;
}
И проверить запас, который также проверяет наличие минимального количества: $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;
}
Возможное решение:
Я предполагаю, что у вас есть минимальный набор количества, превышающий "1".
Обновление:
Как проверено в комментариях ниже, значение is_in_stock
не возвращается при обновлении продукта в бэкэнде.
Похоже, единственное место, где товар по умолчанию устанавливается на складе, - это метод backItemQty()
в Mage_CatalogInventory_Model_Stock
, когда заказ отменен/возвращен.
Для других, читающих это: в magento connect есть бесплатный модуль, который делает именно то, что вы ищете. Автоматическое переключение уровня запасов на "на складе", когда он вернется к положительным числам >0
Я думаю, что этого не хватает в Magento, и это должно было быть реализовано во всех магазинах Magento!
Https://www.magentocommerce.com/magento-connect/back-in-stock-status-update.html