Magento - 在sales_order_place_after事件中,产品数量和状态的更改无效

时间:2016-07-03 21:41:22

标签: magento magento-1.9

我创建了一个事件,检查项目的延期交货数量是否大于零,而不是将订购的产品数量设置为零而不是将其保持为负数,并将其状态更改为缺货但不起作用。< / p>

config.xml中

<sales_order_place_after>
                <observers>
                    <some_random>
                        <class>My_Model_Observer</class>
                        <method>checkBackOrder</method>
                    </some_random>
                </observers>
            </sales_order_place_after>

Observer.php

public function checkBackOrder($observer)
    {
        $order = $observer->getOrder();
        $customer = $order->getCustomer();
            foreach ($order->getAllItems() as $item)
            {
                if ($item->getProductType() == 'simple') {
                    $product = Mage::getModel("catalog/product")->load($item->getProductId());

                    if ($item->getQtyBackordered() > 0) {
                        $webQty = $product->getStockItem()->getQty();
                    if ($webQty <= 0) {
                        $this->_changeStockStatus($product);
                      }
                    }
                }
            }
    }

protected function _changeStockStatus($product)
    {
        $webStockId = Mage::app()->getWebsite()->getStockId();
        $store = Mage::app()->getStore()->getStoreId();

        $stockItem = Mage::getModel('cataloginventory/stock_item')->setStoreId($store)->loadByProduct($product->getId());
        $stockItem->setData('qty', 0);
        $stockItem->setIsInStock(false)->setStockId($webStockId)->save();
    }

正如您在代码中看到的那样,我没有做一些复杂的事情,除了尝试更改项目数量并将其状态设置为“缺货”但是当我执行此代码时它不会更改项目的数量或状态。

有人可以告诉我这里的错误吗?

1 个答案:

答案 0 :(得分:0)

花了很多时间挖掘后我自己解决了这个问题。我没有使用sales_order_place_after观察者,而是使用sales_model_service_quote_submit_success,这是在下订单后由magento运行的最后一个观察者。

这就是我放置代码的地方。