From d34787cf6d37c479f00ac1c9bc529b544d95dab1 Mon Sep 17 00:00:00 2001 From: sandratridz <102575830+sandratridz@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:41:02 +0530 Subject: [PATCH] fix: only highest eligible coupon applied (#38416) * fix: application of pricing rule when coupon is used --- erpnext/accounts/doctype/pricing_rule/utils.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/erpnext/accounts/doctype/pricing_rule/utils.py b/erpnext/accounts/doctype/pricing_rule/utils.py index 57feaa03eb..18aa6820a3 100644 --- a/erpnext/accounts/doctype/pricing_rule/utils.py +++ b/erpnext/accounts/doctype/pricing_rule/utils.py @@ -581,6 +581,8 @@ def apply_pricing_rule_on_transaction(doc): 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 @@ def apply_pricing_rule_on_transaction(doc): 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 @@ def apply_pricing_rule_on_transaction(doc): 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)