Reorder.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Controller\Adminhtml\Order\Create;
  7. use Magento\Backend\App\Action;
  8. use Magento\Backend\Model\View\Result\ForwardFactory;
  9. use Magento\Framework\View\Result\PageFactory;
  10. use Magento\Sales\Model\Order\Reorder\UnavailableProductsProvider;
  11. use Magento\Sales\Api\OrderRepositoryInterface;
  12. use Magento\Sales\Helper\Reorder as ReorderHelper;
  13. class Reorder extends \Magento\Sales\Controller\Adminhtml\Order\Create
  14. {
  15. /**
  16. * @var UnavailableProductsProvider
  17. */
  18. private $unavailableProductsProvider;
  19. /**
  20. * @var OrderRepositoryInterface
  21. */
  22. private $orderRepository;
  23. /**
  24. * @var ReorderHelper
  25. */
  26. private $reorderHelper;
  27. /**
  28. * @param Action\Context $context
  29. * @param \Magento\Catalog\Helper\Product $productHelper
  30. * @param \Magento\Framework\Escaper $escaper
  31. * @param PageFactory $resultPageFactory
  32. * @param ForwardFactory $resultForwardFactory
  33. * @param UnavailableProductsProvider $unavailableProductsProvider
  34. * @param OrderRepositoryInterface $orderRepository
  35. * @param ReorderHelper $reorderHelper
  36. */
  37. public function __construct(
  38. Action\Context $context,
  39. \Magento\Catalog\Helper\Product $productHelper,
  40. \Magento\Framework\Escaper $escaper,
  41. PageFactory $resultPageFactory,
  42. ForwardFactory $resultForwardFactory,
  43. UnavailableProductsProvider $unavailableProductsProvider,
  44. OrderRepositoryInterface $orderRepository,
  45. ReorderHelper $reorderHelper
  46. ) {
  47. $this->unavailableProductsProvider = $unavailableProductsProvider;
  48. $this->orderRepository = $orderRepository;
  49. $this->reorderHelper = $reorderHelper;
  50. parent::__construct(
  51. $context,
  52. $productHelper,
  53. $escaper,
  54. $resultPageFactory,
  55. $resultForwardFactory
  56. );
  57. }
  58. /**
  59. * @return \Magento\Backend\Model\View\Result\Forward|\Magento\Backend\Model\View\Result\Redirect
  60. */
  61. public function execute()
  62. {
  63. $this->_getSession()->clearStorage();
  64. $orderId = $this->getRequest()->getParam('order_id');
  65. /** @var \Magento\Sales\Model\Order $order */
  66. $order = $this->orderRepository->get($orderId);
  67. if (!$this->reorderHelper->canReorder($order->getEntityId())) {
  68. return $this->resultForwardFactory->create()->forward('noroute');
  69. }
  70. /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
  71. $resultRedirect = $this->resultRedirectFactory->create();
  72. if (!$order->getId()) {
  73. $resultRedirect->setPath('sales/order/');
  74. return $resultRedirect;
  75. }
  76. $unavailableProducts = $this->unavailableProductsProvider->getForOrder($order);
  77. if (count($unavailableProducts) > 0) {
  78. foreach ($unavailableProducts as $sku) {
  79. $this->messageManager->addErrorMessage(
  80. sprintf('Product "%s" not found. This product is no longer available.', $sku)
  81. );
  82. }
  83. $resultRedirect->setPath('sales/order/view', ['order_id' => $orderId]);
  84. } else {
  85. $order->setReordered(true);
  86. $this->_getSession()->setUseOldShippingMethod(true);
  87. $this->_getOrderCreateModel()->initFromOrder($order);
  88. $resultRedirect->setPath('sales/*');
  89. }
  90. return $resultRedirect;
  91. }
  92. }