/** * Initialize creditmemo model instance * * @return \Magento\Sales\Model\Order\Creditmemo|false * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function load() { $creditmemo = false; $creditmemoId = $this->getCreditmemoId(); $orderId = $this->getOrderId(); if ($creditmemoId) { $creditmemo = $this->creditmemoRepository->get($creditmemoId); } elseif ($orderId) { $data = $this->getCreditmemo(); $order = $this->orderFactory->create()->load($orderId); $invoice = $this->_initInvoice($order); if (!$this->_canCreditmemo($order)) { return false; } $savedData = $this->_getItemData(); $qtys = []; $backToStock = []; foreach ($savedData as $orderItemId => $itemData) { if (isset($itemData['qty'])) { $qtys[$orderItemId] = $itemData['qty']; } if (isset($itemData['back_to_stock'])) { $backToStock[$orderItemId] = true; } } $data['qtys'] = $qtys; if ($invoice) { $creditmemo = $this->creditmemoFactory->createByInvoice($invoice, $data); } else { $creditmemo = $this->creditmemoFactory->createByOrder($order, $data); } /** * Process back to stock flags */ foreach ($creditmemo->getAllItems() as $creditmemoItem) { $orderItem = $creditmemoItem->getOrderItem(); $parentId = $orderItem->getParentItemId(); if (isset($backToStock[$orderItem->getId()])) { $creditmemoItem->setBackToStock(true); } elseif ($orderItem->getParentItem() && isset($backToStock[$parentId]) && $backToStock[$parentId]) { $creditmemoItem->setBackToStock(true); } elseif (empty($savedData)) { $creditmemoItem->setBackToStock($this->stockConfiguration->isAutoReturnEnabled()); } else { $creditmemoItem->setBackToStock(false); } } } $this->eventManager->dispatch('adminhtml_sales_order_creditmemo_register_before', ['creditmemo' => $creditmemo, 'input' => $this->getCreditmemo()]); $this->registry->register('current_creditmemo', $creditmemo); return $creditmemo; }
/** * @return \Magento\Framework\Controller\ResultInterface */ public function execute() { $result = $this->orderLoader->load($this->_request); if ($result instanceof \Magento\Framework\Controller\ResultInterface) { return $result; } $creditmemoId = (int) $this->getRequest()->getParam('creditmemo_id'); if ($creditmemoId) { $creditmemo = $this->creditmemoRepository->get($creditmemoId); $order = $creditmemo->getOrder(); } else { $order = $this->_coreRegistry->registry('current_order'); } if ($this->orderAuthorization->canView($order)) { if (isset($creditmemo)) { $this->_coreRegistry->register('current_creditmemo', $creditmemo); } return $this->resultPageFactory->create()->addHandle('print'); } else { return $this->resultRedirectFactory->create()->setPath('sales/guest/form'); } }