Apply default taxes on loading of document
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 9568c90..7c366c1 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -196,7 +196,7 @@
# fetch charges
if self.taxes_and_charges and not len(self.get("taxes")):
- self.set_taxes("taxes", "taxes_and_charges")
+ self.set_taxes()
def get_advances(self):
super(SalesInvoice, self).get_advances(self.debit_to, "Customer", self.customer,
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 6612cb5..2643883 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -140,30 +140,29 @@
"discount_percentage", "base_rate", "rate"]:
item.set(field, ret.get(field))
- def set_taxes(self, tax_parentfield, tax_master_field):
- if not self.meta.get_field(tax_parentfield):
+ def set_taxes(self):
+ if not self.meta.get_field("taxes"):
return
- tax_master_doctype = self.meta.get_field(tax_master_field).options
+ tax_master_doctype = self.meta.get_field("taxes_and_charges").options
- if not self.get(tax_parentfield):
- if not self.get(tax_master_field):
+ if not self.get("taxes"):
+ if not self.get("taxes_and_charges"):
# get the default tax master
- self.set(tax_master_field, frappe.db.get_value(tax_master_doctype, {"is_default": 1}))
+ self.set("taxes_and_charges", frappe.db.get_value(tax_master_doctype, {"is_default": 1}))
- self.append_taxes_from_master(tax_parentfield, tax_master_field, tax_master_doctype)
+ self.append_taxes_from_master(tax_master_doctype)
- def append_taxes_from_master(self, tax_parentfield, tax_master_field, tax_master_doctype=None):
- if self.get(tax_master_field):
+ def append_taxes_from_master(self, tax_master_doctype=None):
+ if self.get("taxes_and_charges"):
if not tax_master_doctype:
- tax_master_doctype = self.meta.get_field(tax_master_field).options
+ tax_master_doctype = self.meta.get_field("taxes_and_charges").options
- self.extend(tax_parentfield,
- get_taxes_and_charges(tax_master_doctype, self.get(tax_master_field), tax_parentfield))
+ self.extend("taxes", get_taxes_and_charges(tax_master_doctype, self.get("taxes_and_charges")))
def set_other_charges(self):
self.set("taxes", [])
- self.set_taxes("taxes", "taxes_and_charges")
+ self.set_taxes()
def validate_enabled_taxes_and_charges(self):
taxes_and_charges_doctype = self.meta.get_options("taxes_and_charges")
@@ -335,14 +334,19 @@
@frappe.whitelist()
def get_tax_rate(account_head):
return frappe.db.get_value("Account", account_head, "tax_rate")
+
+@frappe.whitelist()
+def get_default_taxes_and_charges(master_doctype):
+ default_tax = frappe.db.get_value(master_doctype, {"is_default": 1})
+ return get_taxes_and_charges(master_doctype, default_tax)
@frappe.whitelist()
-def get_taxes_and_charges(master_doctype, master_name, tax_parentfield):
+def get_taxes_and_charges(master_doctype, master_name):
from frappe.model import default_fields
tax_master = frappe.get_doc(master_doctype, master_name)
taxes_and_charges = []
- for i, tax in enumerate(tax_master.get(tax_parentfield)):
+ for i, tax in enumerate(tax_master.get("taxes")):
tax = tax.as_dict()
for fieldname in default_fields:
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index b9aee62..8fa8fa3 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -44,8 +44,6 @@
self.update_if_missing(get_party_details(self.supplier, party_type="Supplier"))
self.set_missing_item_details()
- if self.get("__islocal"):
- self.set_taxes("taxes", "taxes_and_charges")
def set_supplier_from_item_default(self):
if self.meta.get_field("supplier") and not self.supplier:
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index f0a2f08..2dde685 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -42,8 +42,6 @@
# set contact and address details for customer, if they are not mentioned
self.set_missing_lead_customer_details()
self.set_price_list_and_item_details()
- if self.get("__islocal"):
- self.set_taxes("taxes", "taxes_and_charges")
def set_missing_lead_customer_details(self):
if getattr(self, "customer", None):
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 106b3cc..0e444cc 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -41,6 +41,11 @@
onload_post_render: function() {
var me = this;
+ if(this.frm.doc.__islocal && !(this.frm.doc.taxes || []).length
+ && !(this.frm.doc.__onload ? this.frm.doc.__onload.load_after_mapping : false)) {
+ this.apply_default_taxes();
+ }
+
if(this.frm.doc.__islocal && this.frm.doc.company && this.frm.doc["items"] && !this.frm.doc.is_pos) {
this.calculate_taxes_and_totals();
}
@@ -58,6 +63,23 @@
erpnext.pos.make_pos_btn(this.frm);
this.setup_sms();
},
+
+ apply_default_taxes: function() {
+ var me = this;
+ return frappe.call({
+ method: "erpnext.controllers.accounts_controller.get_default_taxes_and_charges",
+ args: {
+ "master_doctype": frappe.meta.get_docfield(me.frm.doc.doctype, "taxes_and_charges",
+ me.frm.doc.name).options
+ },
+ callback: function(r) {
+ if(!r.exc) {
+ me.frm.set_value("taxes", r.message);
+ me.calculate_taxes_and_totals();
+ }
+ }
+ });
+ },
setup_sms: function() {
var me = this;
@@ -646,7 +668,6 @@
"master_doctype": frappe.meta.get_docfield(this.frm.doc.doctype, "taxes_and_charges",
this.frm.doc.name).options,
"master_name": this.frm.doc.taxes_and_charges,
- "tax_parentfield": "taxes"
},
callback: function(r) {
if(!r.exc) {
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 401f047..0b09eb7 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -256,7 +256,7 @@
quotation.set("taxes", [])
# append taxes
- quotation.append_taxes_from_master("taxes", "taxes_and_charges")
+ quotation.append_taxes_from_master()
def get_lead_or_customer():
customer = frappe.db.get_value("Contact", {"email_id": frappe.session.user}, "customer")