33 * Copyright © Magento, Inc. All rights reserved.
44 * See COPYING.txt for license details.
55 */
6+ declare (strict_types=1 );
7+
68namespace Magento \SalesRule \Controller \Adminhtml \Promo \Quote ;
79
10+ use Magento \Backend \App \Action \Context ;
811use Magento \Framework \App \Action \HttpPostActionInterface ;
12+ use Magento \Framework \App \Config \ScopeConfigInterface ;
13+ use Magento \Framework \App \ObjectManager ;
14+ use Magento \Framework \App \Response \Http \FileFactory ;
15+ use Magento \Framework \Exception \InputException ;
16+ use Magento \Framework \Exception \LocalizedException ;
917use Magento \Framework \Filter \FilterInput ;
18+ use Magento \Framework \Json \Helper \Data ;
1019use Magento \Framework \MessageQueue \PublisherInterface ;
20+ use Magento \Framework \Registry ;
21+ use Magento \Framework \Stdlib \DateTime \Filter \Date ;
1122use Magento \SalesRule \Api \Data \CouponGenerationSpecInterfaceFactory ;
23+ use Magento \SalesRule \Controller \Adminhtml \Promo \Quote ;
1224use Magento \SalesRule \Model \CouponGenerator ;
1325use Magento \SalesRule \Model \Quote \GetCouponCodeLengthInterface ;
26+ use Magento \SalesRule \Model \RegistryConstants ;
27+ use Magento \SalesRule \Model \Rule ;
28+ use Magento \Store \Model \ScopeInterface ;
29+ use Psr \Log \LoggerInterface ;
1430
1531/**
1632 * Generate promo quote
1733 *
1834 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1935 */
20- class Generate extends \ Magento \ SalesRule \ Controller \ Adminhtml \ Promo \ Quote implements HttpPostActionInterface
36+ class Generate extends Quote implements HttpPostActionInterface
2137{
38+ /**
39+ * Coupon quantity limit config path
40+ */
41+ private const XML_CONFIG_COUPON_QUANTITY_LIMIT = 'promo/auto_generated_coupon_codes/quantity_limit ' ;
42+
2243 /**
2344 * @var CouponGenerator
2445 */
25- private $ couponGenerator ;
46+ private CouponGenerator $ couponGenerator ;
2647
2748 /**
2849 * @var PublisherInterface
2950 */
30- private $ messagePublisher ;
51+ private PublisherInterface $ messagePublisher ;
3152
3253 /**
3354 * @var CouponGenerationSpecInterfaceFactory
3455 */
35- private $ generationSpecFactory ;
56+ private CouponGenerationSpecInterfaceFactory $ generationSpecFactory ;
3657
3758 /**
3859 * @var GetCouponCodeLengthInterface
3960 */
40- private $ getCouponCodeLength ;
61+ private GetCouponCodeLengthInterface $ getCouponCodeLength ;
62+
63+ /**
64+ * @var ScopeConfigInterface
65+ */
66+ private ScopeConfigInterface $ scopeConfig ;
4167
4268 /**
4369 * Generate constructor.
44- * @param \Magento\Backend\App\Action\ Context $context
45- * @param \Magento\Framework\ Registry $coreRegistry
46- * @param \Magento\Framework\App\Response\Http\ FileFactory $fileFactory
47- * @param \Magento\Framework\Stdlib\DateTime\Filter\ Date $dateFilter
70+ * @param Context $context
71+ * @param Registry $coreRegistry
72+ * @param FileFactory $fileFactory
73+ * @param Date $dateFilter
4874 * @param CouponGenerator|null $couponGenerator
4975 * @param PublisherInterface|null $publisher
5076 * @param CouponGenerationSpecInterfaceFactory|null $generationSpecFactory
5177 * @param GetCouponCodeLengthInterface|null $getCouponCodeLength
78+ * @param ScopeConfigInterface|null $scopeConfig
5279 */
5380 public function __construct (
54- \ Magento \ Backend \ App \ Action \ Context $ context ,
55- \ Magento \ Framework \ Registry $ coreRegistry ,
56- \ Magento \ Framework \ App \ Response \ Http \ FileFactory $ fileFactory ,
57- \ Magento \ Framework \ Stdlib \ DateTime \ Filter \ Date $ dateFilter ,
81+ Context $ context ,
82+ Registry $ coreRegistry ,
83+ FileFactory $ fileFactory ,
84+ Date $ dateFilter ,
5885 CouponGenerator $ couponGenerator = null ,
5986 PublisherInterface $ publisher = null ,
6087 CouponGenerationSpecInterfaceFactory $ generationSpecFactory = null ,
61- GetCouponCodeLengthInterface $ getCouponCodeLength = null
88+ GetCouponCodeLengthInterface $ getCouponCodeLength = null ,
89+ ScopeConfigInterface $ scopeConfig = null
6290 ) {
6391 parent ::__construct ($ context , $ coreRegistry , $ fileFactory , $ dateFilter );
6492 $ this ->couponGenerator = $ couponGenerator ?:
6593 $ this ->_objectManager ->get (CouponGenerator::class);
66- $ this ->messagePublisher = $ publisher ?: \ Magento \ Framework \ App \ ObjectManager::getInstance ()
94+ $ this ->messagePublisher = $ publisher ?: ObjectManager::getInstance ()
6795 ->get (PublisherInterface::class);
6896 $ this ->generationSpecFactory = $ generationSpecFactory ?:
69- \ Magento \ Framework \ App \ ObjectManager::getInstance ()->get (
97+ ObjectManager::getInstance ()->get (
7098 CouponGenerationSpecInterfaceFactory::class
7199 );
72100 $ this ->getCouponCodeLength = $ getCouponCodeLength ?:
73- \ Magento \ Framework \ App \ ObjectManager::getInstance ()->get (
101+ ObjectManager::getInstance ()->get (
74102 GetCouponCodeLengthInterface::class
75103 );
104+ $ this ->scopeConfig = $ scopeConfig ;
76105 }
77106
78107 /**
@@ -81,7 +110,7 @@ public function __construct(
81110 * @return void
82111 * @SuppressWarnings(PHPMD.CyclomaticComplexity)
83112 */
84- public function execute ()
113+ public function execute (): void
85114 {
86115 if (!$ this ->getRequest ()->isAjax ()) {
87116 $ this ->_forward ('noroute ' );
@@ -90,13 +119,13 @@ public function execute()
90119 $ result = [];
91120 $ this ->_initRule ();
92121
93- $ rule = $ this ->_coreRegistry ->registry (\ Magento \ SalesRule \ Model \ RegistryConstants::CURRENT_SALES_RULE );
122+ $ rule = $ this ->_coreRegistry ->registry (RegistryConstants::CURRENT_SALES_RULE );
94123
95124 $ data = $ this ->getRequest ()->getParams ();
96125
97126 if (!$ rule ->getId ()) {
98127 $ result ['error ' ] = __ ('Rule is not defined ' );
99- } elseif ((int ) $ rule ->getCouponType () !== \ Magento \ SalesRule \ Model \ Rule::COUPON_TYPE_AUTO
128+ } elseif ((int ) $ rule ->getCouponType () !== Rule::COUPON_TYPE_AUTO
100129 && !$ rule ->getUseAutoGeneration ()) {
101130 $ result ['error ' ] =
102131 __ ('The rule coupon settings changed. Please save the rule before using auto-generation. ' );
@@ -123,7 +152,7 @@ public function execute()
123152 $ result ['error ' ] = __ (
124153 'Something went wrong while validating coupon code length. Please review the log and try again. '
125154 );
126- $ this ->_objectManager ->get (\ Psr \ Log \ LoggerInterface::class)->critical ($ e );
155+ $ this ->_objectManager ->get (LoggerInterface::class)->critical ($ e );
127156 }
128157 } else {
129158 try {
@@ -132,29 +161,42 @@ public function execute()
132161 $ data = $ inputFilter ->getUnescaped ();
133162 }
134163
135- $ data ['quantity ' ] = isset ($ data ['qty ' ]) ? $ data ['qty ' ] : null ;
136-
137- $ couponSpec = $ this ->generationSpecFactory ->create (['data ' => $ data ]);
138-
139- $ this ->messagePublisher ->publish ('sales_rule.codegenerator ' , $ couponSpec );
140- $ this ->messageManager ->addSuccessMessage (
141- __ ('Message is added to queue, wait to get your coupons soon ' )
164+ $ data ['quantity ' ] = $ data ['qty ' ] ?? 0 ;
165+ $ couponQuantityLimit = (int )$ this ->scopeConfig ->getValue (
166+ self ::XML_CONFIG_COUPON_QUANTITY_LIMIT ,
167+ ScopeInterface::SCOPE_STORE
142168 );
169+ // @codingStandardsIgnoreStart
170+ if ($ data ['quantity ' ] > 0 && ($ data ['quantity ' ] <= $ couponQuantityLimit || $ couponQuantityLimit === 0 )) {
171+ $ couponSpec = $ this ->generationSpecFactory ->create (['data ' => $ data ]);
172+
173+ $ this ->messagePublisher ->publish ('sales_rule.codegenerator ' , $ couponSpec );
174+ $ this ->messageManager ->addSuccessMessage (
175+ __ ('Message is added to queue, wait to get your coupons soon. ' )
176+ );
177+ } else {
178+ $ this ->messageManager ->addErrorMessage (
179+ __ (
180+ 'Coupon quantity should be less than or equal to the coupon quantity in the store configuration. '
181+ )
182+ );
183+ }
184+ // @codingStandardsIgnoreEnd
143185 $ this ->_view ->getLayout ()->initMessages ();
144186 $ result ['messages ' ] = $ this ->_view ->getLayout ()->getMessagesBlock ()->getGroupedHtml ();
145- } catch (\ Magento \ Framework \ Exception \ InputException $ inputException ) {
187+ } catch (InputException $ inputException ) {
146188 $ result ['error ' ] = __ ('Invalid data provided ' );
147- } catch (\ Magento \ Framework \ Exception \ LocalizedException $ e ) {
189+ } catch (LocalizedException $ e ) {
148190 $ result ['error ' ] = $ e ->getMessage ();
149191 } catch (\Exception $ e ) {
150192 $ result ['error ' ] = __ (
151193 'Something went wrong while generating coupons. Please review the log and try again. '
152194 );
153- $ this ->_objectManager ->get (\ Psr \ Log \ LoggerInterface::class)->critical ($ e );
195+ $ this ->_objectManager ->get (LoggerInterface::class)->critical ($ e );
154196 }
155197 }
156198 $ this ->getResponse ()->representJson (
157- $ this ->_objectManager ->get (\ Magento \ Framework \ Json \ Helper \ Data::class)->jsonEncode ($ result )
199+ $ this ->_objectManager ->get (Data::class)->jsonEncode ($ result )
158200 );
159201 }
160202}
0 commit comments