Magento:订单状态的观察者已完成

The*_*yom 7 magento

在Magento,我正在开发一个佣金模块,我需要在销售完成时支付我的代理,而不是在下订单时.

理想情况下,我希望在订单状态变为"完成"时捕获它,但我还没有找到观察者这样做?

我可以将这个添加到货运观察员,但订单可以有多个货物,因此不对.

或者,我总是可以解雇一个cron作业来计算最后一小时的顺序,但似乎也不是正确的方法.

关于什么是正确的方法的任何建议.

Syl*_*ayé 23

使用观察者"sales_order_save_commit_after"或"sales_order_invoice_pay",您可以获得订单状态,并根据您所做的状态.这是一个例子:

// for event sales_order_save_commit_after
public function commissionCalculationOnComplete($observer)
{
    $order = $observer->getOrder();
    if($order->getState() == Mage_Sales_Model_Order::STATE_COMPLETE){
    // do your order complete stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

// Event sales_order_invoice_pay
public function triggerProvisionCalculation ($observer)
{
    $invoice = $observer->getEvent()->getInvoice();
    switch ($invoice->getState()) {
        case Mage_Sales_Model_Order_Invoice::STATE_PAID :
            //do your stuff
            break;
    }
    return $this;
}
Run Code Online (Sandbox Code Playgroud)

您必须检查两次不进行计算,因为每次保存订单时都会触发此方法.

  • 两个事件之间的区别在于提交事件,您可以在数据库中完成提交后执行逻辑.这意味着如果您保存订单并在提交后使用该事件,则您的数据库是最新的.如果您需要来自数据库的信息而不是直接来自对象,并且您希望确保数据库中的所有内容都正常,那么它非常有用.如果您使用事件'sales_order_save_after',则对象$ order可能没问题但数据库的语句仍然被事务锁定,并且可能发生错误并且数据的完整性可能不稳定. (9认同)