MassUnhold.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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;
  7. use Magento\Framework\App\Action\HttpPostActionInterface;
  8. use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
  9. use Magento\Backend\App\Action\Context;
  10. use Magento\Ui\Component\MassAction\Filter;
  11. use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
  12. use Magento\Sales\Api\OrderManagementInterface;
  13. /**
  14. * Class MassUnhold, change status for select orders
  15. *
  16. * @package Magento\Sales\Controller\Adminhtml\Order
  17. */
  18. class MassUnhold extends AbstractMassAction implements HttpPostActionInterface
  19. {
  20. /**
  21. * Authorization level of a basic admin session
  22. */
  23. const ADMIN_RESOURCE = 'Magento_Sales::unhold';
  24. /**
  25. * @var OrderManagementInterface
  26. */
  27. private $orderManagement;
  28. /**
  29. * Class constructor
  30. *
  31. * @param Context $context
  32. * @param Filter $filter
  33. * @param CollectionFactory $collectionFactory
  34. * @param OrderManagementInterface|null $orderManagement
  35. */
  36. public function __construct(
  37. Context $context,
  38. Filter $filter,
  39. CollectionFactory $collectionFactory,
  40. OrderManagementInterface $orderManagement = null
  41. ) {
  42. parent::__construct($context, $filter);
  43. $this->collectionFactory = $collectionFactory;
  44. $this->orderManagement = $orderManagement ?: \Magento\Framework\App\ObjectManager::getInstance()->get(
  45. \Magento\Sales\Api\OrderManagementInterface::class
  46. );
  47. }
  48. /**
  49. * Unhold selected orders
  50. *
  51. * @param AbstractCollection $collection
  52. * @return \Magento\Backend\Model\View\Result\Redirect
  53. */
  54. protected function massAction(AbstractCollection $collection)
  55. {
  56. $countUnHoldOrder = 0;
  57. /** @var \Magento\Sales\Model\Order $order */
  58. foreach ($collection->getItems() as $order) {
  59. if (!$order->canUnhold()) {
  60. continue;
  61. }
  62. $this->orderManagement->unHold($order->getEntityId());
  63. $countUnHoldOrder++;
  64. }
  65. $countNonUnHoldOrder = $collection->count() - $countUnHoldOrder;
  66. if ($countNonUnHoldOrder && $countUnHoldOrder) {
  67. $this->messageManager->addErrorMessage(
  68. __('%1 order(s) were not released from on hold status.', $countNonUnHoldOrder)
  69. );
  70. } elseif ($countNonUnHoldOrder) {
  71. $this->messageManager->addErrorMessage(__('No order(s) were released from on hold status.'));
  72. }
  73. if ($countUnHoldOrder) {
  74. $this->messageManager->addSuccessMessage(
  75. __('%1 order(s) have been released from on hold status.', $countUnHoldOrder)
  76. );
  77. }
  78. $resultRedirect = $this->resultRedirectFactory->create();
  79. $resultRedirect->setPath($this->getComponentRefererUrl());
  80. return $resultRedirect;
  81. }
  82. }