Ejemplo n.º 1
0
 /**
  * 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');
     }
 }