@@ -79,6 +79,13 @@ public function calculate($rule, $item, $qty)
79
79
$ discountData = $ this ->discountFactory ->create ();
80
80
81
81
$ ruleTotals = $ this ->validator ->getRuleItemTotalsInfo ($ rule ->getId ());
82
+ if (is_null ($ rule ->getExistingDiscounts ())) {
83
+ $ existingRuleDiscount = 0 ;
84
+ foreach ($ ruleTotals ['affected_items ' ] as $ ruleItem ) {
85
+ $ existingRuleDiscount += $ ruleItem ->getBaseDiscountAmount () * $ qty ;
86
+ }
87
+ $ rule ->setExistingDiscounts ($ existingRuleDiscount );
88
+ }
82
89
$ baseRuleTotals = $ ruleTotals ['base_items_price ' ] ?? 0.0 ;
83
90
$ ruleItemsCount = $ ruleTotals ['items_count ' ] ?? 0 ;
84
91
@@ -93,6 +100,7 @@ public function calculate($rule, $item, $qty)
93
100
$ baseItemPrice = $ this ->validator ->getItemBasePrice ($ item );
94
101
$ itemOriginalPrice = $ this ->validator ->getItemOriginalPrice ($ item );
95
102
$ baseItemOriginalPrice = $ this ->validator ->getItemBaseOriginalPrice ($ item );
103
+ $ baseItemDiscountAmount = (float ) $ item ->getBaseDiscountAmount ();
96
104
97
105
$ cartRules = $ quote ->getCartFixedRules ();
98
106
if (!isset ($ cartRules [$ rule ->getId ()])) {
@@ -131,10 +139,11 @@ public function calculate($rule, $item, $qty)
131
139
$ ruleDiscount ,
132
140
$ qty ,
133
141
$ baseItemPrice ,
134
- 0 ,
135
- $ baseRuleTotals ,
142
+ $ baseItemDiscountAmount ,
143
+ $ baseRuleTotals - $ rule -> getExistingDiscounts () ,
136
144
$ discountType
137
145
);
146
+
138
147
}
139
148
$ discountAmount = $ this ->priceCurrency ->convert ($ baseDiscountAmount , $ store );
140
149
$ baseDiscountAmount = min ($ baseItemPrice * $ qty , $ baseDiscountAmount );
0 commit comments