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

时间:2011-10-28 09:46:10

标签: magento

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

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

我可以将此添加到货件观察员,但订单可能有多次装运,因此不正确。

或者我总是可以解雇一个cron作业来计算最后一小时的顺序但是再次看起来并不正确。

有关正确方法的建议。

2 个答案:

答案 0 :(得分: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
    }
}

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

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

答案 1 :(得分:0)

** magento订单完成并取消数量更改数据库观察者的递增和递减 ** 零/ SalesOderafter / config.xml中

    <config>
    <modules>
   <Zero_SalesOrderafter>
    <version>0.1.0</version>
  </Zero_SalesOrderafter>
  </modules>
  <global>
   <events>
   <sales_order_save_after>
            <observers>
                 <ordercancel>
                    <type>singleton</type>
                    <class>Zero_SalesOrderafter_Model_Observer</class>
                    <method>canCancelOrder</method>
                 </ordercancel>
            </observers>
     </sales_order_save_after>
   </events>
   </global>
    </config>

 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');
    }       

     }
     ?>