From 31374e1134adec1af0a1e0e74bd4deb619c0b860 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Wed, 17 Dec 2025 23:55:31 +0530 Subject: [PATCH 1/4] fix: filter account balances by default finance book in COA tree view --- .../accounts/doctype/account/account_tree.js | 1 + erpnext/accounts/utils.py | 41 +++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js index 804cb473305..315b41560ce 100644 --- a/erpnext/accounts/doctype/account/account_tree.js +++ b/erpnext/accounts/doctype/account/account_tree.js @@ -70,6 +70,7 @@ frappe.treeview_settings["Account"] = { args: { accounts: accounts, company: cur_tree.args.company, + include_default_fb_balances: true, }, }); diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index de58c0a930c..e14dfd65e0d 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -199,6 +199,8 @@ def get_balance_on( ignore_account_permission=False, account_type=None, start_date=None, + finance_book=None, + include_default_fb_balances=False, ): if not account and frappe.form_dict.get("account"): account = frappe.form_dict.get("account") @@ -293,8 +295,25 @@ def get_balance_on( f"""gle.party_type = {frappe.db.escape(party_type)} and gle.party = {frappe.db.escape(party)} """ ) + default_finance_book = None if company: cond.append("""gle.company = %s """ % (frappe.db.escape(company))) + default_finance_book = frappe.get_cached_value("Company", company, "default_finance_book") + + if default_finance_book: + if finance_book: + if include_default_fb_balances: + cond.append( + f"""gle.finance_book IN ( + {frappe.db.escape(finance_book)}, + {frappe.db.escape(default_finance_book)} + )""" + ) + else: + cond.append(f"""gle.finance_book = {frappe.db.escape(finance_book)}""") + else: + if include_default_fb_balances: + cond.append(f"""gle.finance_book = {frappe.db.escape(default_finance_book)}""") if account or (party_type and party) or account_type: precision = get_currency_precision() @@ -1333,7 +1352,7 @@ def get_children(doctype, parent, company, is_root=False, include_disabled=False @frappe.whitelist() -def get_account_balances(accounts, company): +def get_account_balances(accounts, company, finance_book=None, include_default_fb_balances=False): if isinstance(accounts, str): accounts = loads(accounts) @@ -1344,9 +1363,25 @@ def get_account_balances(accounts, company): for account in accounts: account["company_currency"] = company_currency - account["balance"] = flt(get_balance_on(account["value"], in_account_currency=False, company=company)) + account["balance"] = flt( + get_balance_on( + account=account["value"], + in_account_currency=False, + company=company, + finance_book=finance_book, + include_default_fb_balances=include_default_fb_balances, + ) + ) + if account["account_currency"] and account["account_currency"] != company_currency: - account["balance_in_account_currency"] = flt(get_balance_on(account["value"], company=company)) + account["balance_in_account_currency"] = flt( + get_balance_on( + account=account["value"], + company=company, + finance_book=finance_book, + include_default_fb_balances=include_default_fb_balances, + ) + ) return accounts From f99142015221f68cd2deb4413b51e1c69548ad52 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 18 Dec 2025 00:08:50 +0530 Subject: [PATCH 2/4] fix: Apply finance book filter conditionally --- erpnext/accounts/utils.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index e14dfd65e0d..9009aef40a9 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -300,20 +300,17 @@ def get_balance_on( cond.append("""gle.company = %s """ % (frappe.db.escape(company))) default_finance_book = frappe.get_cached_value("Company", company, "default_finance_book") - if default_finance_book: - if finance_book: - if include_default_fb_balances: - cond.append( - f"""gle.finance_book IN ( - {frappe.db.escape(finance_book)}, - {frappe.db.escape(default_finance_book)} - )""" - ) - else: - cond.append(f"""gle.finance_book = {frappe.db.escape(finance_book)}""") + if finance_book: + if default_finance_book and include_default_fb_balances: + cond.append( + f"gle.finance_book IN ({frappe.db.escape(finance_book)}, {frappe.db.escape(default_finance_book)})" + ) else: - if include_default_fb_balances: - cond.append(f"""gle.finance_book = {frappe.db.escape(default_finance_book)}""") + cond.append(f"gle.finance_book = {frappe.db.escape(finance_book)}") + + elif default_finance_book and include_default_fb_balances: + # No finance book passed → fall back to default + cond.append(f"gle.finance_book = {frappe.db.escape(default_finance_book)}") if account or (party_type and party) or account_type: precision = get_currency_precision() From 358083d759e4142a0a003fd361d332f8912ccae7 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Fri, 19 Dec 2025 13:50:20 +0530 Subject: [PATCH 3/4] fix: include entries with null finance book --- erpnext/accounts/utils.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 9009aef40a9..b1858db4772 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -303,14 +303,23 @@ def get_balance_on( if finance_book: if default_finance_book and include_default_fb_balances: cond.append( - f"gle.finance_book IN ({frappe.db.escape(finance_book)}, {frappe.db.escape(default_finance_book)})" + f"""(gle.finance_book IN ( + {frappe.db.escape(finance_book)}, + {frappe.db.escape(default_finance_book)} + )OR gle.finance_book IS NULL + )""" ) else: - cond.append(f"gle.finance_book = {frappe.db.escape(finance_book)}") + cond.append(f"(gle.finance_book = {frappe.db.escape(finance_book)} OR gle.finance_book IS NULL)") elif default_finance_book and include_default_fb_balances: # No finance book passed → fall back to default - cond.append(f"gle.finance_book = {frappe.db.escape(default_finance_book)}") + cond.append( + f"""( + gle.finance_book = {frappe.db.escape(default_finance_book)} + OR gle.finance_book IS NULL + )""" + ) if account or (party_type and party) or account_type: precision = get_currency_precision() From c55c97a9fe3560f93a26d5193ab3f5f6f97e781d Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:11:54 +0530 Subject: [PATCH 4/4] fix: add space --- erpnext/accounts/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index b1858db4772..557eb21441b 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -306,7 +306,7 @@ def get_balance_on( f"""(gle.finance_book IN ( {frappe.db.escape(finance_book)}, {frappe.db.escape(default_finance_book)} - )OR gle.finance_book IS NULL + ) OR gle.finance_book IS NULL )""" ) else: