特定の注文で出荷されていないすべてのアイテムを取得したいと考えています。
部分的に出荷された注文があり、出荷待ちのすべてのアイテムを取得したいとします。
何かのようなもの:
$collection = Mage::getModel('...')->getCollection()
->Add...()
注文のすべてのアイテムを取得するには、アイテム コレクションを使用します。
$order = Mage::getModel('sales/order')->load($orderId);
$orderItems = $order->getItemsCollection();
次に、出荷モデルを使用して、注文のすべてのアイテムを取得します。
$shippedItems = Mage::getModel('sales/order_shipment')
->setOrder($order)->getItemsCollection();
Edit2: 注文に対して複数の出荷が存在する可能性があるため、出荷の順序を設定してもアイテム コレクションを取得できないことが判明しました。代わりに、以下に示すコード スニペットを使用してください。
編集:複数の出荷がある可能性があることを忘れていたので、注文アイテムのすべてのIDと出荷されたアイテムのすべてのIDを取得するための完全なコードは次のとおりです。
$orderId = 15;
$order = Mage::getModel('sales/order')->load($orderId);
$orderItems = $order->getItemsCollection();
$allOrderItemIds = $orderItems->getAllIds();
$shipments = $order->getShipmentsCollection();
$shippedItemIds = array();
foreach ($shipments as $shipment) {
$shippedItems = $shipment->getItemsCollection();
foreach ($shippedItems as $item) {
$shippedItemIds[] = $item->getOrderItemId();
}
}
var_dump($allOrderItemIds);
var_dump($shippedItemIds);
$orderId = 382;
$order = Mage::getModel('sales/order')->load($orderId);
// OR if you load the order with increment id ...
// $order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
$orderItems = $order->getItemsCollection();
foreach ($orderItems as $item) {
$qtyToBeShipped = $item->getQtyOrdered() - $item->getQtyShipped();
if ($qtyToBeShipped)
echo $item->getId() . ' - ' . $qtyToBeShipped . '</br>';
}