[Shopping Cart][Fixes] tax calculation based on tax rule
diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py
index 705a26e..ddd2a20 100644
--- a/erpnext/accounts/doctype/tax_rule/tax_rule.py
+++ b/erpnext/accounts/doctype/tax_rule/tax_rule.py
@@ -115,7 +115,7 @@
 		conditions.append("ifnull({0}, '') in ('', '{1}')".format(key, frappe.db.escape(cstr(value))))
 
 	matching = frappe.db.sql("""select * from `tabTax Rule`
-		where {0}""".format(" and ".join(conditions)), as_dict = True)
+		where {0}""".format(" and ".join(conditions)), as_dict = True, debug=True)
 		
 	if not matching:
 		return None
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index d830a20..edb3625 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -278,7 +278,9 @@
 				frappe.throw(_("Due / Reference Date cannot be after {0}").format(formatdate(default_due_date)))
 				
 @frappe.whitelist()
-def set_taxes(party, party_type, posting_date, company, customer_group=None, supplier_type=None, billing_address=None, shipping_address=None, for_shopping_cart=None):
+def set_taxes(party, party_type, posting_date, company, customer_group=None, supplier_type=None, 
+	billing_address=None, shipping_address=None, use_for_shopping_cart=None):
+	
 	from erpnext.accounts.doctype.tax_rule.tax_rule import get_tax_template, get_party_details
 	args = {
 		party_type: 		party,
@@ -288,7 +290,8 @@
 	}
 	
 	if billing_address or shipping_address:
-		args.update(get_party_details(party, party_type, {"billing_address": billing_address, "shipping_address": shipping_address }))
+		args.update(get_party_details(party, party_type, {"billing_address": billing_address, \
+			"shipping_address": shipping_address }))
 	else:
 		args.update(get_party_details(party, party_type))
 	
@@ -297,7 +300,8 @@
 	else:
 		args.update({"tax_type": "Purchase"})
 		
-	if for_shopping_cart:
-		args.update({"use_for_shopping_cart": for_shopping_cart})
+	if use_for_shopping_cart:
+		print "use_for_shopping_cart", use_for_shopping_cart
+		args.update({"use_for_shopping_cart": use_for_shopping_cart})
 		
 	return get_tax_template(posting_date, args)
\ No newline at end of file
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
index 425c6d6..35f21dc 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
@@ -126,7 +126,7 @@
 		return price_list and price_list[0] or None
 		
 	def validate_tax_rule(self):
-		if not frappe.db.get_value("Tax Rule", {"use_for_shopping_cart" : 1}, "name", debug=1):
+		if not frappe.db.get_value("Tax Rule", {"use_for_shopping_cart" : 1}, "name"):
 			frappe.throw(frappe._("Set Tax Rule for shopping cart"), ShoppingCartSetupError)
 			
 	def get_tax_master(self, billing_territory):
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/test_shopping_cart_settings.py b/erpnext/shopping_cart/doctype/shopping_cart_settings/test_shopping_cart_settings.py
index 46cbfdf..23d74fa 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/test_shopping_cart_settings.py
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/test_shopping_cart_settings.py
@@ -43,28 +43,6 @@
 			
 		return cart_settings
 		
-	def test_taxes_territory_overlap(self):
-		cart_settings = self.get_cart_settings()
-		
-		def _add_tax_master(tax_master):
-			cart_settings.append("sales_taxes_and_charges_masters", {
-				"doctype": "Shopping Cart Taxes and Charges Master",
-				"sales_taxes_and_charges_master": tax_master
-			})
-		
-		for tax_master in ("_Test Sales Taxes and Charges Template", "_Test India Tax Master"):
-			_add_tax_master(tax_master)
-			
-		controller = cart_settings
-		controller.validate_overlapping_territories("sales_taxes_and_charges_masters",
-			"sales_taxes_and_charges_master")
-			
-		_add_tax_master("_Test Sales Taxes and Charges Template - Rest of the World")
-		
-		controller = cart_settings
-		self.assertRaises(ShoppingCartSetupError, controller.validate_overlapping_territories,
-			"sales_taxes_and_charges_masters", "sales_taxes_and_charges_master")
-		
 	def test_exchange_rate_exists(self):
 		frappe.db.sql("""delete from `tabCurrency Exchange`""")
 		
@@ -77,3 +55,13 @@
 		frappe.get_doc(currency_exchange_records[0]).insert()
 		controller.validate_exchange_rates_exist()
 		
+	def test_tax_rule_validation(self):
+		frappe.db.sql("update `tabTax Rule` set use_for_shopping_cart = 0")
+		frappe.db.commit()
+		
+		cart_settings = self.get_cart_settings()
+		cart_settings.enabled = 1 
+		if not frappe.db.get_value("Tax Rule", {"use_for_shopping_cart": 1}, "name"):
+			print "here"
+			self.assertRaises(ShoppingCartSetupError, cart_settings.validate_tax_rule)
+			
diff --git a/erpnext/shopping_cart/test_shopping_cart.py b/erpnext/shopping_cart/test_shopping_cart.py
index 1873b81..086100c 100644
--- a/erpnext/shopping_cart/test_shopping_cart.py
+++ b/erpnext/shopping_cart/test_shopping_cart.py
@@ -109,6 +109,54 @@
 		quotation = self.test_get_cart_lead()
 		self.assertEquals(quotation.net_total, 0)
 		self.assertEquals(len(quotation.get("items")), 0)
+		
+	def test_taxe_rule(self):		
+		frappe.set_user("Administrator")
+		self.create_tax_rule()
+		quotation = self.test_get_cart_customer()
+		set_item_in_cart("_Test Item", 1)
+		
+		from erpnext.accounts.party import set_taxes
+		
+		tax_rule_master = set_taxes(quotation.customer, "Customer", \
+			quotation.transaction_date, quotation.company, None, None, \
+			quotation.customer_address, quotation.shipping_address_name, 1)
+		
+		self.assertEquals(quotation.taxes_and_charges, tax_rule_master)
+		self.assertEquals(quotation.total_taxes_and_charges, "1000")
+		
+	def create_tax_rule(self):
+		for tax_rule_setting in [{"priority": 1, "use_for_shopping_cart": 1}, {"priority": 2, "use_for_shopping_cart": 0}]:
+			tax_template = self.get_tax_template(tax_rule_setting['priority']).name
+			print tax_template
+			tax_rule = frappe.get_doc({
+				"doctype": "Tax Rule",
+				"tax_type" : "Sales",
+				"sales_tax_template": tax_template,
+				"use_for_shopping_cart": tax_rule_setting["use_for_shopping_cart"],
+				"billing_city": "_Test City",
+				"billing_country": "India",
+				"shipping_city": "_Test City",
+				"shipping_country": "India",
+				"priority": tax_rule_setting['priority']
+			}).insert()
+		
+	def get_tax_template(self, priority):
+		return frappe.get_doc({
+			"doctype" : "Sales Taxes and Charges Template",
+			"title": "_Test Tax %s"%priority,
+			"company": "_Test Company",
+			"taxes":[{
+				"charge_type": "Actual",
+				"account_head": "Sales Expenses - _TC",
+				"cost_center": "Main - _TC",
+				"description": "Test Shopping cart taxes with Tax Rule",
+				"tax_amount": 1000*priority
+			}],
+			"territories":[{
+				"territory" : "All Territories"
+			}]
+		}).insert()
 
 	# helper functions
 	def enable_shopping_cart(self):
@@ -131,13 +179,6 @@
 				{"doctype": "Shopping Cart Price List", "parentfield": "price_lists",
 					"selling_price_list": "_Test Price List Rest of the World"}
 			])
-			settings.set("sales_taxes_and_charges_masters", [
-				# tax masters
-				{"doctype": "Shopping Cart Taxes and Charges Master", "parentfield": "sales_taxes_and_charges_masters",
-					"sales_taxes_and_charges_master": "_Test India Tax Master"},
-				{"doctype": "Shopping Cart Taxes and Charges Master", "parentfield": "sales_taxes_and_charges_masters",
-					"sales_taxes_and_charges_master": "_Test Sales Taxes and Charges Template - Rest of the World"},
-			])
 			settings.set("shipping_rules", {"doctype": "Shopping Cart Shipping Rule", "parentfield": "shipping_rules",
 					"shipping_rule": "_Test Shipping Rule - India"})