{% import 'macros/_account_macros.html' as account_macros %} {% import 'macros/_commodity_macros.html' as commodity_macros %} {% macro render_diff_and_number(balance, cost, currency, invert=False) %} {% set num = balance.pop(currency, 0) %} {{ num|format_currency(currency, invert=invert) }} {% if currency in cost %} {% set cost_num = cost.pop(currency, 0) %} {% set diff = num - cost_num %} {% if invert %} {% set diff = -diff %} {% endif %} {%- if diff -%}
({{ diff|format_currency(currency) }}) {%- endif -%} {%- endif -%} {%- endmacro %} {% macro tree(account_node, invert=False, ledger=None) %} {% set ledger = ledger or g.ledger %}
  1. {% for currency in ledger.options.operating_currency %} {{ currency }} {% endfor %} {{ _('Other') }}

  2. {% set end_date = g.filtered.end_date %} {% for account in ([account_node] if account_node.name else account_node.children) if account|should_show recursive %} {% set balance = account.balance|cost_or_value(end_date) %} {% set balance_children = account.balance_children|cost_or_value(end_date) %} {% set cost = account.balance|cost if g.conversion == 'at_value' else {} %} {% set cost_children = account.balance_children|cost if g.conversion == 'at_value' else {} %} {% for currency in ledger.options.operating_currency %} {{ render_diff_and_number(balance, cost, currency, invert=invert) }} {{ render_diff_and_number(balance_children, cost_children, currency, invert=invert) }} {% endfor %} {% for currency in balance.keys()|sort %} {{ render_diff_and_number(balance, cost, currency, invert=invert) }} {{ commodity_macros.render_currency(ledger, currency) }}
    {% endfor %}
    {% for currency in balance_children.keys()|sort %} {{ render_diff_and_number(balance_children, cost_children, currency, invert=invert) }} {{ commodity_macros.render_currency(ledger, currency) }}
    {% endfor %}

    {% if account.children %}
      {{- loop(account.children|sort(attribute='name')) -}}
    {% endif %} {% endfor %}
{% endmacro %} {% macro render_budget(budget, currency, number=0) %} {% if currency in budget %} {% set diff = budget[currency] - number %} ({{ diff|format_currency(currency, show_if_zero=True) }}{{ ' '+currency if not number else '' }}) {% endif %} {% endmacro %} {% macro account_tree(account_name, interval_balances, dates, accumulate, ledger=None) %} {% set ledger = ledger or g.ledger %}
  1. {% for date_range in dates %} {% if accumulate %} {% set time_filter = dates[-1].begin|format_date_filter + ' - ' + date_range.end_inclusive|format_date_filter %} {% else %} {% set time_filter = date_range.end_inclusive|format_date_filter %} {% endif %} {{ date_range.end_inclusive|format_date }} {% endfor %}

  2. {% for account in [interval_balances[0].get(account_name)] recursive %}

    {% for date_range in dates %} {% set begin_date = dates[-1].begin if accumulate else date_range.begin %} {% set budget = ledger.budgets.calculate(account.name, begin_date, date_range.end) %} {% set budget_children = ledger.budgets.calculate_children(account.name, begin_date, date_range.end) %} {% set current_account = interval_balances[loop.index0].get(account.name) %} {% set balance = current_account.balance|cost_or_value(date_range.end_inclusive) %} {% set balance_children = current_account.balance_children|cost_or_value(date_range.end_inclusive) %} {% for amt in balance.amounts() %} {{ render_budget(budget, amt.currency, amt.number) -}} {{ commodity_macros.render_amount(ledger, amt, 'number') }} {% endfor %} {% for currency, number in budget.items() if currency not in balance %} {{ render_budget(budget, currency) }} {% endfor %} {% for amt in balance_children.amounts() %} {{ render_budget(budget_children, amt.currency, amt.number) -}} {{ commodity_macros.render_amount(ledger, amt, 'number') }} {% endfor %} {% for currency, number in budget_children.items() if currency not in balance_children %} {{ render_budget(budget_children, currency) }} {% endfor %} {% endfor %}

      {{ loop(account.children|sort(attribute='name')) }}
    {% endfor %}
{% endmacro %}