/** * Adds items to the shipment. * * @param \Magento\Sales\Api\Data\ShipmentInterface $shipment * @param \Magento\Sales\Model\Order $order * @param array $items * @return \Magento\Sales\Api\Data\ShipmentInterface */ protected function prepareItems(\Magento\Sales\Api\Data\ShipmentInterface $shipment, \Magento\Sales\Model\Order $order, array $items = []) { $totalQty = 0; foreach ($order->getAllItems() as $orderItem) { if (!$this->canShipItem($orderItem, $items)) { continue; } /** @var \Magento\Sales\Model\Order\Shipment\Item $item */ $item = $this->converter->itemToShipmentItem($orderItem); if ($orderItem->isDummy(true)) { $qty = 0; if (isset($items[$orderItem->getParentItemId()])) { $productOptions = $orderItem->getProductOptions(); if (isset($productOptions['bundle_selection_attributes'])) { $bundleSelectionAttributes = unserialize($productOptions['bundle_selection_attributes']); if ($bundleSelectionAttributes) { $qty = $bundleSelectionAttributes['qty'] * $items[$orderItem->getParentItemId()]; $qty = min($qty, $orderItem->getSimpleQtyToShip()); $item->setQty($qty); $shipment->addItem($item); continue; } else { $qty = 1; } } } else { $qty = 1; } } else { if (isset($items[$orderItem->getId()])) { $qty = min($items[$orderItem->getId()], $orderItem->getQtyToShip()); } elseif (!count($items)) { $qty = $orderItem->getQtyToShip(); } else { continue; } } $totalQty += $qty; $item->setQty($qty); $shipment->addItem($item); } return $shipment->setTotalQty($totalQty); }
/** * Prepare order shipment based on order items and requested items qty * * @param array $qtys * @return \Magento\Sales\Model\Order\Shipment */ public function prepareShipment($qtys = []) { $totalQty = 0; $shipment = $this->_convertor->toShipment($this->_order); foreach ($this->_order->getAllItems() as $orderItem) { if (!$this->_canShipItem($orderItem, $qtys)) { continue; } $item = $this->_convertor->itemToShipmentItem($orderItem); if ($orderItem->isDummy(true)) { $qty = 0; if (isset($qtys[$orderItem->getParentItemId()])) { $productOptions = $orderItem->getProductOptions(); if (isset($productOptions['bundle_selection_attributes'])) { $bundleSelectionAttributes = unserialize($productOptions['bundle_selection_attributes']); if ($bundleSelectionAttributes) { $qty = $bundleSelectionAttributes['qty'] * $qtys[$orderItem->getParentItemId()]; $qty = min($qty, $orderItem->getSimpleQtyToShip()); $item->setQty($qty); $shipment->addItem($item); continue; } else { $qty = 1; } } } else { $qty = 1; } } else { if (isset($qtys[$orderItem->getId()])) { $qty = min($qtys[$orderItem->getId()], $orderItem->getQtyToShip()); } elseif (!count($qtys)) { $qty = $orderItem->getQtyToShip(); } else { continue; } } $totalQty += $qty; $item->setQty($qty); $shipment->addItem($item); } $shipment->setTotalQty($totalQty); return $shipment; }