From 6b2fbde4820fb48eb61ea057a5b983bb13be86d4 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Sat, 4 Apr 2020 20:08:55 +1100 Subject: [PATCH] Display zero balances in trial balance if the account has transactions --- ledger_pyreport/__init__.py | 14 +++++++++++--- ledger_pyreport/jinja2/trial.html | 14 ++++++-------- ledger_pyreport/jinja2/trial_multiple.html | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ledger_pyreport/__init__.py b/ledger_pyreport/__init__.py index b649fb5..52e925b 100644 --- a/ledger_pyreport/__init__.py +++ b/ledger_pyreport/__init__.py @@ -59,7 +59,11 @@ def trial(): else: total_cr -= balance - return flask.render_template('trial.html', date=date, pstart=pstart, trial_balance=trial_balance, accounts=sorted(l.accounts.values(), key=lambda a: a.name), total_dr=total_dr, total_cr=total_cr, report_commodity=report_commodity) + # Identify which accounts have transactions + accounts = sorted(l.accounts.values(), key=lambda a: a.name) + trial_balance.trn_accounts = [a for a in accounts if any(p.account == a for t in l.transactions for p in t.postings if t.date >= pstart and t.date <= date)] + + return flask.render_template('trial.html', date=date, pstart=pstart, trial_balance=trial_balance, accounts=accounts, total_dr=total_dr, total_cr=total_cr, report_commodity=report_commodity) else: # Get multiple trial balances for comparison dates = [date.replace(year=date.year - i) for i in range(0, compare + 1)] @@ -71,10 +75,14 @@ def trial(): l = accounting.ledger_to_cash(l, report_commodity) trial_balances = [accounting.trial_balance(l.clone(), d, p, report_commodity) for d, p in zip(dates, pstarts)] - # Delete accounts with always zero balances + # Identify which accounts have transactions in which periods accounts = sorted(l.accounts.values(), key=lambda a: a.name) + for trial_balance in trial_balances: + trial_balance.trn_accounts = [a for a in accounts if any(p.account == a for t in l.transactions for p in t.postings if t.date >= trial_balance.pstart and t.date <= trial_balance.date)] + + # Delete accounts with always no transactions for account in accounts[:]: - if all(t.get_balance(account).exchange(report_commodity, True).near_zero for t in trial_balances): + if not any(account in b.trn_accounts for b in trial_balances): accounts.remove(account) return flask.render_template('trial_multiple.html', trial_balances=trial_balances, accounts=accounts, report_commodity=report_commodity, cash=cash) diff --git a/ledger_pyreport/jinja2/trial.html b/ledger_pyreport/jinja2/trial.html index cb2fab3..149572a 100644 --- a/ledger_pyreport/jinja2/trial.html +++ b/ledger_pyreport/jinja2/trial.html @@ -30,17 +30,15 @@ Dr Cr - {% for account in accounts %} + {% for account in accounts if account in trial_balance.trn_accounts %} {# Display in "cost basis" as we have already accounted for unrealised gains #} {% set balance = trial_balance.get_balance(account).exchange(report_commodity, True) %} {% set trn_url = "/transactions?" + {'date_end': trial_balance.date.strftime('%Y-%m-%d'), 'date_beg': trial_balance.pstart.strftime('%Y-%m-%d'), 'account': account.name, 'cash': 'on' if cash else ''}|urlencode %} - {% if not balance.near_zero %} - - {{ account.name }} - {% if balance > 0 %}{{ balance|b }}{% endif %} - {% if balance < 0 %}{{ -balance|b }}{% endif %} - - {% endif %} + + {{ account.name }} + {% if balance >= 0 %}{{ balance|b }}{% endif %} + {% if balance < 0 %}{{ -balance|b }}{% endif %} + {% endfor %} diff --git a/ledger_pyreport/jinja2/trial_multiple.html b/ledger_pyreport/jinja2/trial_multiple.html index faf9a0d..e1e350d 100644 --- a/ledger_pyreport/jinja2/trial_multiple.html +++ b/ledger_pyreport/jinja2/trial_multiple.html @@ -34,7 +34,7 @@ {{ account.name }} {% for trial_balance in trial_balances %} {% set balance = trial_balance.get_balance(account).exchange(report_commodity, True) %} - {% if not balance.near_zero %}{{ balance|abs|b }} {% if balance >= 0 %}Dr{% else %}Cr{% endif %}{% endif %} + {% if account in trial_balance.trn_accounts %}{{ balance|abs|b }} {% if balance >= 0 %}Dr{% else %}Cr{% endif %}{% endif %} {% endfor %} {% endfor %}