次の関数を使用して、特定の注文、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。