{% extends "base.html" %} {% block title %}Utility Bills{% endblock %} {% block page_title %}Utility Bills{% endblock %} {% block extra_css %} .util-chip { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 10px; text-transform: uppercase; letter-spacing: .05em; } {% endblock %} {% block topbar_actions %} ← Utilities New Bill {% endblock %} {% block content %}
Clear
{% if bills %}
{% for b in bills %} {% endfor %}
Provider Period Due Amount Usage Status Actions
{{ b.provider.name }}
{{ b.provider.type_label }}
{{ b.period_label }} {{ b.due_date.strftime('%b %d, %Y') if b.due_date else '—' }} {{ b.amount | currency }} {% if b.usage %}{{ '%.1f' | format(b.usage | float) }} {{ b.usage_unit or '' }}{% else %}—{% endif %} {% if b.status == 'paid' %} Paid {% elif b.status == 'overdue' %} {{ b.days_until_due | abs }}d late {% elif b.status == 'due_soon' %} Due in {{ b.days_until_due }}d {% else %} Unpaid {% endif %} {% if not b.is_paid %} Pay {% endif %}
{% if pagination.pages > 1 %}
Page {{ pagination.page }} of {{ pagination.pages }}  ·  {{ ((pagination.page-1)*30)+1 }}–{{ [pagination.page*30, pagination.total]|min }} of {{ pagination.total }}
{% if pagination.has_prev %} ← Prev {% endif %} {% if pagination.has_next %} Next → {% endif %}
{% endif %}
{% else %}
No bills match

Try clearing the filters, or record a new bill.

New Bill
{% endif %} {% endblock %}