我们有一些API集成,会定期为订单创建货件.
我想做的是创建一个观察员,以便在创建此货件时创建适当的发票和捕获付款.我把它绑在sales_order_shipment_save_after
:
public function autoInvoice($observer){
$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();
$items = $shipment->getItemsCollection();
$qty = array();
foreach($items as $item)
$qty[$item['order_item_id']] = $item['qty'];
$invoice = Mage::getModel('sales/order_invoice_api');
$invoiceId = $invoice->create($order->getIncrementId(), $qty);
$invoice->capture($invoiceId);
}
Run Code Online (Sandbox Code Playgroud)
(实际捕获的代码有些天真,但请耐心等待.)
奇怪的是,这段代码运作正常 - 货件已创建,发票已创建并标记为"付费".但是,订单本身仍处于不确定状态,并保持"待定"状态.
进一步研究,订单上的物品本身具有订购和发货的正确数量,但没有已开票的数量清单.我认为这是造成状态挂断的原因.就好像qty_invoiced
sales_order_item表上的某个表格会以某种方式被还原.
同样,发票显示正确的项目,所以我在这里很困惑.
有任何想法吗?
我一直在看salesrule_coupon
表,我发现如果规则本身是"自动"类型,我可以将许多优惠券代码映射到单个规则.这非常方便,因为我的客户需要我们定期将代码与数据源同步.
因此,在加载这些数千个代码(使用自定义模块和直接SQL调用)时,它们加载得很好,我可以测试并验证它们中的许多代码是否正常工作.
然而,在这些代码列表中,我们停止工作.前30个左右可以正常工作,但此后,Magento说代码无效.
我还在调试这个,如果我发现任何东西,我会发布更新......但是我已经尝试过并且经历了两个单独的价格规则.第31条代码中有一条规则,第39条则是第二条规则.
真正奇怪的是,如果我将这些代码更改为指向不同的规则(少于30个代码的规则),则会识别并接受它们.没有其他改变,我可以确定.
关于如何在这里进行的任何想法?有没有人尝过这个?这是一个有趣的.