request = $request; $this->orderRepository = $orderRepository; $this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver; $this->getStockItemConfiguration = $getStockItemConfiguration; $this->getSkuFromOrderItem = $getSkuFromOrderItem; $this->getSourcesByOrderIdSkuAndQty = $getSourcesByOrderIdSkuAndQty ?: ObjectManager::getInstance()->get(GetSourcesByOrderIdSkuAndQty::class); } /** * Disable for collection processing * * @param Filter $filter * @return bool * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function addFilter(Filter $filter) { return null; } /** * @inheritdoc */ public function getData() { $data = []; $orderId = (int) $this->request->getParam('order_id'); /** @var \Magento\Sales\Model\Order $order */ $order = $this->orderRepository->get($orderId); $websiteId = $order->getStore()->getWebsiteId(); $stockId = (int)$this->stockByWebsiteIdResolver->execute((int)$websiteId)->getStockId(); foreach ($order->getAllItems() as $orderItem) { if ($orderItem->getIsVirtual() || $orderItem->getLockedDoShip() || $orderItem->getHasChildren()) { continue; } $item = $orderItem->isDummy(true) ? $orderItem->getParentItem() : $orderItem; $qty = $item->getSimpleQtyToShip(); $qty = $this->castQty($item, $qty); $sku = $this->getSkuFromOrderItem->execute($item); $data[$orderId]['items'][] = [ 'orderItemId' => $item->getId(), 'sku' => $sku, 'product' => $this->getProductName($orderItem), 'qtyToShip' => $qty, 'sources' => $this->getSources($orderId, $sku, $qty), 'isManageStock' => $this->isManageStock($sku, $stockId) ]; } $data[$orderId]['websiteId'] = $websiteId; $data[$orderId]['order_id'] = $orderId; foreach ($this->sources as $code => $name) { $data[$orderId]['sourceCodes'][] = [ 'value' => $code, 'label' => $name ]; } return $data; } /** * Get sources * * @param int $orderId * @param string $sku * @param float $qty * @return array * @throws NoSuchEntityException */ private function getSources(int $orderId, string $sku, float $qty): array { $sources = $this->getSourcesByOrderIdSkuAndQty->execute($orderId, $sku, $qty); foreach ($sources as $source) { $this->sources[$source['sourceCode']] = $source['sourceName']; } return $sources; } /** * @param $itemSku * @param $stockId * @return bool * @throws LocalizedException */ private function isManageStock($itemSku, $stockId) { $stockItemConfiguration = $this->getStockItemConfiguration->execute($itemSku, $stockId); return $stockItemConfiguration->isManageStock(); } /** * Generate display product name * @param Item $item * @return null|string */ private function getProductName(Item $item) { //TODO: need to transfer this to html block and render on Ui $name = $item->getName(); if ($parentItem = $item->getParentItem()) { $name = $parentItem->getName(); $options = []; if ($productOptions = $parentItem->getProductOptions()) { if (isset($productOptions['options'])) { $options = array_merge($options, $productOptions['options']); } if (isset($productOptions['additional_options'])) { $options = array_merge($options, $productOptions['additional_options']); } if (isset($productOptions['attributes_info'])) { $options = array_merge($options, $productOptions['attributes_info']); } if (count($options)) { foreach ($options as $option) { $name .= '