AjaxLoadRates.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Tax\Controller\Adminhtml\Rule;
  7. use Magento\Framework\App\Action\Context;
  8. use Magento\Framework\App\Action\Action;
  9. use Magento\Framework\Controller\Result\Json;
  10. use Magento\Framework\Controller\ResultFactory;
  11. use Magento\Tax\Model\Rate\Provider as RatesProvider;
  12. use Magento\Framework\Api\SearchCriteriaBuilder;
  13. use Magento\Tax\Model\Calculation\Rate;
  14. /**
  15. * Class AjaxLoadRates is intended to load existing
  16. * Tax rates as options for a select element.
  17. */
  18. class AjaxLoadRates extends Action
  19. {
  20. /**
  21. * @var RatesProvider
  22. */
  23. private $ratesProvider;
  24. /**
  25. * @var SearchCriteriaBuilder
  26. */
  27. private $searchCriteriaBuilder;
  28. /**
  29. * @param Context $context
  30. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  31. * @param RatesProvider $ratesProvider
  32. */
  33. public function __construct(
  34. Context $context,
  35. SearchCriteriaBuilder $searchCriteriaBuilder,
  36. RatesProvider $ratesProvider
  37. ) {
  38. parent::__construct($context);
  39. $this->searchCriteriaBuilder = $searchCriteriaBuilder;
  40. $this->ratesProvider = $ratesProvider;
  41. }
  42. /**
  43. * Get rates page via AJAX
  44. *
  45. * @return Json
  46. * @throws \InvalidArgumentException
  47. */
  48. public function execute()
  49. {
  50. $ratesPage = (int) $this->getRequest()->getParam('p');
  51. $ratesFilter = trim($this->getRequest()->getParam('s'));
  52. try {
  53. if (!empty($ratesFilter)) {
  54. $this->searchCriteriaBuilder->addFilter(
  55. Rate::KEY_CODE,
  56. '%'.$ratesFilter.'%',
  57. 'like'
  58. );
  59. }
  60. $searchCriteria = $this->searchCriteriaBuilder
  61. ->setPageSize($this->ratesProvider->getPageSize())
  62. ->setCurrentPage($ratesPage)
  63. ->create();
  64. $options = $this->ratesProvider->toOptionArray($searchCriteria);
  65. $response = [
  66. 'success' => true,
  67. 'errorMessage' => '',
  68. 'result'=> $options,
  69. ];
  70. } catch (\Exception $e) {
  71. $response = [
  72. 'success' => false,
  73. 'errorMessage' => __('An error occurred while loading tax rates.')
  74. ];
  75. }
  76. /** @var Json $resultJson */
  77. $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON);
  78. $resultJson->setData($response);
  79. return $resultJson;
  80. }
  81. }