@@ -67,46 +67,77 @@ public function execute(Order $subject, bool $increment)
67
67
if (!$ subject || !$ subject ->getAppliedRuleIds ()) {
68
68
return $ subject ;
69
69
}
70
-
71
70
// lookup rule ids
72
71
$ ruleIds = explode (', ' , $ subject ->getAppliedRuleIds ());
73
72
$ ruleIds = array_unique ($ ruleIds );
74
-
75
- $ ruleCustomer = null ;
76
- $ customerId = $ subject ->getCustomerId ();
77
-
73
+ $ customerId = (int )$ subject ->getCustomerId ();
78
74
// use each rule (and apply to customer, if applicable)
79
75
foreach ($ ruleIds as $ ruleId ) {
80
76
if (!$ ruleId ) {
81
77
continue ;
82
78
}
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 );
92
82
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
+ }
97
85
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 );
107
106
}
108
107
}
108
+ }
109
109
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
+ {
110
141
$ this ->coupon ->load ($ subject ->getCouponCode (), 'code ' );
111
142
if ($ this ->coupon ->getId ()) {
112
143
if ($ increment || $ this ->coupon ->getTimesUsed () > 0 ) {
@@ -117,7 +148,5 @@ public function execute(Order $subject, bool $increment)
117
148
$ this ->couponUsage ->updateCustomerCouponTimesUsed ($ customerId , $ this ->coupon ->getId (), $ increment );
118
149
}
119
150
}
120
-
121
- return $ subject ;
122
151
}
123
152
}
0 commit comments