fix: only highest eligible coupon applied (#38416)
* fix: application of pricing rule when coupon is used
diff --git a/erpnext/accounts/doctype/pricing_rule/utils.py b/erpnext/accounts/doctype/pricing_rule/utils.py
index 57feaa0..18aa682 100644
--- a/erpnext/accounts/doctype/pricing_rule/utils.py
+++ b/erpnext/accounts/doctype/pricing_rule/utils.py
@@ -581,6 +581,8 @@
if d.price_or_product_discount == "Price":
if d.apply_discount_on:
doc.set("apply_discount_on", d.apply_discount_on)
+ # Variable to track whether the condition has been met
+ condition_met = False
for field in ["additional_discount_percentage", "discount_amount"]:
pr_field = "discount_percentage" if field == "additional_discount_percentage" else field
@@ -603,6 +605,11 @@
if coupon_code_pricing_rule == d.name:
# if selected coupon code is linked with pricing rule
doc.set(field, d.get(pr_field))
+
+ # Set the condition_met variable to True and break out of the loop
+ condition_met = True
+ break
+
else:
# reset discount if not linked
doc.set(field, 0)
@@ -611,6 +618,10 @@
doc.set(field, 0)
doc.calculate_taxes_and_totals()
+
+ # Break out of the main loop if the condition is met
+ if condition_met:
+ break
elif d.price_or_product_discount == "Product":
item_details = frappe._dict({"parenttype": doc.doctype, "free_item_data": []})
get_product_discount_rule(d, item_details, doc=doc)