Merge pull request #22383 from frappe/mergify/bp/develop/pr-22330
fix(pricing_rule): apply_on logic dont get cleanup (bp #22330)
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index 4d9053a..ead300e 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -17,6 +17,8 @@
apply_on_dict = {"Item Code": "items",
"Item Group": "item_groups", "Brand": "brands"}
+other_fields = ["other_item_code", "other_item_group", "other_brand"]
+
class PricingRule(Document):
def validate(self):
self.validate_mandatory()
@@ -47,6 +49,13 @@
if tocheck and not self.get(tocheck):
throw(_("{0} is required").format(self.meta.get_label(tocheck)), frappe.MandatoryError)
+ if self.apply_rule_on_other:
+ o_field = 'other_' + frappe.scrub(self.apply_rule_on_other)
+ if not self.get(o_field) and o_field in other_fields:
+ frappe.throw(_("For the 'Apply Rule On Other' condition the field {0} is mandatory")
+ .format(frappe.bold(self.apply_rule_on_other)))
+
+
if self.price_or_product_discount == 'Price' and not self.rate_or_discount:
throw(_("Rate or Discount is required for the price discount."), frappe.MandatoryError)
@@ -80,13 +89,27 @@
for f in options:
if not f: continue
- f = frappe.scrub(f)
- if f!=fieldname:
- self.set(f, None)
+ scrubbed_f = frappe.scrub(f)
+
+ if logic_field == 'apply_on':
+ apply_on_f = apply_on_dict.get(f, f)
+ else:
+ apply_on_f = scrubbed_f
+
+ if scrubbed_f != fieldname:
+ self.set(apply_on_f, None)
if self.mixed_conditions and self.get("same_item"):
self.same_item = 0
+ apply_rule_on_other = frappe.scrub(self.apply_rule_on_other or "")
+
+ cleanup_other_fields = (other_fields if not apply_rule_on_other
+ else [o_field for o_field in other_fields if o_field != 'other_' + apply_rule_on_other])
+
+ for other_field in cleanup_other_fields:
+ self.set(other_field, None)
+
def validate_rate_or_discount(self):
for field in ["Rate"]:
if flt(self.get(frappe.scrub(field))) < 0: