Magento:注文状態のオブザーバーが完了しました

Magentoでは、注文が行われたときではなく、売り上げが完了したときに代理人に支払う手数料モジュールを開発しています。

理想的には、注文状態が「完了」に変わったときにキャプチャしたいと思いますが、これを行うにはオブザーバーが見つかりませんでしたか?

私はこれを出荷オブザーバーに追加することができますが、注文は複数の出荷を持つことができ、したがって正しくはありません。

代わりに、私は最後の1時間の注文を計算するためにいつもcronの仕事をすることができましたが、もう一度正しい方法ではないようです。

これを行う正しい方法は何かに関する提案。

6

2 答え

オブザーバー "sales_order_save_commit_after"または "sales_order_invoice_pay"を使用すると、注文ステータスを取得したり、希望するステータスに応じてステータスを取得することができます。次に例を示します。

// fまたは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
    }
}

または

// 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;
}

この方法は、注文が保存されるたびにトリガーされるため、計算を2回行わないことを確認する必要があります。

23
追加された
sales_order_invoice_save_after イベントは、この用途におそらく適しています。
追加された 著者 Jongosi,
($ this - > _ eventPrefix。 'save_commit_after'‌ $ this - > _ getEventData()); このイベントは、/code>
追加された 著者 Sylvain Rayé,
両方のイベントの違いはコミットイベントです。コミットがデータベースで行われた後でロジックを実行できます。これは、注文を保存していて、コミット後にイベントを使用すると、データベースが最新であることを意味します。データベースからの必要情報がオブジェクトから直接ではなく、db内のすべてがOKであることを確認したい場合に便利です。 'ales_order_save_after 'というイベントを使用すると、オブジェクト$ orderは正常ですが、データベースのステートメントはトランザクションによってロックされているため、エラーが発生し、データの整合性が不安定になる可能性があります。
追加された 著者 Sylvain Rayé,
@ Jongosiあなたのロジックを実行するために注文が完了したことを本当に知る必要がある場合はどうすればよいですか?私は、請求書の支払いよりも注文の状態を見ることが安全だと思います。注文をキャンセルして顧客に払い戻すことを選択する可能性があります。これは、すべてを整理し直すために家を建てなければならないということです。
追加された 著者 burntblark,
ありがとう。簡単な質問:sales_order_save_commit_afterまたはsales_order_save_afterを使用する必要がありますか?/app/code/coreに「grep -ri」を実行したときに、これらがどこに呼び出されているのかわかりませんでした。
追加された 著者 TheVyom,
ありがとうDiglin。葬儀は大いに役立ちます。あなたが提案したように、データベースがロックされていないことを確認するためにcommit_afterを使用することが最大の意味を持ちます。迅速かつ適切な対応に感謝します。
追加された 著者 TheVyom,

** magentoオーダーが完了し、データベースオブザーバー上で増減するときに量の変化がキャンセルされます。 ** ゼロ/ SalesOderafter/config.xml

    
    
   
    0.1.0
  
  
  
   
   
            
                 
                    singleton
                    Zero_SalesOrderafter_Model_Observer
                    canCancelOrder
                 
            
     
   
   
    

 path:Zero/SalesOrderafter/Observer.php
  class Wli_SalesOrderafter_Model_Observer 
   {
  public function canCancelOrder( Varien_Event_Observer $observer )
  { 
     $data = $observer->getEvent()->getOrder();
   if($data->getId())
    {
     $ProdustIds=array();
    foreach ($data->getAllVisibleItems() as $item)
     {
      $ProdustIds= $item->getProductId();
      }        
     } 
      $qty = $data->getData('total_qty_ordered');
      $order_status = $data->getStatus();
      $incrementId = $data->getData('increment_id');
    }       

     }
     ?>
0
追加された
それは私のための仕事です!!!!!
追加された 著者 B.dinesh,