期待在订单提交后开具礼品卡购买发票

时间:2011-06-25 01:45:10

标签: magento observer-pattern orders

我有一个基本的观察功能,可以获取订单中的所有礼品并将其退回:

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你可以在我的评论中看到我的解决方案不太理想,但我不知道还能做什么。

如果有人能为我阐明这一点,我将非常感激。谢谢。

1 个答案:

答案 0 :(得分:0)

报价是订单之前的内容,我猜想在报价相关事件发生时,订单尚未存在,或者是不完整的。也许更合适的行动时间是sales_convert_quote_to_ordersales_order_save_after