From 266f24bb74fcdeaaf6dd6a1bfaa2969dca4c480f Mon Sep 17 00:00:00 2001 From: Devin Slauenwhite Date: Wed, 10 Mar 2021 18:46:18 -0500 Subject: [PATCH 1/2] fix: multiple price rules margin. --- .../doctype/pricing_rule/pricing_rule.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 646aec13559..60c7c652c15 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -330,13 +330,16 @@ def get_pricing_rule_details(args, pricing_rule): def apply_price_discount_rule(pricing_rule, item_details, args): item_details.pricing_rule_for = pricing_rule.rate_or_discount - if ((pricing_rule.margin_type == 'Amount' and pricing_rule.currency == args.currency) - or (pricing_rule.margin_type == 'Percentage')): - item_details.margin_type = pricing_rule.margin_type - item_details.margin_rate_or_amount = pricing_rule.margin_rate_or_amount - else: - item_details.margin_type = None - item_details.margin_rate_or_amount = 0.0 + for apply_on in ['Percentage', 'Amount']: + if pricing_rule.margin_type != apply_on: continue + + field = 'margin_rate_or_amount' + if field not in item_details: + item_details.setdefault(field, 0) + item_details.setdefault('margin_type', apply_on) + + item_details[field] += (pricing_rule.get(field, 0) + if pricing_rule else args.get(field, 0)) if pricing_rule.rate_or_discount == 'Rate': pricing_rule_rate = 0.0 From a0cfe449df1e2e3cb07f41ef7ad4b1bce1170c49 Mon Sep 17 00:00:00 2001 From: Devin Slauenwhite Date: Tue, 23 Mar 2021 16:28:54 -0400 Subject: [PATCH 2/2] fix sider errors. --- erpnext/accounts/doctype/pricing_rule/pricing_rule.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 60c7c652c15..25d2d6c6cee 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -331,12 +331,13 @@ def apply_price_discount_rule(pricing_rule, item_details, args): item_details.pricing_rule_for = pricing_rule.rate_or_discount for apply_on in ['Percentage', 'Amount']: - if pricing_rule.margin_type != apply_on: continue + if pricing_rule.margin_type != apply_on: + continue field = 'margin_rate_or_amount' if field not in item_details: - item_details.setdefault(field, 0) - item_details.setdefault('margin_type', apply_on) + item_details.setdefault(field, 0) + item_details.setdefault('margin_type', apply_on) item_details[field] += (pricing_rule.get(field, 0) if pricing_rule else args.get(field, 0))