2014-02-11 42 views
0

的Config.xmlMagento的:sales_order_save_after發票事件忽略產生

<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我需要運行這個代碼,除了發票生成。這位觀察員也在呼籲發票,有沒有辦法檢查這個。

回答

4

不幸的是這個事件被稱爲每次訂單保存即順序放置時間,狀態改變,發票,運等

如果您需要觀測被稱爲不含發票創建那麼你就需要派遣自己事件掛鉤在偵聽的動作中。

+0

謝謝史蒂文。我創建了我的自定義事件。 –

+0

不客氣尼利什,你可以投票並標記爲答案,如果這是你在找什麼。 :) – Steven

0

你可以做的是檢查什麼時候發票保存(更新。)如果它在過去15s內更新,那麼不要處理你的代碼(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) { 

    } 
} 
?> 

另一個解決辦法是,找到一個當你需要它的另一個事件,什麼被調用,但我相信你試過了已經。