/** * Checks if order item can be shipped. * * Dummy item can be shipped or with his children or * with parent item which is included to shipment. * * @param \Magento\Sales\Model\Order\Item $item * @param array $items * @return bool * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function canShipItem($item, array $items = []) { if ($item->getIsVirtual() || $item->getLockedDoShip()) { return false; } if ($item->isDummy(true)) { if ($item->getHasChildren()) { if ($item->isShipSeparately()) { return true; } foreach ($item->getChildrenItems() as $child) { if ($child->getIsVirtual()) { continue; } if (empty($items)) { if ($child->getQtyToShip() > 0) { return true; } } else { if (isset($items[$child->getId()]) && $items[$child->getId()] > 0) { return true; } } } return false; } elseif ($item->getParentItem()) { $parent = $item->getParentItem(); if (empty($items)) { return $parent->getQtyToShip() > 0; } else { return isset($items[$parent->getId()]) && $items[$parent->getId()] > 0; } } } else { return $item->getQtyToShip() > 0; } }
public function testGetPatentItem() { $item = $this->objectManager->getObject('Magento\\Sales\\Model\\Order\\Item', []); $this->model->setData(\Magento\Sales\Api\Data\OrderItemInterface::PARENT_ITEM, $item); $this->assertEquals($item, $this->model->getParentItem()); }
/** * Convert order item to quote item * * @param \Magento\Sales\Model\Order\Item $orderItem * @param true|null $qtyFlag if is null set product qty like in order * @return $this */ public function addOrderItem($orderItem, $qtyFlag = null) { /* @var $orderItem \Magento\Sales\Model\Order\Item */ if ($orderItem->getParentItem() === null) { $storeId = $this->_storeManager->getStore()->getId(); try { $product = $this->productRepository->getById($orderItem->getProductId(), false, $storeId); } catch (NoSuchEntityException $e) { return $this; } $info = $orderItem->getProductOptionByCode('info_buyRequest'); $info = new \Magento\Framework\Object($info); if ($qtyFlag === null) { $info->setQty($orderItem->getQtyOrdered()); } else { $info->setQty(1); } $this->addProduct($product, $info); } return $this; }
/** * Check if order item can be refunded * * @param \Magento\Sales\Model\Order\Item $item * @param array $qtys * @param array $invoiceQtysRefundLimits * @return bool * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _canRefundItem($item, $qtys = [], $invoiceQtysRefundLimits = []) { if ($item->isDummy()) { if ($item->getHasChildren()) { foreach ($item->getChildrenItems() as $child) { if (empty($qtys)) { if ($this->_canRefundNoDummyItem($child, $invoiceQtysRefundLimits)) { return true; } } else { if (isset($qtys[$child->getId()]) && $qtys[$child->getId()] > 0) { return true; } } } return false; } elseif ($item->getParentItem()) { $parent = $item->getParentItem(); if (empty($qtys)) { return $this->_canRefundNoDummyItem($parent, $invoiceQtysRefundLimits); } else { return isset($qtys[$parent->getId()]) && $qtys[$parent->getId()] > 0; } } } else { return $this->_canRefundNoDummyItem($item, $invoiceQtysRefundLimits); } }
/** * Convert order item to quote item * * @param \Magento\Sales\Model\Order\Item $orderItem * @param true|null $qtyFlag if is null set product qty like in order * @return $this */ public function addOrderItem($orderItem, $qtyFlag = null) { /* @var $orderItem \Magento\Sales\Model\Order\Item */ if (is_null($orderItem->getParentItem())) { $product = $this->_productFactory->create()->setStoreId($this->_storeManager->getStore()->getId())->load($orderItem->getProductId()); if (!$product->getId()) { return $this; } $info = $orderItem->getProductOptionByCode('info_buyRequest'); $info = new \Magento\Framework\Object($info); if (is_null($qtyFlag)) { $info->setQty($orderItem->getQtyOrdered()); } else { $info->setQty(1); } $this->addProduct($product, $info); } return $this; }
/** * Convert order item to quote item * * @param \Magento\Sales\Model\Order\Item $orderItem * @param true|null $qtyFlag if is null set product qty like in order * @return $this */ public function addOrderItem($orderItem, $qtyFlag = null) { /* @var $orderItem \Magento\Sales\Model\Order\Item */ if ($orderItem->getParentItem() === null) { $storeId = $this->_storeManager->getStore()->getId(); try { /** * We need to reload product in this place, because products * with the same id may have different sets of order attributes. */ $product = $this->productRepository->getById($orderItem->getProductId(), false, $storeId, true); } catch (NoSuchEntityException $e) { return $this; } $info = $orderItem->getProductOptionByCode('info_buyRequest'); $info = new \Magento\Framework\DataObject($info); if ($qtyFlag === null) { $info->setQty($orderItem->getQtyOrdered()); } else { $info->setQty(1); } $this->addProduct($product, $info); } return $this; }