我正在开发 magento 1.6.1.0 版本。在发货生成或订单状态完成后,我没有发现任何要调用的事件。然后我在订单状态完成时调用我们的模块观察者。
订单状态完成后,我想更新客户属性值。
请给我这个问题的答案。
我有搜索并做各种事情,但它们没有用。
我正在开发 magento 1.6.1.0 版本。在发货生成或订单状态完成后,我没有发现任何要调用的事件。然后我在订单状态完成时调用我们的模块观察者。
订单状态完成后,我想更新客户属性值。
请给我这个问题的答案。
我有搜索并做各种事情,但它们没有用。
首先要开始的地方是sales_order_save_after
活动。这肯定会起作用,但会在订单更新和保存时调用。因此,逻辑必须考虑何时新创建并立即完成订单,或者稍后将订单标记为完成(后者是最常见的)。您可能需要根据取消、多个订单等调整订单的逻辑和可接受的最终状态值。
/**
* Update customer attribute when order is completed.
*
* Need to catch two conditions:
* 1) Order is new AND `status` = complete
* 2) Order exists but `status` is changed to complete
*
* @param $obs Varien_Event_Observer
*/
public function adjustCustomerAfterComplete($obs)
{
/* @var $order Mage_Sales_Model_Order */
$order = $obs->getOrder();
if ($order->getStatus() === $order::STATE_COMPLETE
&& $order->getOrigData('status' !== $order::STATE_COMPLETE))
{
Mage::getModel('customer/customer')
->load($order->getCustomerId())
->setCustomAttr('new val') //custom attr code
->save();
//Another approach if you don't need events, etc.:
/*
$obj = new Varien_Object(
array(
'entity_id'=>$order->getCustomerId(),
'custom_attr'=>'new val'
)
);
Mage::getResourceModel('customer/customer')
->saveAttribute($obj,'custom_attr');
*/
}
}