Skip to content

Commit 6a21e85

Browse files
committed
magento#12817: Coupon code with canceled order.
1 parent 025c6b8 commit 6a21e85

File tree

1 file changed

+58
-29
lines changed

1 file changed

+58
-29
lines changed

app/code/Magento/SalesRule/Model/Coupon/UpdateCouponUsages.php

Lines changed: 58 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -67,46 +67,77 @@ public function execute(Order $subject, bool $increment)
6767
if (!$subject || !$subject->getAppliedRuleIds()) {
6868
return $subject;
6969
}
70-
7170
// lookup rule ids
7271
$ruleIds = explode(',', $subject->getAppliedRuleIds());
7372
$ruleIds = array_unique($ruleIds);
74-
75-
$ruleCustomer = null;
76-
$customerId = $subject->getCustomerId();
77-
73+
$customerId = (int)$subject->getCustomerId();
7874
// use each rule (and apply to customer, if applicable)
7975
foreach ($ruleIds as $ruleId) {
8076
if (!$ruleId) {
8177
continue;
8278
}
83-
/** @var \Magento\SalesRule\Model\Rule $rule */
84-
$rule = $this->ruleFactory->create();
85-
$rule->load($ruleId);
86-
if ($rule->getId()) {
87-
$rule->loadCouponCode();
88-
if ($increment || $rule->getTimesUsed() > 0) {
89-
$rule->setTimesUsed($rule->getTimesUsed() + ($increment ? 1 : -1));
90-
$rule->save();
91-
}
79+
$this->updateRuleUsages($increment, (int)$ruleId, $customerId);
80+
}
81+
$this->updateCouponUsages($subject, $increment, $customerId);
9282

93-
if ($customerId) {
94-
/** @var \Magento\SalesRule\Model\Rule\Customer $ruleCustomer */
95-
$ruleCustomer = $this->ruleCustomerFactory->create();
96-
$ruleCustomer->loadByCustomerRule($customerId, $ruleId);
83+
return $subject;
84+
}
9785

98-
if ($ruleCustomer->getId()) {
99-
if ($increment || $ruleCustomer->getTimesUsed() > 0) {
100-
$ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed() + ($increment ? 1 : -1));
101-
}
102-
} elseif ($increment) {
103-
$ruleCustomer->setCustomerId($customerId)->setRuleId($ruleId)->setTimesUsed(1);
104-
}
105-
$ruleCustomer->save();
106-
}
86+
/**
87+
* Update the number of rule usages.
88+
*
89+
* @param bool $increment
90+
* @param int $ruleId
91+
* @param int $customerId
92+
*/
93+
private function updateRuleUsages(bool $increment, int $ruleId, int $customerId)
94+
{
95+
/** @var \Magento\SalesRule\Model\Rule $rule */
96+
$rule = $this->ruleFactory->create();
97+
$rule->load($ruleId);
98+
if ($rule->getId()) {
99+
$rule->loadCouponCode();
100+
if ($increment || $rule->getTimesUsed() > 0) {
101+
$rule->setTimesUsed($rule->getTimesUsed() + ($increment ? 1 : -1));
102+
$rule->save();
103+
}
104+
if ($customerId) {
105+
$this->updateCustomerRuleUsages($increment, $ruleId, $customerId);
107106
}
108107
}
108+
}
109109

110+
/**
111+
* Update the number of rule usages per customer.
112+
*
113+
* @param bool $increment
114+
* @param int $ruleId
115+
* @param int $customerId
116+
*/
117+
private function updateCustomerRuleUsages(bool $increment, int $ruleId, int $customerId)
118+
{
119+
/** @var \Magento\SalesRule\Model\Rule\Customer $ruleCustomer */
120+
$ruleCustomer = $this->ruleCustomerFactory->create();
121+
$ruleCustomer->loadByCustomerRule($customerId, $ruleId);
122+
if ($ruleCustomer->getId()) {
123+
if ($increment || $ruleCustomer->getTimesUsed() > 0) {
124+
$ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed() + ($increment ? 1 : -1));
125+
}
126+
} elseif ($increment) {
127+
$ruleCustomer->setCustomerId($customerId)->setRuleId($ruleId)->setTimesUsed(1);
128+
}
129+
$ruleCustomer->save();
130+
}
131+
132+
/**
133+
* Update the number of coupon usages.
134+
*
135+
* @param Order $subject
136+
* @param bool $increment
137+
* @param int $customerId
138+
*/
139+
private function updateCouponUsages(Order $subject, bool $increment, int $customerId)
140+
{
110141
$this->coupon->load($subject->getCouponCode(), 'code');
111142
if ($this->coupon->getId()) {
112143
if ($increment || $this->coupon->getTimesUsed() > 0) {
@@ -117,7 +148,5 @@ public function execute(Order $subject, bool $increment)
117148
$this->couponUsage->updateCustomerCouponTimesUsed($customerId, $this->coupon->getId(), $increment);
118149
}
119150
}
120-
121-
return $subject;
122151
}
123152
}

0 commit comments

Comments
 (0)