[fix] Trial Balance report, showing rows with zero values
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 0f10b94..3e70a0e 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -170,17 +170,19 @@
return data
-def filter_out_zero_value_rows(data, parent_children_map):
+def filter_out_zero_value_rows(data, parent_children_map, show_zero_values=False):
data_with_value = []
for d in data:
- if d.get("has_value"):
+ if show_zero_values or d.get("has_value"):
data_with_value.append(d)
else:
- children = [child.name for child in parent_children_map.get(d.account) or []]
- for row in data:
- if row.account in children and row.get("has_value"):
- data_with_value.append(d)
- break
+ # show group with zero balance, if there are balances against child
+ children = [child.name for child in parent_children_map.get(d.get("account")) or []]
+ if children:
+ for row in data:
+ if row.get("account") in children and row.get("has_value"):
+ data_with_value.append(d)
+ break
return data_with_value
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
index 822702b..e53d47e 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.py
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -4,8 +4,9 @@
from __future__ import unicode_literals
import frappe
from frappe import _
-from frappe.utils import cint, flt, getdate, formatdate, cstr
-from erpnext.accounts.report.financial_statements import filter_accounts, set_gl_entries_by_account
+from frappe.utils import flt, getdate, formatdate, cstr
+from erpnext.accounts.report.financial_statements \
+ import filter_accounts, set_gl_entries_by_account, filter_out_zero_value_rows
value_fields = ("opening_debit", "opening_credit", "debit", "credit", "closing_debit", "closing_credit")
@@ -56,7 +57,7 @@
if not accounts:
return None
- accounts, accounts_by_name = filter_accounts(accounts)
+ accounts, accounts_by_name, parent_children_map = filter_accounts(accounts)
min_lft, max_rgt = frappe.db.sql("""select min(lft), max(rgt) from `tabAccount`
where company=%s""", (filters.company,))[0]
@@ -71,8 +72,10 @@
total_row = calculate_values(accounts, gl_entries_by_account, opening_balances, filters)
accumulate_values_into_parents(accounts, accounts_by_name)
- data = prepare_data(accounts, filters, total_row)
-
+ data = prepare_data(accounts, filters, total_row, parent_children_map)
+ data = filter_out_zero_value_rows(data, parent_children_map,
+ show_zero_values=filters.get("show_zero_values"))
+
return data
def get_opening_balances(filters):
@@ -156,10 +159,8 @@
for key in value_fields:
accounts_by_name[d.parent_account][key] += d[key]
-def prepare_data(accounts, filters, total_row):
- show_zero_values = cint(filters.show_zero_values)
+def prepare_data(accounts, filters, total_row, parent_children_map):
data = []
- accounts_with_zero_value = []
for d in accounts:
has_value = False
row = {
@@ -174,18 +175,15 @@
prepare_opening_and_closing(d)
for key in value_fields:
- row[key] = d.get(key, 0.0)
- if row[key]:
+ row[key] = flt(d.get(key, 0.0), 3)
+
+ if abs(row[key]) >= 0.005:
+ # ignore zero values
has_value = True
- if show_zero_values:
- data.append(row)
- else:
- if not has_value:
- accounts_with_zero_value.append(d.name)
- elif d.parent_account not in accounts_with_zero_value:
- data.append(row)
-
+ row["has_value"] = has_value
+ data.append(row)
+
data.extend([{},total_row])
return data