MassHold.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 MassHold
  15. */
  16. class MassHold extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction implements HttpPostActionInterface
  17. {
  18. /**
  19. * Authorization level of a basic admin session
  20. */
  21. const ADMIN_RESOURCE = 'Magento_Sales::hold';
  22. /**
  23. * @var OrderManagementInterface
  24. */
  25. protected $orderManagement;
  26. /**
  27. * @param Context $context
  28. * @param Filter $filter
  29. * @param CollectionFactory $collectionFactory
  30. * @param OrderManagementInterface $orderManagement
  31. */
  32. public function __construct(
  33. Context $context,
  34. Filter $filter,
  35. CollectionFactory $collectionFactory,
  36. OrderManagementInterface $orderManagement
  37. ) {
  38. parent::__construct($context, $filter);
  39. $this->collectionFactory = $collectionFactory;
  40. $this->orderManagement = $orderManagement;
  41. }
  42. /**
  43. * Hold selected orders
  44. *
  45. * @param AbstractCollection $collection
  46. * @return \Magento\Backend\Model\View\Result\Redirect
  47. */
  48. protected function massAction(AbstractCollection $collection)
  49. {
  50. $countHoldOrder = 0;
  51. foreach ($collection->getItems() as $order) {
  52. if (!$order->canHold()) {
  53. continue;
  54. }
  55. $this->orderManagement->hold($order->getEntityId());
  56. $countHoldOrder++;
  57. }
  58. $countNonHoldOrder = $collection->count() - $countHoldOrder;
  59. if ($countNonHoldOrder && $countHoldOrder) {
  60. $this->messageManager->addErrorMessage(__('%1 order(s) were not put on hold.', $countNonHoldOrder));
  61. } elseif ($countNonHoldOrder) {
  62. $this->messageManager->addErrorMessage(__('No order(s) were put on hold.'));
  63. }
  64. if ($countHoldOrder) {
  65. $this->messageManager->addSuccessMessage(__('You have put %1 order(s) on hold.', $countHoldOrder));
  66. }
  67. $resultRedirect = $this->resultRedirectFactory->create();
  68. $resultRedirect->setPath($this->getComponentRefererUrl());
  69. return $resultRedirect;
  70. }
  71. }