From f88e68230a00e246da7eae99af66eec048b1cc00 Mon Sep 17 00:00:00 2001 From: Diptanil Saha Date: Mon, 9 Jun 2025 19:23:33 +0530 Subject: [PATCH] fix: fetch correct item tax template on item rate update (#47973) --- erpnext/public/js/controllers/transaction.js | 27 ++++++++++---------- erpnext/stock/get_item_details.py | 22 ++++++++++------ 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 0f0d68b3d8b..74a814b20f0 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -44,23 +44,22 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe if (item.item_code && item.rate) { frappe.call({ - method: "frappe.client.get_value", + method: "erpnext.stock.get_item_details.get_item_tax_template", args: { - doctype: "Item Tax", - parent: "Item", - filters: { - parent: item.item_code, - minimum_net_rate: ["<=", item.rate], - maximum_net_rate: [">=", item.rate] - }, - fieldname: "item_tax_template" + args: { + item_code: item.item_code, + company: frm.doc.company, + base_net_rate: item.base_net_rate, + tax_category: frm.doc.tax_category, + item_tax_template: item.item_tax_template, + posting_date: frm.doc.posting_date, + bill_date: frm.doc.bill_date, + transaction_date: frm.doc.transaction_date, + } }, callback: function(r) { - const tax_rule = r.message; - - let matched_template = tax_rule ? tax_rule.item_tax_template : null; - - frappe.model.set_value(cdt, cdn, 'item_tax_template', matched_template); + const item_tax_template = r.message; + frappe.model.set_value(cdt, cdn, 'item_tax_template', item_tax_template); } }); } diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 46cd2f52c4d..879b4836ac9 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -662,13 +662,17 @@ def get_item_tax_info(company, tax_category, item_codes, item_rates=None, item_t return out -def get_item_tax_template(args, item, out): - """ - args = { - "tax_category": None - "item_tax_template": None - } - """ +@frappe.whitelist() +def get_item_tax_template(args, item=None, out=None): + if isinstance(args, str): + args = json.loads(args) + + if not item: + if not args.get("item_code"): + frappe.throw(_("Item/Item Code required to get Item Tax Template.")) + else: + item = frappe.get_cached_doc("Item", args.get("item_code")) + item_tax_template = None if item.taxes: item_tax_template = _get_item_tax_template(args, item.taxes, out) @@ -680,9 +684,11 @@ def get_item_tax_template(args, item, out): item_tax_template = _get_item_tax_template(args, item_group_doc.taxes, out) item_group = item_group_doc.parent_item_group - if args.get("child_doctype") and item_tax_template: + if out and args.get("child_doctype") and item_tax_template: out.update(get_fetch_values(args.get("child_doctype"), "item_tax_template", item_tax_template)) + return item_tax_template + def _get_item_tax_template(args, taxes, out=None, for_validate=False): if out is None: