[Fix] Tax rule is not working for the parent customer groups (#10458)
diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py
index 36f4221..9e96332 100644
--- a/erpnext/accounts/doctype/tax_rule/tax_rule.py
+++ b/erpnext/accounts/doctype/tax_rule/tax_rule.py
@@ -8,6 +8,7 @@
from frappe.model.document import Document
from frappe.utils import cstr, cint
from frappe.contacts.doctype.address.address import get_default_address
+from erpnext.setup.doctype.customer_group.customer_group import get_parent_customer_groups
class IncorrectCustomerGroup(frappe.ValidationError): pass
class IncorrectSupplierType(frappe.ValidationError): pass
@@ -134,6 +135,9 @@
for key, value in args.iteritems():
if key=="use_for_shopping_cart":
conditions.append("use_for_shopping_cart = {0}".format(1 if value else 0))
+ if key == 'customer_group' and value:
+ customer_group_condition = get_customer_group_condition(value)
+ conditions.append("ifnull({0}, '') in ('', {1})".format(key, customer_group_condition))
else:
conditions.append("ifnull({0}, '') in ('', '{1}')".format(key, frappe.db.escape(cstr(value))))
@@ -157,3 +161,8 @@
return None
return tax_template
+
+def get_customer_group_condition(customer_group):
+ customer_groups = ["'%s'"%(d.name) for d in get_parent_customer_groups(frappe.db.escape(customer_group))]
+ condition = ",".join(['%s'] * len(customer_groups))%(tuple(customer_groups))
+ return condition
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/tax_rule/test_tax_rule.py b/erpnext/accounts/doctype/tax_rule/test_tax_rule.py
index a09d81b..383b02b 100644
--- a/erpnext/accounts/doctype/tax_rule/test_tax_rule.py
+++ b/erpnext/accounts/doctype/tax_rule/test_tax_rule.py
@@ -34,6 +34,14 @@
tax_rule2.save()
self.assertTrue(tax_rule2.name)
+ def test_for_parent_customer_group(self):
+ tax_rule1 = make_tax_rule(customer_group= "All Customer Groups",
+ sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-01")
+ tax_rule1.save()
+
+ self.assertEquals(get_tax_template("2015-01-01", {"customer_group" : "Commercial"}),
+ "_Test Sales Taxes and Charges Template")
+
def test_conflict_with_overlapping_dates(self):
tax_rule1 = make_tax_rule(customer= "_Test Customer",
sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-01", to_date = "2015-01-05")
diff --git a/erpnext/setup/doctype/customer_group/customer_group.py b/erpnext/setup/doctype/customer_group/customer_group.py
index b25095b..0f1ee81 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.py
+++ b/erpnext/setup/doctype/customer_group/customer_group.py
@@ -18,3 +18,10 @@
def validate_name_with_customer(self):
if frappe.db.exists("Customer", self.name):
frappe.msgprint(_("An Customer exists with same name"), raise_exception=1)
+
+def get_parent_customer_groups(customer_group):
+ lft, rgt = frappe.db.get_value("Customer Group", customer_group, ['lft', 'rgt'])
+
+ return frappe.db.sql("""select name from `tabCustomer Group`
+ where lft <= %s and rgt >= %s
+ order by lft asc""", (lft, rgt), as_dict=True)
\ No newline at end of file