Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js b/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
index e414c82..ba1a06b 100644
--- a/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
+++ b/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
@@ -128,16 +128,14 @@
 }
 
 cur_frm.set_query("account_head", "purchase_tax_details", function(doc) {
-  return {
-    filters: [
-      ["Account", "group_or_ledger", "=", "Ledger"],
-      ["Account", "docstatus", "!=", 2],
-      ["Account", "account_type", "in", "Tax, Chargeable, Expense Account"],
-      ["Account", "is_pl_account", "=", "Yes"],
-      ["Account", "debit_or_credit", "=", "Debit"],
-      ["Account", "company", "=", doc.company]
-    ]
-  }
+	return {
+		query: "controllers.queries.tax_account_query",
+    	filters: {
+			"account_type": ["Tax", "Chargeable", "Expense Account"],
+			"debit_or_credit": "Debit",
+			"company": doc.company
+		}
+	}
 });
 
 cur_frm.fields_dict['purchase_tax_details'].grid.get_field("cost_center").get_query = function(doc) {
diff --git a/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js b/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
index a2c3321..4430960 100644
--- a/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
+++ b/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
@@ -139,11 +139,12 @@
 
 cur_frm.fields_dict['other_charges'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
 	return{
-		filters:[
-			['Account', 'group_or_ledger', '=', 'Ledger'],
-			['Account', 'account_type', 'in', 'Tax, Chargeable, Income Account'],
-			['Account', 'company', '=', doc.company]
-		]
+		query: "controllers.queries.tax_account_query",
+    	filters: {
+			"account_type": ["Tax", "Chargeable", "Income Account"],
+			"debit_or_credit": "Credit",
+			"company": doc.company
+		}
 	}	
 }
 
diff --git a/controllers/queries.py b/controllers/queries.py
index d5f8dcb..321e15c 100644
--- a/controllers/queries.py
+++ b/controllers/queries.py
@@ -166,14 +166,31 @@
 	if not filters.group_or_ledger:
 		filters.group_or_ledger = "Ledger"
 	
-	return webnotes.conn.sql("""select tabAccount.name, tabAccount.parent_account, 
-		tabAccount.debit_or_credit from tabAccount 
+	return webnotes.conn.sql("""
+		select tabAccount.name, tabAccount.parent_account, tabAccount.debit_or_credit 
+		from tabAccount 
 		where tabAccount.docstatus!=2 
+			and 
 			and tabAccount.%(key)s LIKE "%(txt)s" 
 		 	%(fcond)s %(mcond)s 
 		limit %(start)s, %(page_len)s""" % {'key': searchfield, 
 		'txt': "%%%s%%" % txt, 'fcond': get_filters_cond(doctype, filters, conditions), 
 		'mcond':get_match_cond(doctype, searchfield), 'start': start, 'page_len': page_len})
+		
+def tax_account_query(doctype, txt, searchfield, start, page_len, filters):
+	return webnotes.conn.sql("""select name, parent_account, debit_or_credit 
+		from tabAccount 
+		where tabAccount.docstatus!=2 
+			and (account_type in (%s) or 
+				(ifnull(is_pl_account, 'No') = 'Yes' and debit_or_credit = %s) )
+			and group_or_ledger = 'Ledger'
+			and company = %s
+			and `%s` LIKE %s
+		limit %s, %s""" % 
+		(", ".join(['%s']*len(filters.get("account_type"))), 
+			"%s", "%s", searchfield, "%s", "%s", "%s"), 
+		tuple(filters.get("account_type") + [filters.get("debit_or_credit"), 
+			filters.get("company"), "%%%s%%" % txt, start, page_len]))
 
 def item_query(doctype, txt, searchfield, start, page_len, filters):
 	conditions = []