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

但是,如果我点击“发货”选项卡,我可以看到以下内容:http: //i.imgur.com/GJCLtwW.png

所以看起来货物确实被创建了。如果我进入条目,我会看到我的 sku 和数量:http: //i.imgur.com/e5wZGAP.png

知道为什么我刚刚创建的货件没有正确更新订单吗?

注意* 如果我使用右上角的“运送”按钮,它将允许我再次运送该物品,这一次它可以正常工作(当我在管理 UI 中执行此操作时)。通过我上面发布的功能代码,它只是没有按预期工作。

任何提示/提示/建议将不胜感激。问候, Latheesan。

4

2 回答 2

0

通过在“$transactionSave”代码块之后添加此行来解决此问题:

$order->save()
于 2013-08-09T09:48:23.993 回答
0

也许不是最佳实践,我添加了对我有用的这两行:

$orderItem->setQtyShipped(1); 
$orderItem->save();
于 2016-11-04T08:06:13.370 回答