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):