Magento Shipment Create(编程) - 奇怪的bug

时间:2013-08-08 16:59:29

标签: php magento

我使用以下函数为给定订单生成货件,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中的顺序不显示“Shipped:1” - 看看:http://i.imgur.com/Z9S1AY2.png

但是,如果我点击“发货”标签,我会看到以下内容:http://i.imgur.com/GJCLtwW.png

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

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

注意*如果我使用右上角的“发货”按钮,它将允许我再次发货,这次它正常工作(当我在管理员U.I中这样做)。它只是没有通过上面发布的功能代码按预期工作。

任何提示/提示/建议都将非常受欢迎。此致,Latheesan。

2 个答案:

答案 0 :(得分:0)

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

$order->save()

答案 1 :(得分:0)

也许不是最好的做法,我添加了这两条对我有用的线:

$orderItem->setQtyShipped(1); 
$orderItem->save();