diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py index ddd2a200131..705a26e771a 100644 --- a/erpnext/accounts/doctype/tax_rule/tax_rule.py +++ b/erpnext/accounts/doctype/tax_rule/tax_rule.py @@ -115,7 +115,7 @@ def get_tax_template(posting_date, args): 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 edb362560ff..8ad30583e18 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -301,7 +301,6 @@ def set_taxes(party, party_type, posting_date, company, customer_group=None, sup 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 1858c0d8421..e92f94e9a7f 100644 --- a/erpnext/shopping_cart/__init__.py +++ b/erpnext/shopping_cart/__init__.py @@ -35,6 +35,7 @@ def get_quotation(user=None): 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 78fd6ba1419..30f4aba4937 100644 --- a/erpnext/shopping_cart/cart.py +++ b/erpnext/shopping_cart/cart.py @@ -267,9 +267,11 @@ def _set_price_list(quotation, cart_settings, billing_territory): 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 @@ def get_shipping_rules(party=None, quotation=None, cart_settings=None): 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 873120f7e11..881ff4e377e 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 @@ -200,6 +200,27 @@ "set_only_once": 0, "unique": 0 }, + { + "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, @@ -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 35f21dc3f7e..da7d27af107 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 @@ class ShoppingCartSettings(Document): 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 @@ class ShoppingCartSettings(Document): 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 get_default_territory(): 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 23d74fa0bb3..b38072c5fb7 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 @@ class TestShoppingCartSettings(unittest.TestCase): 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 086100c8218..c0945a1c4f4 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 @@ class TestShoppingCart(unittest.TestCase): 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 @@ class TestShoppingCart(unittest.TestCase): "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):