From 742b613534df33db62dce375db4515a224660633 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Mon, 23 Mar 2020 02:00:00 +1100 Subject: [PATCH] Hide accounts with nonzero balances that round to zero --- ledger_pyreport/__init__.py | 6 +++--- ledger_pyreport/jinja2/balance.html | 2 +- ledger_pyreport/jinja2/pandl.html | 2 +- ledger_pyreport/jinja2/trial.html | 2 +- ledger_pyreport/jinja2/trial_multiple.html | 2 +- ledger_pyreport/model.py | 6 ++++++ 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/ledger_pyreport/__init__.py b/ledger_pyreport/__init__.py index 6b87753..519d3c9 100644 --- a/ledger_pyreport/__init__.py +++ b/ledger_pyreport/__init__.py @@ -99,7 +99,7 @@ def balance(): # Delete accounts with always zero balances accounts = list(l.accounts.values()) for account in accounts[:]: - if all(b.get_balance(account) == 0 and b.get_total(account) == 0 for b in balance_sheets): + if all(b.get_balance(account).exchange(report_currency, True).near_zero and b.get_total(account).exchange(report_currency, True).near_zero for b in balance_sheets): accounts.remove(account) return flask.render_template('balance.html', ledger=l, balance_sheets=balance_sheets, accounts=accounts, config=config, report_currency=report_currency, cash=cash) @@ -173,7 +173,7 @@ def transactions(): @app.template_filter('a') def filter_amount(amt): - if amt.amount < 0.005 and amt.amount >= -0.005: + if amt.near_zero: return flask.Markup('0.00 ') elif amt > 0: return flask.Markup('{:,.2f} '.format(amt.amount).replace(',', ' ')) # Narrow no-break space @@ -220,7 +220,7 @@ def debug_imbalances(): if cash: l = accounting.ledger_to_cash(l, report_currency) - transactions = [t for t in l.transactions if t.date <= date and t.date >= pstart and abs(sum((p.amount for p in t.postings), Balance()).exchange(report_currency, True).amount) > 0.005] + transactions = [t for t in l.transactions if t.date <= date and t.date >= pstart and not sum((p.amount for p in t.postings), Balance()).exchange(report_currency, True).near_zero] total_dr = sum((p.amount for t in transactions for p in t.postings if p.amount > 0), Balance()).exchange(report_currency, True) total_cr = sum((p.amount for t in transactions for p in t.postings if p.amount < 0), Balance()).exchange(report_currency, True) diff --git a/ledger_pyreport/jinja2/balance.html b/ledger_pyreport/jinja2/balance.html index 747d7cf..e304d47 100644 --- a/ledger_pyreport/jinja2/balance.html +++ b/ledger_pyreport/jinja2/balance.html @@ -36,7 +36,7 @@ {% for balance_sheet in balance_sheets %} {% set amount = (-balance_sheet.get_balance(account) if invert else balance_sheet.get_balance(account)).exchange(report_currency, True) %} - {% if amount != 0 %} + {% if not amount.near_zero %} {% if account.name == config['current_year_earnings'] %} {% else %} diff --git a/ledger_pyreport/jinja2/pandl.html b/ledger_pyreport/jinja2/pandl.html index ecc484c..cda1e00 100644 --- a/ledger_pyreport/jinja2/pandl.html +++ b/ledger_pyreport/jinja2/pandl.html @@ -29,7 +29,7 @@ {% for pandl in pandls %} {% set amount = (-pandl.get_balance(account) if invert else pandl.get_balance(account)).exchange(report_currency, True) %} - {% if amount != 0 %}{{ amount|a }}{% endif %} + {% if not amount.near_zero %}{{ amount|a }}{% endif %} {% endfor %} diff --git a/ledger_pyreport/jinja2/trial.html b/ledger_pyreport/jinja2/trial.html index e325e85..4237453 100644 --- a/ledger_pyreport/jinja2/trial.html +++ b/ledger_pyreport/jinja2/trial.html @@ -34,7 +34,7 @@ {# Display in "cost basis" as we have already accounted for unrealised gains #} {% set balance = trial_balance.get_balance(account).exchange(report_currency, True) %} {% set trn_url = "/transactions?" + {'date': trial_balance.date.strftime('%Y-%m-%d'), 'pstart': trial_balance.pstart.strftime('%Y-%m-%d'), 'account': account.name, 'cash': 'on' if cash else ''}|urlencode %} - {% if balance != 0 %} + {% if not balance.near_zero %} {{ account.name }} {% if balance > 0 %}{{ balance|b }}{% endif %} diff --git a/ledger_pyreport/jinja2/trial_multiple.html b/ledger_pyreport/jinja2/trial_multiple.html index be365e5..103d9d0 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_currency, True) %} - {% if balance != 0 %}{{ balance|a }}{% endif %} + {% if not balance.near_zero %}{{ balance|a }}{% endif %} {% endfor %} {% endfor %} diff --git a/ledger_pyreport/model.py b/ledger_pyreport/model.py index 2112978..3c807ab 100644 --- a/ledger_pyreport/model.py +++ b/ledger_pyreport/model.py @@ -220,6 +220,12 @@ class Amount: return Amount(self.amount * price.amount, currency) raise TypeError('Cannot exchange {} to {}'.format(self.currency, currency)) + + @property + def near_zero(self): + if abs(self.amount) < 0.005: + return True + return False class Balance: def __init__(self, amounts=None):