Magento:在发票生成时忽略sales_order_save_after事件

时间:2014-02-11 06:12:06

标签: magento magento-1.7

的Config.xml

<sales_order_save_after>
<observers>
    <iula_crm_order_observer>
        <type>singleton</type>
        <class>iula_Crm_Model_Order_Observer</class>
        <method>sales_order_save_after_crm</method>
    </iula_crm_order_observer>
</observers>

Observer.php

public function sales_order_save_after_crm(Varien_Event_Observer $observer){
    // call api
}

您好,

我的observer.php中有上面的代码,我需要运行此代码,但发票生成除外。这位观察员也在打电话发票,有没有办法检查这个。

2 个答案:

答案 0 :(得分:4)

不幸的是,每次保存订单时都会调用此事件,即下订单,更改状态,开票,发货等

如果您需要调用观察员而不包括发票创建,那么您需要调度自己的事件以隐藏在要监听的操作中。

答案 1 :(得分:0)

您可以做的是检查发票保存的时间(更新)。如果在过去15年内更新了发票,则不要处理您的代码(api调用)。什么时候不处理。您可以将15s修改为任何数字,当然适合您。

要归档此内容,您需要修改如下代码:

    <?php

public function sales_order_save_after_crm(Varien_Event_Observer $observer) {

    try {
        $order=$observer->getOrder();

        $time = time(); //get current time
        $process = true;
        foreach ($order->getInvoiceCollection() as $invoice) {
            $date = null;
            $date = $invoice->getUpdatedAt(); //get invoice updated time
            $timedifference = $time - strtotime($date);
            if ($timedifference < 15):
                $process = false; //Stop processing when invoice was updated in the last 15s
            endif;
        }
        if ($process) {
            //call api
        }
    } catch (Exception $e) {

    }
}
?>

另一个解决方案是,找到另一个事件,当你需要它时会调用什么,但我认为你已经尝试过了。