Generate.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote;
  7. use Magento\Framework\App\Action\HttpPostActionInterface;
  8. use Magento\SalesRule\Model\CouponGenerator;
  9. /**
  10. * Generate promo quote
  11. */
  12. class Generate extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote implements HttpPostActionInterface
  13. {
  14. /**
  15. * @var CouponGenerator
  16. */
  17. private $couponGenerator;
  18. /**
  19. * Generate constructor.
  20. * @param \Magento\Backend\App\Action\Context $context
  21. * @param \Magento\Framework\Registry $coreRegistry
  22. * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
  23. * @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
  24. * @param CouponGenerator|null $couponGenerator
  25. */
  26. public function __construct(
  27. \Magento\Backend\App\Action\Context $context,
  28. \Magento\Framework\Registry $coreRegistry,
  29. \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
  30. \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter,
  31. CouponGenerator $couponGenerator = null
  32. ) {
  33. parent::__construct($context, $coreRegistry, $fileFactory, $dateFilter);
  34. $this->couponGenerator = $couponGenerator ?:
  35. $this->_objectManager->get(CouponGenerator::class);
  36. }
  37. /**
  38. * Generate Coupons action
  39. *
  40. * @return void
  41. */
  42. public function execute()
  43. {
  44. if (!$this->getRequest()->isAjax()) {
  45. $this->_forward('noroute');
  46. return;
  47. }
  48. $result = [];
  49. $this->_initRule();
  50. $rule = $this->_coreRegistry->registry(\Magento\SalesRule\Model\RegistryConstants::CURRENT_SALES_RULE);
  51. if (!$rule->getId()) {
  52. $result['error'] = __('Rule is not defined');
  53. } else {
  54. try {
  55. $data = $this->getRequest()->getParams();
  56. if (!empty($data['to_date'])) {
  57. $inputFilter = new \Zend_Filter_Input(['to_date' => $this->_dateFilter], [], $data);
  58. $data = $inputFilter->getUnescaped();
  59. }
  60. $couponCodes = $this->couponGenerator->generateCodes($data);
  61. $generated = count($couponCodes);
  62. $this->messageManager->addSuccessMessage(__('%1 coupon(s) have been generated.', $generated));
  63. $this->_view->getLayout()->initMessages();
  64. $result['messages'] = $this->_view->getLayout()->getMessagesBlock()->getGroupedHtml();
  65. } catch (\Magento\Framework\Exception\InputException $inputException) {
  66. $result['error'] = __('Invalid data provided');
  67. } catch (\Magento\Framework\Exception\LocalizedException $e) {
  68. $result['error'] = $e->getMessage();
  69. } catch (\Exception $e) {
  70. $result['error'] = __(
  71. 'Something went wrong while generating coupons. Please review the log and try again.'
  72. );
  73. $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e);
  74. }
  75. }
  76. $this->getResponse()->representJson(
  77. $this->_objectManager->get(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($result)
  78. );
  79. }
  80. }