0

次の関数を使用して、特定の注文、sku/qty の出荷を生成します。

function CreateShipment($order_info)
{
    // Anticipate Error
    try
    {
        // Load Magento Order
        $order = Mage::getModel('sales/order')
        ->loadByIncrementId($order_info->MagentoOrderIncrementId);

        // Load Magento Order Lines
        $order_items = $order->getItemsCollection();

        // Parse Despatch Lines
        $despatch_skus = array();
        foreach ($order_info->DespatchLines as $DespatchLine) {
            $despatch_skus[$DespatchLine->Sku] = $DespatchLine->Qty;
        }

        // Build Item Qtys
        $item_qtys = array();
        foreach ($order_items as $order_item) {
            if (array_key_exists($order_item->getSku(), $despatch_skus)) {
                $item_qtys[$order_item->getItemId()] = 
                    $despatch_skus[$order_item->getSku()];
            } else {
                $item_qtys[$order_item->getItemId()] = 0;
            }
        }

        // Create Shipment
        $shipment = $order->prepareShipment($item_qtys);
        $shipment->register();
        $shipment->sendEmail(false)
                 ->setEmailSent(false)
                 ->save();
        $transactionSave = Mage::getModel('core/resource_transaction')
                 ->addObject($shipment)
                 ->addObject($shipment->getOrder())
                 ->save();

        // Finished
        $order = null;
        $shipment = null;
        $transactionSave = null;
        return true;
    }
    catch (Exception $ex)
    {
        // Log Error
    }
    return false;
}

ここで、$order_infoは次のようなオブジェクトです。

stdClass Object
(
    [MagentoOrderIncrementId] => 100010039
    [DespatchLines] => Array
        (
            [0] => stdClass Object
                (
                    [Sku] => VCF001
                    [Qty] => 1
                )
        )
)

関数は true を返しますが、magento の注文には「出荷済み: 1」が表示されません - 見てください: http://i.imgur.com/Z9S1AY2.png

ただし、「Shipments」タブをクリックすると、次のように表示されます: http://i.imgur.com/GJCLtwW.png

それで、出荷が作成されたようです。エントリに入ると、私の SKU と数量が表示されます: http://i.imgur.com/e5wZGAP.png

作成したばかりの出荷で注文が適切に更新されないのはなぜですか?

注* 右上の [発送] ボタンを使用すると、アイテムを再度発送できるようになり、今回は正しく機能します (管理 UI 内で行った場合)。上に投稿した関数コードを介して期待どおりに機能していません。

ヒント/ヒント/アドバイスをいただければ幸いです。よろしく、Latheesan。

4

2 に答える 2

0

ベストプラクティスではないかもしれませんが、うまくいった次の 2 行を追加しました。

$orderItem->setQtyShipped(1); 
$orderItem->save();
于 2016-11-04T08:06:13.370 に答える
0

この問題は、「$transactionSave」コード ブロックの後に次の行を追加することで修正されます。

$order->save()
于 2013-08-09T09:48:23.993 に答える