fix: Only load transaction's company's tax accounts in item tax map
This commit is contained in:
@@ -3,13 +3,12 @@
|
|||||||
|
|
||||||
frappe.ui.form.on('Item Tax Template', {
|
frappe.ui.form.on('Item Tax Template', {
|
||||||
setup: function(frm) {
|
setup: function(frm) {
|
||||||
frm.set_query("tax_type", function(doc) {
|
frm.set_query("tax_type", "taxes", function(doc) {
|
||||||
return {
|
return {
|
||||||
query: "erpnext.controllers.queries.tax_account_query",
|
filters: [
|
||||||
filters: {
|
['Account', 'is_group', '=', 0],
|
||||||
"account_type": ['Tax', 'Chargeable', 'Income Account', 'Expense Account'],
|
['Account', 'account_type', 'in', ['Tax', 'Chargeable', 'Income Account', 'Expense Account', 'Expenses Included In Valuation']]
|
||||||
"company": doc.company
|
]
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -565,6 +565,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
|||||||
|
|
||||||
frappe.run_serially([
|
frappe.run_serially([
|
||||||
() => me.frm.script_manager.trigger("currency"),
|
() => me.frm.script_manager.trigger("currency"),
|
||||||
|
() => me.update_item_tax_map(),
|
||||||
() => me.apply_default_taxes(),
|
() => me.apply_default_taxes(),
|
||||||
() => me.apply_pricing_rule()
|
() => me.apply_pricing_rule()
|
||||||
]);
|
]);
|
||||||
@@ -1312,40 +1313,8 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
|||||||
var me = this;
|
var me = this;
|
||||||
if(me.frm.updating_party_details) return;
|
if(me.frm.updating_party_details) return;
|
||||||
|
|
||||||
var item_codes = [];
|
|
||||||
$.each(this.frm.doc.items || [], function(i, item) {
|
|
||||||
if(item.item_code) {
|
|
||||||
item_codes.push(item.item_code);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
frappe.run_serially([
|
frappe.run_serially([
|
||||||
() => {
|
() => this.update_item_tax_map(),
|
||||||
if(item_codes.length) {
|
|
||||||
return this.frm.call({
|
|
||||||
method: "erpnext.stock.get_item_details.get_item_tax_info",
|
|
||||||
args: {
|
|
||||||
tax_category: cstr(me.frm.doc.tax_category),
|
|
||||||
item_codes: item_codes
|
|
||||||
},
|
|
||||||
callback: function(r) {
|
|
||||||
if(!r.exc) {
|
|
||||||
$.each(me.frm.doc.items || [], function(i, item) {
|
|
||||||
if(item.item_code && r.message.hasOwnProperty(item.item_code)) {
|
|
||||||
item.item_tax_template = r.message[item.item_code].item_tax_template;
|
|
||||||
item.item_tax_rate = r.message[item.item_code].item_tax_rate;
|
|
||||||
me.add_taxes_from_item_tax_template(item.item_tax_rate);
|
|
||||||
} else {
|
|
||||||
item.item_tax_template = "";
|
|
||||||
item.item_tax_rate = "{}";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
me.calculate_taxes_and_totals();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
() => erpnext.utils.set_taxes(this.frm, "tax_category"),
|
() => erpnext.utils.set_taxes(this.frm, "tax_category"),
|
||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
@@ -1360,6 +1329,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
|||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.stock.get_item_details.get_item_tax_map",
|
method: "erpnext.stock.get_item_details.get_item_tax_map",
|
||||||
args: {
|
args: {
|
||||||
|
company: me.frm.doc.company,
|
||||||
item_tax_template: item.item_tax_template,
|
item_tax_template: item.item_tax_template,
|
||||||
as_json: true
|
as_json: true
|
||||||
},
|
},
|
||||||
@@ -1377,6 +1347,42 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
update_item_tax_map: function() {
|
||||||
|
var me = this;
|
||||||
|
var item_codes = [];
|
||||||
|
$.each(this.frm.doc.items || [], function(i, item) {
|
||||||
|
if(item.item_code) {
|
||||||
|
item_codes.push(item.item_code);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(item_codes.length) {
|
||||||
|
return this.frm.call({
|
||||||
|
method: "erpnext.stock.get_item_details.get_item_tax_info",
|
||||||
|
args: {
|
||||||
|
company: me.frm.doc.company,
|
||||||
|
tax_category: cstr(me.frm.doc.tax_category),
|
||||||
|
item_codes: item_codes
|
||||||
|
},
|
||||||
|
callback: function(r) {
|
||||||
|
if(!r.exc) {
|
||||||
|
$.each(me.frm.doc.items || [], function(i, item) {
|
||||||
|
if(item.item_code && r.message.hasOwnProperty(item.item_code)) {
|
||||||
|
item.item_tax_template = r.message[item.item_code].item_tax_template;
|
||||||
|
item.item_tax_rate = r.message[item.item_code].item_tax_rate;
|
||||||
|
me.add_taxes_from_item_tax_template(item.item_tax_rate);
|
||||||
|
} else {
|
||||||
|
item.item_tax_template = "";
|
||||||
|
item.item_tax_rate = "{}";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
me.calculate_taxes_and_totals();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
is_recurring: function() {
|
is_recurring: function() {
|
||||||
// set default values for recurring documents
|
// set default values for recurring documents
|
||||||
if(this.frm.doc.is_recurring && this.frm.doc.__islocal) {
|
if(this.frm.doc.is_recurring && this.frm.doc.__islocal) {
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ def get_item_details(args):
|
|||||||
out = get_basic_details(args, item)
|
out = get_basic_details(args, item)
|
||||||
|
|
||||||
get_item_tax_template(args, item, out)
|
get_item_tax_template(args, item, out)
|
||||||
out["item_tax_rate"] = get_item_tax_map(out.get("item_tax_template"), as_json=True)
|
out["item_tax_rate"] = get_item_tax_map(args.company, out.get("item_tax_template"), as_json=True)
|
||||||
|
|
||||||
get_party_item_code(args, item, out)
|
get_party_item_code(args, item, out)
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@ def get_basic_details(args, item):
|
|||||||
return out
|
return out
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_item_tax_info(tax_category, item_codes):
|
def get_item_tax_info(company, tax_category, item_codes):
|
||||||
out = {}
|
out = {}
|
||||||
if isinstance(item_codes, string_types):
|
if isinstance(item_codes, string_types):
|
||||||
item_codes = json.loads(item_codes)
|
item_codes = json.loads(item_codes)
|
||||||
@@ -317,7 +317,7 @@ def get_item_tax_info(tax_category, item_codes):
|
|||||||
out[item_code] = {}
|
out[item_code] = {}
|
||||||
item = frappe.get_cached_doc("Item", item_code)
|
item = frappe.get_cached_doc("Item", item_code)
|
||||||
get_item_tax_template({"tax_category": tax_category}, item, out[item_code])
|
get_item_tax_template({"tax_category": tax_category}, item, out[item_code])
|
||||||
out[item_code]["item_tax_rate"] = get_item_tax_map(out[item_code].get("item_tax_template"), as_json=True)
|
out[item_code]["item_tax_rate"] = get_item_tax_map(company, out[item_code].get("item_tax_template"), as_json=True)
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
@@ -348,12 +348,13 @@ def _get_item_tax_template(args, taxes, out):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_item_tax_map(item_tax_template, as_json=True):
|
def get_item_tax_map(company, item_tax_template, as_json=True):
|
||||||
item_tax_map = {}
|
item_tax_map = {}
|
||||||
if item_tax_template:
|
if item_tax_template:
|
||||||
template = frappe.get_cached_doc("Item Tax Template", item_tax_template)
|
template = frappe.get_cached_doc("Item Tax Template", item_tax_template)
|
||||||
for d in template.taxes:
|
for d in template.taxes:
|
||||||
item_tax_map[d.tax_type] = d.tax_rate
|
if frappe.get_cached_value("Account", d.tax_type, "company") == company:
|
||||||
|
item_tax_map[d.tax_type] = d.tax_rate
|
||||||
|
|
||||||
return json.dumps(item_tax_map) if as_json else item_tax_map
|
return json.dumps(item_tax_map) if as_json else item_tax_map
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user