fix: Total row in trail balance report (#34395)
* fix: Total row in trail balance report
* fix: Calculate total after preparing opening and closing
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
index 3af01fd..bc334c7 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.py
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -78,7 +78,6 @@
def get_data(filters):
-
accounts = frappe.db.sql(
"""select name, account_number, parent_account, account_name, root_type, report_type, lft, rgt
@@ -118,12 +117,10 @@
ignore_closing_entries=not flt(filters.with_period_closing_entry),
)
- total_row = calculate_values(
- accounts, gl_entries_by_account, opening_balances, filters, company_currency
- )
+ calculate_values(accounts, gl_entries_by_account, opening_balances)
accumulate_values_into_parents(accounts, accounts_by_name)
- data = prepare_data(accounts, filters, total_row, parent_children_map, company_currency)
+ data = prepare_data(accounts, filters, parent_children_map, company_currency)
data = filter_out_zero_value_rows(
data, parent_children_map, show_zero_values=filters.get("show_zero_values")
)
@@ -218,7 +215,7 @@
return opening
-def calculate_values(accounts, gl_entries_by_account, opening_balances, filters, company_currency):
+def calculate_values(accounts, gl_entries_by_account, opening_balances):
init = {
"opening_debit": 0.0,
"opening_credit": 0.0,
@@ -228,22 +225,6 @@
"closing_credit": 0.0,
}
- total_row = {
- "account": "'" + _("Total") + "'",
- "account_name": "'" + _("Total") + "'",
- "warn_if_negative": True,
- "opening_debit": 0.0,
- "opening_credit": 0.0,
- "debit": 0.0,
- "credit": 0.0,
- "closing_debit": 0.0,
- "closing_credit": 0.0,
- "parent_account": None,
- "indent": 0,
- "has_value": True,
- "currency": company_currency,
- }
-
for d in accounts:
d.update(init.copy())
@@ -261,8 +242,28 @@
prepare_opening_closing(d)
- for field in value_fields:
- total_row[field] += d[field]
+
+def calculate_total_row(accounts, company_currency):
+ total_row = {
+ "account": "'" + _("Total") + "'",
+ "account_name": "'" + _("Total") + "'",
+ "warn_if_negative": True,
+ "opening_debit": 0.0,
+ "opening_credit": 0.0,
+ "debit": 0.0,
+ "credit": 0.0,
+ "closing_debit": 0.0,
+ "closing_credit": 0.0,
+ "parent_account": None,
+ "indent": 0,
+ "has_value": True,
+ "currency": company_currency,
+ }
+
+ for d in accounts:
+ if not d.parent_account:
+ for field in value_fields:
+ total_row[field] += d[field]
return total_row
@@ -274,7 +275,7 @@
accounts_by_name[d.parent_account][key] += d[key]
-def prepare_data(accounts, filters, total_row, parent_children_map, company_currency):
+def prepare_data(accounts, filters, parent_children_map, company_currency):
data = []
for d in accounts:
@@ -305,6 +306,7 @@
row["has_value"] = has_value
data.append(row)
+ total_row = calculate_total_row(accounts, company_currency)
data.extend([{}, total_row])
return data