我使用以下函数为给定订单生成货件,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。
答案 0 :(得分:0)
通过在“$ transactionSave”代码块之后添加此行来解决此问题:
$order->save()
答案 1 :(得分:0)
也许不是最好的做法,我添加了这两条对我有用的线:
$orderItem->setQtyShipped(1);
$orderItem->save();