收到processing状态后,我需要自动在订单上创建发票.在我的扩展中应该遵守哪个事件来实现这一目标?
我正在尝试,但这段代码不起作用,它可以是什么?
etc/modules中的.xml
<?xml version="1.0"?>
<config>
<modules>
<Atwix_Orderhook>
<active>true</active>
<codePool>community</codePool>
</Atwix_Orderhook>
</modules>
</config>
Run Code Online (Sandbox Code Playgroud)
app/code /中的config.xml
<?xml version="1.0"?>
<config>
<modules>
<Atwix_Orderhook>
<version>1.0</version>
</Atwix_Orderhook>
</modules>
<global>
<models>
<orderhook>
<class>Atwix_Orderhook_Model</class>
</orderhook>
</models>
<events>
<sales_order_save_after>
<observers>
<auto_invoice_order>
<type>singleton</type>
<class>Atwix_Orderhook_Model_Observer</class>
<method>implementOrderStatus</method>
</auto_invoice_order>
</observers>
</sales_order_save_after>
</events>
</global>
</config>
Run Code Online (Sandbox Code Playgroud)
Oberver.php在app/code/...
<?php
class Atwix_Orderhook_Model_Observer
{
public function implementOrderStatus($event)
{
$order = $event->getOrder();
if ($order == 'processing') {
if ($order->canInvoice())
$this->_processOrderStatus($order);
}
return $this;
}
private function _processOrderStatus($order)
{
$invoice = $order->prepareInvoice();
$invoice->register();
Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder())
->save();
$invoice->sendEmail(false, '');
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以观察sales_order_save_after并检查您所定位的订单状态,例如:
public function exampleEventHandler(Varien_Event_Observer $observer)
{
/* @var Mage_Sales_Model_Order $order */
$order = $observer->getOrder();
$stateProcessing = $order::STATE_PROCESSING;
// Only trigger when an order enters processing state.
if ($order->getState() == $stateProcessing && $order->getOrigData('state') != $stateProcessing) {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11834 次 |
| 最近记录: |