[enhancement] bring taxes from tax rules and test cases
diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py
index ddd2a20..705a26e 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, debug=True)
+ where {0}""".format(" and ".join(conditions)), as_dict = True)
if not matching:
return None
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index edb3625..8ad3058 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -301,7 +301,6 @@
args.update({"tax_type": "Purchase"})
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/__init__.py b/erpnext/shopping_cart/__init__.py
index 1858c0d..e92f94e 100644
--- a/erpnext/shopping_cart/__init__.py
+++ b/erpnext/shopping_cart/__init__.py
@@ -35,6 +35,7 @@
quotation = frappe.new_doc("Quotation")
quotation.update(values)
if party.doctype == "Customer":
+ print "create quoation for cutomer"
quotation.contact_person = frappe.db.get_value("Contact", {"customer": party.name, "email_id": user})
quotation.insert(ignore_permissions=True)
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 78fd6ba..30f4aba 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -267,9 +267,11 @@
def set_taxes(quotation, cart_settings, billing_territory):
"""set taxes based on billing territory"""
from erpnext.accounts.party import set_taxes
-
+
+ customer_group = frappe.db.get_value("Customer", quotation.customer, "customer_group")
+
quotation.taxes_and_charges = set_taxes(quotation.customer, "Customer", \
- quotation.transaction_date, quotation.company, None, None, \
+ quotation.transaction_date, quotation.company, customer_group, None, \
quotation.customer_address, quotation.shipping_address_name, 1)
#
# # clear table
@@ -361,7 +363,6 @@
shipping_territory = get_address_territory(quotation.shipping_address_name) or \
party.territory
-
shipping_rules = cart_settings.get_shipping_rules(shipping_territory)
return shipping_rules
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
index 873120f..881ff4e 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.json
@@ -204,6 +204,27 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
+ "fieldname": "column_break_10",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
"fieldname": "shipping_rules",
"fieldtype": "Table",
"hidden": 0,
@@ -232,7 +253,7 @@
"is_submittable": 0,
"issingle": 1,
"istable": 0,
- "modified": "2015-09-10 19:05:17.386135",
+ "modified": "2015-09-11 19:03:54.750937",
"modified_by": "Administrator",
"module": "Shopping Cart",
"name": "Shopping Cart Settings",
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 35f21dc..da7d27a 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
@@ -28,7 +28,7 @@
doctype = self.meta.get_field(parentfield).options
# specify atleast one entry in the table
- # self.validate_table_has_rows(parentfield, raise_exception=ShoppingCartSetupError)
+ self.validate_table_has_rows(parentfield, raise_exception=ShoppingCartSetupError)
territory_name_map = self.get_territory_name_map(parentfield, fieldname)
for territory, names in territory_name_map.items():
@@ -105,7 +105,6 @@
def get_name_from_territory(self, territory, parentfield, fieldname):
name = None
territory_name_map = self.get_territory_name_map(parentfield, fieldname)
-
if territory_name_map.get(territory):
name = territory_name_map.get(territory)
else:
@@ -164,55 +163,4 @@
def check_shopping_cart_enabled():
if not get_shopping_cart_settings().enabled:
frappe.throw(_("You need to enable Shopping Cart"), ShoppingCartSetupError)
-
-def apply_shopping_cart_settings(quotation, method):
- """Called via a validate hook on Quotation"""
-
- """no hooks call added yet. same functionality is in cart.py, which will get triggered by cart.js"""
-
- from erpnext.shopping_cart import get_party
- if quotation.order_type != "Shopping Cart":
- return
-
- quotation.billing_territory = (get_territory_from_address(quotation.customer_address)
- or get_party(quotation.contact_email).territory or get_default_territory())
- quotation.shipping_territory = (get_territory_from_address(quotation.shipping_address_name)
- or get_party(quotation.contact_email).territory or get_default_territory())
-
- set_price_list(quotation)
- set_taxes_and_charges(quotation)
- quotation.calculate_taxes_and_totals()
- set_shipping_rule(quotation)
-
-def set_price_list(quotation):
- previous_selling_price_list = quotation.selling_price_list
- quotation.selling_price_list = get_shopping_cart_settings().get_price_list(quotation.billing_territory)
-
- if not quotation.selling_price_list:
- quotation.selling_price_list = get_shopping_cart_settings().get_price_list(get_default_territory())
-
- if previous_selling_price_list != quotation.selling_price_list:
- quotation.price_list_currency = quotation.currency = quotation.plc_conversion_rate = quotation.conversion_rate = None
- for d in quotation.get("items"):
- d.price_list_rate = d.discount_percentage = d.rate = d.amount = None
-
- quotation.set_price_list_and_item_details()
-
-def set_taxes_and_charges(quotation):
- previous_taxes_and_charges = quotation.taxes_and_charges
- quotation.taxes_and_charges = get_shopping_cart_settings().get_tax_master(quotation.billing_territory)
-
- if previous_taxes_and_charges != quotation.taxes_and_charges:
- quotation.set_other_charges()
-
-def set_shipping_rule(quotation):
- shipping_rules = get_shopping_cart_settings().get_shipping_rules(quotation.shipping_territory)
- if not shipping_rules:
- quotation.remove_shipping_charge()
- return
-
- if quotation.shipping_rule not in shipping_rules:
- quotation.remove_shipping_charge()
- quotation.shipping_rule = shipping_rules[0]
-
- quotation.apply_shipping_rule()
+
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 23d74fa..b38072c 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
@@ -62,6 +62,5 @@
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 086100c..c0945a1 100644
--- a/erpnext/shopping_cart/test_shopping_cart.py
+++ b/erpnext/shopping_cart/test_shopping_cart.py
@@ -4,7 +4,8 @@
from __future__ import unicode_literals
import unittest
import frappe
-from erpnext.shopping_cart import get_quotation, set_item_in_cart
+from erpnext.shopping_cart import get_quotation, set_item_in_cart, get_party
+import random
class TestShoppingCart(unittest.TestCase):
"""
@@ -110,42 +111,42 @@
self.assertEquals(quotation.net_total, 0)
self.assertEquals(len(quotation.get("items")), 0)
- def test_taxe_rule(self):
- frappe.set_user("Administrator")
+
+ def test_taxe_rule(self):
self.create_tax_rule()
- quotation = self.test_get_cart_customer()
- set_item_in_cart("_Test Item", 1)
-
+ self.login_as_customer()
+ quotation = self.create_quotation()
+
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")
+ self.assertEquals(quotation.total_taxes_and_charges, 1000.0)
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']
+ "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'],
+ "company": frappe.get_value("Global Defaults", "Global Defaults", "default_company")
}).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",
+ "company": frappe.get_value("Global Defaults", "Global Defaults", "default_company"),
"taxes":[{
"charge_type": "Actual",
"account_head": "Sales Expenses - _TC",
@@ -157,6 +158,34 @@
"territory" : "All Territories"
}]
}).insert()
+
+ def create_quotation(self):
+ quotation = frappe.new_doc("Quotation")
+
+ values = {
+ "doctype": "Quotation",
+ "quotation_to": "Customer",
+ "order_type": "Shopping Cart",
+ "customer": get_party(frappe.session.user).name,
+ "docstatus": 0,
+ "contact_email": frappe.session.user,
+ "selling_price_list": "_Test Price List Rest of the World",
+ "currency": "USD",
+ "taxes_and_charges" : "_Test Tax 1",
+ "items": [{
+ "item_code": "_Test Item",
+ "qty": 1
+ }],
+ "taxes": frappe.get_doc("Sales Taxes and Charges Template", "_Test Tax 1").taxes
+ }
+
+ quotation.update(values)
+
+ quotation.insert(ignore_permissions=True)
+
+ frappe.reload_doc("selling", "Quotation", quotation.name)
+
+ return quotation
# helper functions
def enable_shopping_cart(self):