在Magento上,我正在开发一个佣金模块,我需要在销售完成时支付我的代理商,而不是在下订单时。
理想情况下,我希望在订单状态变为“完成”时捕获它。但是我没有找到一个观察者这样做?
我可以将此添加到货件观察员,但订单可能有多次装运,因此不正确。
或者我总是可以解雇一个cron作业来计算最后一小时的顺序但是再次看起来并不正确。
有关正确方法的建议。
答案 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');
}
}
?>