From 0a043a4e0bb017742cc4a82ceb46e7b8e162c31d Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 9 Jun 2025 18:09:07 +0530 Subject: [PATCH 1/2] perf: Avoid fetching account balance This isn't shown anywhere in UI anymore since https://github.com/frappe/erpnext/pull/45630 --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index efa32a5b189..2fa210b20a8 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -46,7 +46,6 @@ from erpnext.accounts.party import ( from erpnext.accounts.utils import ( cancel_exchange_gain_loss_journal, get_account_currency, - get_balance_on, get_outstanding_invoices, ) from erpnext.controllers.accounts_controller import ( @@ -2786,7 +2785,6 @@ def get_party_details(company, party_type, party, date, cost_center=None): party_account = get_party_account(party_type, party, company) account_currency = get_account_currency(party_account) - account_balance = get_balance_on(party_account, date, cost_center=cost_center) _party_name = "title" if party_type == "Shareholder" else party_type.lower() + "_name" party_name = frappe.db.get_value(party_type, party, _party_name) @@ -2798,7 +2796,6 @@ def get_party_details(company, party_type, party, date, cost_center=None): "party_account": party_account, "party_name": party_name, "party_account_currency": account_currency, - "account_balance": account_balance, "party_bank_account": party_bank_account, "bank_account": bank_account, } @@ -2816,12 +2813,9 @@ def get_account_details(account, date, cost_center=None): if not account_list: frappe.throw(_("Account: {0} is not permitted under Payment Entry").format(account)) - account_balance = get_balance_on(account, date, cost_center=cost_center, ignore_account_permission=True) - return frappe._dict( { "account_currency": get_account_currency(account), - "account_balance": account_balance, "account_type": frappe.get_cached_value("Account", account, "account_type"), } ) From 1343d147bd96a0428dfa98b1606be3797f9c7b87 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 9 Jun 2025 18:13:37 +0530 Subject: [PATCH 2/2] perf: Skip fetching account balances unless required This is very expensive operation and not requried when just finding default account and account info. --- .../doctype/journal_entry/journal_entry.py | 21 ++++++++++--------- .../doctype/payment_entry/payment_entry.py | 7 ++++++- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 1f64ac08919..de67a3974b0 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1296,7 +1296,9 @@ class JournalEntry(AccountsController): @frappe.whitelist() -def get_default_bank_cash_account(company, account_type=None, mode_of_payment=None, account=None): +def get_default_bank_cash_account( + company, account_type=None, mode_of_payment=None, account=None, *, fetch_balance=True +): from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account if mode_of_payment: @@ -1330,15 +1332,14 @@ def get_default_bank_cash_account(company, account_type=None, mode_of_payment=No account_details = frappe.get_cached_value( "Account", account, ["account_currency", "account_type"], as_dict=1 ) - - return frappe._dict( - { - "account": account, - "balance": get_balance_on(account), - "account_currency": account_details.account_currency, - "account_type": account_details.account_type, - } - ) + result = { + "account": account, + "account_currency": account_details.account_currency, + "account_type": account_details.account_type, + } + if fetch_balance: + result["balance"] = get_balance_on(account) + return frappe._dict(result) else: return frappe._dict() diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 2fa210b20a8..e35a6e31139 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -3305,11 +3305,16 @@ def get_bank_cash_account(doc, bank_account): "Bank", mode_of_payment=doc.get("mode_of_payment"), account=bank_account, + fetch_balance=False, ) if not bank: bank = get_default_bank_cash_account( - doc.company, "Cash", mode_of_payment=doc.get("mode_of_payment"), account=bank_account + doc.company, + "Cash", + mode_of_payment=doc.get("mode_of_payment"), + account=bank_account, + fetch_balance=False, ) return bank