Товар не возвращается на склад автоматически при достижении положительного запаса


Когда количество товаров на складе достигает 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();

Товар по-прежнему отсутствует на складе. Не должно ли это быть вернуть на склад?

Author: Moose, 2015-07-01

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, когда заказ отменен/возвращен.

 2
Author: Anna Völkl, 2015-07-01 14:50:51

Для других, читающих это: в magento connect есть бесплатный модуль, который делает именно то, что вы ищете. Автоматическое переключение уровня запасов на "на складе", когда он вернется к положительным числам >0

Я думаю, что этого не хватает в Magento, и это должно было быть реализовано во всех магазинах Magento!

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

 1
Author: maurisource web, 2016-09-29 19:00:25