Skip to content

Commit 1dd4414

Browse files
carterbuceCarter Buce
andauthored
Set createdAt date during Email Opt-In rule and coupon creation APIs (#723)
* set createdAt date during Email Opt-In rule and coupon APIs * set createdAt date during Email Opt-In rule and coupon APIs * fix undefined $storeId error --------- Co-authored-by: Carter Buce <[email protected]>
1 parent 2bcefa4 commit 1dd4414

File tree

3 files changed

+56
-39
lines changed

3 files changed

+56
-39
lines changed

app/code/Meta/Sales/Model/Api/DiscountCouponCodeApi.php

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ class DiscountCouponCodeApi implements DiscountCouponCodeApiInterface
4949
/**
5050
* Constructor for DiscountCouponCodeApi.
5151
*
52-
* @param RuleFactory $ruleFactory Factory for creating sales rule instances.
52+
* @param RuleFactory $ruleFactory Factory for creating sales rule instances.
5353
* @param MassgeneratorFactory $massGeneratorFactory Factory for creating mass coupon code generator instances.
54-
* @param Authenticator $authenticator
54+
* @param Authenticator $authenticator
5555
*/
5656
public function __construct(
57-
RuleFactory $ruleFactory,
57+
RuleFactory $ruleFactory,
5858
MassgeneratorFactory $massGeneratorFactory,
59-
Authenticator $authenticator
59+
Authenticator $authenticator
6060
) {
6161
$this->ruleFactory = $ruleFactory;
6262
$this->massGeneratorFactory = $massGeneratorFactory;
@@ -66,14 +66,14 @@ public function __construct(
6666
/**
6767
* Generate a coupon code based on a rule ID.
6868
*
69-
* @param int $ruleId The ID of the rule to generate the coupon for.
69+
* @param int $ruleId The ID of the rule to generate the coupon for.
7070
* @return string The generated coupon code.
7171
* @throws LocalizedException If the rule does not exist or coupon generation fails.
7272
*/
7373
public function generateCouponCode(int $ruleId): string
7474
{
7575
$this->authenticator->authenticateRequest();
76-
76+
7777
$rule = $this->ruleFactory->create()->load($ruleId);
7878
if (!$rule->getId()) {
7979
throw new LocalizedException(__('The specified discount rule does not exist.'));
@@ -87,14 +87,15 @@ public function generateCouponCode(int $ruleId): string
8787
$generator->setLength(9);
8888
$generator->setPrefix('META_');
8989
$generator->setSuffix('');
90-
$rule->setCouponCodeGenerator($generator);
91-
$rule->setCouponType(\Magento\SalesRule\Model\Rule::COUPON_TYPE_AUTO);
90+
$generator->setQty(1);
91+
92+
$generator->generatePool();
93+
$coupons = $generator->getGeneratedCodes();
9294

93-
$coupon = $rule->acquireCoupon();
94-
if (!$coupon->getCode()) {
95+
if (empty($coupons)) {
9596
throw new LocalizedException(__('Failed to generate coupon code.'));
9697
}
9798

98-
return $coupon->getCode();
99+
return $coupons[0];
99100
}
100101
}

app/code/Meta/Sales/Model/Api/DiscountRuleApi.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ class DiscountRuleApi implements DiscountRuleApiInterface
5353
* DiscountRuleApi constructor.
5454
*
5555
* @param RuleRepositoryInterface $ruleRepository
56-
* @param FBEHelper $fbeHelper
57-
* @param OrderHelper $orderHelper
58-
* @param Authenticator $authenticator
56+
* @param FBEHelper $fbeHelper
57+
* @param OrderHelper $orderHelper
58+
* @param Authenticator $authenticator
5959
*/
6060
public function __construct(
6161
RuleRepositoryInterface $ruleRepository,
62-
FBEHelper $fbeHelper,
63-
OrderHelper $orderHelper,
64-
Authenticator $authenticator
62+
FBEHelper $fbeHelper,
63+
OrderHelper $orderHelper,
64+
Authenticator $authenticator
6565
) {
6666
$this->ruleRepository = $ruleRepository;
6767
$this->fbeHelper = $fbeHelper;
@@ -72,8 +72,8 @@ public function __construct(
7272
/**
7373
* Create a cart rule
7474
*
75-
* @param string $externalBusinessId
76-
* @param RuleInterface $rule
75+
* @param string $externalBusinessId
76+
* @param RuleInterface $rule
7777
* @return int
7878
* @throws LocalizedException
7979
*/
@@ -85,7 +85,7 @@ public function createRule(string $externalBusinessId, RuleInterface $rule): str
8585
if (empty($rule->getWebsiteIds())) {
8686
$rule->setWebsiteIds(
8787
[
88-
$this->orderHelper->getWebsiteIdFromStoreId((int)$storeId)
88+
$this->orderHelper->getWebsiteIdFromStoreId((int)$storeId)
8989
]
9090
);
9191
}
@@ -94,6 +94,10 @@ public function createRule(string $externalBusinessId, RuleInterface $rule): str
9494
[0] // By default, the ID for logged out customers.
9595
);
9696
}
97+
if ($rule->getFromDate() === null) {
98+
$rule->setFromDate(date('Y-m-d'));
99+
}
100+
97101
$savedRule = $this->ruleRepository->save($rule);
98102
return (string)$savedRule->getRuleId();
99103
} catch (\Exception $e) {

app/code/Meta/Sales/Model/Api/NewsletterSubscriptionDiscountApi.php

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,22 @@ class NewsletterSubscriptionDiscountApi implements NewsletterSubscriptionDiscoun
7373
/**
7474
* Constructor for NewsletterSubscriptionDiscountApi.
7575
*
76-
* @param SubscriberFactory $subscriberFactory Factory for creating newsletter subscriber instances.
77-
* @param RuleFactory $ruleFactory Factory for creating sales rule instances.
78-
* @param OrderHelper $orderHelper Helper for order-related functionalities.
79-
* @param FBEHelper $fbeHelper Helper for Facebook Business Extension related functionalities.
80-
* @param MassgeneratorFactory $massGeneratorFactory Factory for creating mass coupon code generator instances.
76+
* @param SubscriberFactory $subscriberFactory Factory for creating newsletter subscriber instances.
77+
* @param RuleFactory $ruleFactory Factory for creating sales rule instances.
78+
* @param OrderHelper $orderHelper Helper for order-related functionalities.
79+
* @param FBEHelper $fbeHelper Helper for Facebook Business Extension related functionalities.
80+
* @param MassgeneratorFactory $massGeneratorFactory Factory for creating mass coupon code generator instances.
8181
* @param NewsletterSubscriptionDiscountStatus $newsletterSubscriptionDiscountStatus
82-
* @param Authenticator $authenticator Authenticator for API requests.
82+
* @param Authenticator $authenticator Authenticator for API requests.
8383
*/
8484
public function __construct(
85-
SubscriberFactory $subscriberFactory,
86-
RuleFactory $ruleFactory,
87-
OrderHelper $orderHelper,
88-
FBEHelper $fbeHelper,
89-
MassgeneratorFactory $massGeneratorFactory,
85+
SubscriberFactory $subscriberFactory,
86+
RuleFactory $ruleFactory,
87+
OrderHelper $orderHelper,
88+
FBEHelper $fbeHelper,
89+
MassgeneratorFactory $massGeneratorFactory,
9090
NewsletterSubscriptionDiscountStatus $newsletterSubscriptionDiscountStatus,
91-
Authenticator $authenticator
91+
Authenticator $authenticator
9292
) {
9393
$this->subscriberFactory = $subscriberFactory;
9494
$this->ruleFactory = $ruleFactory;
@@ -102,16 +102,17 @@ public function __construct(
102102
/**
103103
* Subscribes a user for a coupon based on newsletter subscription.
104104
*
105-
* @param string $externalBusinessId The external business ID.
106-
* @param string $email The email address of the subscriber.
107-
* @param int $ruleId The ID of the sales rule.
105+
* @param string $externalBusinessId The external business ID.
106+
* @param string $email The email address of the subscriber.
107+
* @param int $ruleId The ID of the sales rule.
108108
* @return CouponInterface The generated coupon.
109109
* @throws LocalizedException If an error occurs during the process.
110110
*/
111111
public function subscribeForCoupon(string $externalBusinessId, string $email, int $ruleId): CouponInterface
112112
{
113113
$this->authenticator->authenticateRequest();
114114

115+
$storeId = null;
115116
try {
116117
$storeId = (int)$this->orderHelper->getStoreIdByExternalBusinessId($externalBusinessId);
117118
if ($this->newsletterSubscriptionDiscountStatus->checkSubscriptionStatus(
@@ -155,12 +156,16 @@ public function subscribeForCoupon(string $externalBusinessId, string $email, in
155156
/**
156157
* Generates a coupon code based on a sales rule ID.
157158
*
158-
* @param int $ruleId The sales rule ID.
159+
* @param int $ruleId The sales rule ID.
159160
* @return string The generated coupon code.
160161
*/
161162
private function generateCoupon(int $ruleId): CouponInterface
162163
{
163164
$rule = $this->ruleFactory->create()->load($ruleId);
165+
if (!$rule->getId()) {
166+
throw new LocalizedException(__('The specified discount rule does not exist.'));
167+
}
168+
164169
$generator = $this->massGeneratorFactory->create();
165170
$generator->setFormat(\Magento\SalesRule\Helper\Coupon::COUPON_FORMAT_ALPHANUMERIC);
166171
$generator->setRuleId($ruleId);
@@ -169,8 +174,15 @@ private function generateCoupon(int $ruleId): CouponInterface
169174
$generator->setLength(9);
170175
$generator->setPrefix('META_SUBSCRIBER_');
171176
$generator->setSuffix('');
172-
$rule->setCouponCodeGenerator($generator);
173-
$rule->setCouponType(\Magento\SalesRule\Model\Rule::COUPON_TYPE_AUTO);
174-
return $rule->acquireCoupon();
177+
$generator->setQty(1);
178+
179+
$generator->generatePool();
180+
$coupons = $generator->getGeneratedCodes();
181+
182+
if (empty($coupons)) {
183+
throw new LocalizedException(__('Failed to generate coupon code.'));
184+
}
185+
186+
return $coupons[0];
175187
}
176188
}

0 commit comments

Comments
 (0)