From 59ab65ded689130e06f4e43549a69a53b0c0b01f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 29 Apr 2015 13:07:06 +0530 Subject: [PATCH 1/2] fixed trial balance related to showing zero balance --- .../accounts/report/trial_balance/trial_balance.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index dedbef93981..0f72536f028 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -123,7 +123,8 @@ def accumulate_values_into_parents(accounts, accounts_by_name): def prepare_data(accounts, filters, total_row): show_zero_values = cint(filters.show_zero_values) data = [] - for i, d in enumerate(accounts): + accounts_with_zero_value = [] + for d in accounts: has_value = False row = { "account_name": d.account_name, @@ -140,9 +141,14 @@ def prepare_data(accounts, filters, total_row): row[key] = d.get(key, 0.0) if row[key]: has_value = True - - if has_value or show_zero_values: + + 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) data.extend([{},total_row]) From 6e59aca394b40a71c3ae3bbc988acb1501522d00 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 29 Apr 2015 13:07:36 +0530 Subject: [PATCH 2/2] [enhancement] sort root accounts as assets, liability, equity, income, expense --- .../page/accounts_browser/accounts_browser.py | 6 +++++- .../accounts/report/financial_statements.py | 21 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py index 15cfdd2acc5..2318588efe3 100644 --- a/erpnext/accounts/page/accounts_browser/accounts_browser.py +++ b/erpnext/accounts/page/accounts_browser/accounts_browser.py @@ -6,6 +6,7 @@ import frappe import frappe.defaults from frappe.utils import flt from erpnext.accounts.utils import get_balance_on +from erpnext.accounts.report.financial_statements import sort_root_accounts @frappe.whitelist() def get_companies(): @@ -21,12 +22,15 @@ def get_children(): # root if args['parent'] in ("Accounts", "Cost Centers"): acc = frappe.db.sql(""" select - name as value, if(group_or_ledger='Group', 1, 0) as expandable + name as value, if(group_or_ledger='Group', 1, 0) as expandable, root_type, report_type from `tab%s` where ifnull(parent_%s,'') = '' and `company` = %s and docstatus<2 order by name""" % (ctype, ctype.lower().replace(' ','_'), '%s'), company, as_dict=1) + + if args["parent"]=="Accounts": + sort_root_accounts(acc) else: # other acc = frappe.db.sql("""select diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 4ae61ca5138..fc4ebec2329 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -186,7 +186,10 @@ def filter_accounts(accounts, depth=10): filtered_accounts = [] def add_to_list(parent, level): if level < depth: - for child in (parent_children_map.get(parent) or []): + children = parent_children_map.get(parent) or [] + if parent == None: + sort_root_accounts(children) + for child in children: child.indent = level filtered_accounts.append(child) add_to_list(child.name, level + 1) @@ -202,6 +205,22 @@ def filter_accounts(accounts, depth=10): add_to_list(None, 0) return filtered_accounts, accounts_by_name + +def sort_root_accounts(roots): + """Sort root types as Asset, Liability, Equity, Income, Expense""" + + def compare_roots(a, b): + if a.report_type != b.report_type and a.report_type == "Balance Sheet": + return -1 + if a.root_type != b.root_type and a.root_type == "Asset": + return -1 + if a.root_type == "Liability" and b.root_type == "Equity": + return -1 + if a.root_type == "Income" and b.root_type == "Expense": + return -1 + return 1 + + roots.sort(compare_roots) def get_gl_entries(company, from_date, to_date, root_lft, root_rgt, ignore_closing_entries=False): """Returns a dict like { "account": [gl entries], ... }"""