我创建了一个事件,检查项目的延期交货数量是否大于零,而不是将订购的产品数量设置为零而不是将其保持为负数,并将其状态更改为缺货但不起作用。< / 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();
}
正如您在代码中看到的那样,我没有做一些复杂的事情,除了尝试更改项目数量并将其状态设置为“缺货”但是当我执行此代码时它不会更改项目的数量或状态。
有人可以告诉我这里的错误吗?
答案 0 :(得分:0)
花了很多时间挖掘后我自己解决了这个问题。我没有使用sales_order_place_after
观察者,而是使用sales_model_service_quote_submit_success
,这是在下订单后由magento运行的最后一个观察者。
这就是我放置代码的地方。