我有一个基本的观察功能,可以获取订单中的所有礼品并将其退回:
public function invoiceGiftCards($observer){
$order = $observer->getEvent()->getOrder();
// get all items
$gift_cards = $order->getItemsCollection(array('giftcard'));
Mage::log('getSize(): ' . $gift_cards->getSize());
// code to auto-create invoice
...
}
与此事件相关:
<sales_model_service_quote_submit_after>
<observers>
<company_invoice_gift_cards>
<type>singleton</type>
<class>Company_Module_Model_Observer</class>
<method>invoiceGiftCards</method>
</company_invoice_gift_cards>
</observers>
</sales_model_service_quote_submit_after>
但我发现,该函数的集合每次都返回空。即使是明显有礼品卡的订单:
2011-06-25T01:33:38+00:00 DEBUG (7): getSize(): 0
更奇怪的是,如果我在系统中的任意顺序(作为控制器的一部分)运行相同的getItemsCollection(array('giftcard'))
,它就可以正常工作。
就好像尚未完成储蓄。我应该尝试另一个观察者吗? (我也试过checkout_submit_all_after
笑,没有骰子。
当订单等交易发生时,似乎存在操作顺序。我之前遇到过类似的问题:Creating Invoice & Capturing on Shipment你可以在我的评论中看到我的解决方案不太理想,但我不知道还能做什么。
如果有人能为我阐明这一点,我将非常感激。谢谢。
答案 0 :(得分:0)
报价是订单之前的内容,我猜想在报价相关事件发生时,订单尚未存在,或者是不完整的。也许更合适的行动时间是sales_convert_quote_to_order
或sales_order_save_after
。