/** * 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; } }
/** * 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); } }