unavailableProductsProvider = $unavailableProductsProvider; $this->orderRepository = $orderRepository; $this->reorderHelper = $reorderHelper; parent::__construct( $context, $productHelper, $escaper, $resultPageFactory, $resultForwardFactory ); } /** * @return \Magento\Backend\Model\View\Result\Forward|\Magento\Backend\Model\View\Result\Redirect */ public function execute() { $this->_getSession()->clearStorage(); $orderId = $this->getRequest()->getParam('order_id'); /** @var \Magento\Sales\Model\Order $order */ $order = $this->orderRepository->get($orderId); if (!$this->reorderHelper->canReorder($order->getEntityId())) { return $this->resultForwardFactory->create()->forward('noroute'); } /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); if (!$order->getId()) { $resultRedirect->setPath('sales/order/'); return $resultRedirect; } $unavailableProducts = $this->unavailableProductsProvider->getForOrder($order); if (count($unavailableProducts) > 0) { foreach ($unavailableProducts as $sku) { $this->messageManager->addErrorMessage( sprintf('Product "%s" not found. This product is no longer available.', $sku) ); } $resultRedirect->setPath('sales/order/view', ['order_id' => $orderId]); } else { $order->setReordered(true); $this->_getSession()->setUseOldShippingMethod(true); $this->_getOrderCreateModel()->initFromOrder($order); $resultRedirect->setPath('sales/*'); } return $resultRedirect; } }