5

注文の出荷を定期的に作成するいくつかの 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);

}

(実際のキャプチャのコードはやや単純ですが、ご容赦ください。)

奇妙なことに、このコードは問題なく機能します。出荷が作成され、請求書が作成され、「支払い済み」としてマークされます。ただし、注文自体は未解決のままで、ステータスは「保留中」のままです。

さらに調べてみると、注文自体の商品には注文済みと出荷済みの両方の正しい数量がありますが、請求済みの数量のリストはありません。これがステータスハングアップの原因だと思います。qty_invoicedsales_order_item テーブルの が何らかの形で元に戻されているかのようです。

繰り返しになりますが、請求書には正しい項目が表示されているため、ここでかなり混乱しています。

何か案は?

4

2 に答える 2

2

これは確かに非常に興味深い@bahooです。

多分試してください:

$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();

$qty = array();

$invoice = Mage::getModel('sales/order_invoice_api');
$invoiceId = $invoice->create($order->getIncrementId(), $qty);

$invoice->capture($invoiceId);
于 2011-06-17T21:41:02.343 に答える