Magento: автоматическое изменение «Наличие на складе» с «Нет на складе» на «На складе» (и наоборот) при изменении количества - PullRequest
7 голосов
/ 24 августа 2011

Итак, я искал способ изменить доступность запаса обратно на склад, когда поле количества больше 0. Система автоматически изменяет доступность запаса на склад, когда вы устанавливаете количество на 0 и сохранить продукт. Я хотел бы получить возможность вернуть его на склад, когда вы установите количество больше 0 и сохраните продукт.

Ну, я думаю, что нашел простой способ, который сам по себе заставляет меня нервничать. Поэтому я хотел написать вам, гуру, чтобы убедиться, что это безопасно, правильно и нормально.

В app / design / adminhtml / default / default / template / catalog / product / tab / inventory.phtml

Я изменил это:

<?php foreach ($this->getStockOption() as $option): ?>
        <?php $_selected = ($option['value'] == $this->getFieldValue('is_in_stock')) ? 'selected="selected"' : '' ?>
        <option value="<?php echo $option['value'] ?>" <?php echo $_selected ?>><?php echo $option['label'] ?></option>
<?php endforeach; ?>

К этому:

<?php if( ($this->getFieldValue('qty')*1) > 0): ?>
        <option selected="selected" value="1">In Stock</option>
<?php else: ?>
    <option selected="selected" value="0">Out of Stock</option>
<?php endif; ?>

Все, над чем я сейчас работаю, это живой сайт, так что вы можете понять мою озабоченность ...

Пожалуйста, дайте мне знать, будет ли это иметь ожидаемый эффект (кажется, но это упрощенно ....)

Ответы [ 5 ]

6 голосов
/ 19 сентября 2012

Полагаю, вы можете использовать событие Magento catalog_product_save_after. Создайте метод наблюдателя, который выполняет следующие действия для события catalog_product_save_after.

public function catalog_product_save_after($observer) {
    $product = $observer->getProduct();
    $stockData = $product->getStockData();

    if ( $product && $stockData['qty'] ) {
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getEntityId()); // Load the stock for this product
        $stock->setData('is_in_stock', 1); // Set the Product to InStock                               
        $stock->save(); // Save
    }
}
1 голос
/ 02 июля 2015

Просто создайте задание cron с этим фрагментом кода:

public function setBackInStock()
{
    $collection = Mage::getResourceModel('cataloginventory/stock_item_collection');
    $outQty = Mage::getStoreConfig('cataloginventory/item/options_min_qty');
    $collection->addFieldToFilter('qty', array('gt' => $outQty));
    $collection->addFieldToFilter('is_in_stock', 0);

    foreach($collection as $item) {
        $item->setData('is_in_stock', 1);
    }
    $collection->save();
}

Небольшая заметка, вы можете установить задание cron на каждую минуту, потому что, если нет результатов, задание не будет отнимать время / ресурсы

0 голосов
/ 22 марта 2018

Другое простое решение - создать хранимую процедуру в БД и вызвать ее с событием

############################################# START : Enable Stock Status
DELIMITER //
CREATE PROCEDURE EnableStock()
BEGIN

-- UPDATE
UPDATE cataloginventory_stock_status
SET stock_status=1
WHERE qty>0;  

-- UPDATE
UPDATE cataloginventory_stock_status
SET stock_status=0
WHERE qty<0;  

END; //
DELIMITER ;

############################################# END : Enable Stock Status

#Create event
CREATE EVENT CallEnableStock
    ON SCHEDULE EVERY 1 HOUR
    DO
      CALL EnableStock();
0 голосов
/ 13 июля 2017

Это то, что я должен был сделать

        var stock_data = new catalogInventoryStockItemUpdateEntity()
        {
            qty = quantity,
            is_in_stock = inStock,
            manage_stock = stockManaged,
            is_in_stockSpecified = true,
        };

is_in_stockSpecified важно

Я использовал SOAP API для обновления состояния запасов.

enter image description here

0 голосов
/ 02 февраля 2012

Текст «Наличие на складе» может быть обработан на вкладке «Инвентаризация» в настройках продукта, на той же вкладке, что и поле «Количество на складе».Так как вам все равно придется вводить количество товара вручную, я бы предложил просто изменить настройку Доступность товара на «В наличии» при вводе нового QTY для вашего продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...