{% extends "base.html" %} {% from "_macros.html" import money %} {% block title %}Rechnungen{% endblock %} {% block heading %}Rechnungen{% endblock %} {% block topbar_actions %}
+ Neue Rechnung
Alle {% for code, label in STATUS_LABELS.items() %} {{ label }} {% endfor %}
{% endblock %} {% block content %}
{# ---- Bulk-Action-Bar ---- #} {% if items %}
{% for inv in items %} {% set open_amt = (inv.total_gross or 0) - (inv.paid_amount or 0) %} {% endfor %}
Rechnungs-Nr. Datum Auftrag Kunde Art Fällig Brutto Bezahlt Offen Status
{% if inv.kind != 'storno' %} {% endif %} {{ inv.invoice_no }} {% if inv.kind == 'storno' %}STORNO{% endif %} {{ inv.issue_date }} {{ inv.order_no or '—' }} {{ inv.customer_name_snapshot }} {{ KIND_LABELS.get(inv.kind, inv.kind) }} {{ inv.due_date or '—' }} {{ money(inv.total_gross) }} {{ inv.currency }} {{ money(inv.paid_amount) }} {{ money(open_amt) }} {% if inv.kind != 'storno' %} {{ STATUS_LABELS.get(inv.status, inv.status) }} ▾ {% else %} {{ STATUS_LABELS.get(inv.status, inv.status) }} {% endif %} Öffnen
{% else %} {% from "_macros.html" import empty_state %} {{ empty_state( icon='🧾', title='Noch keine Rechnungen', description='Aus einem Auftrag mit Lieferschein wird die Rechnung — als ZUGFeRD-PDF mit eingebettetem XML, GoBD-konform festgeschrieben. Mahnwesen + Bank-Abgleich folgen automatisch.', workflow='📥 Anfrage → 💼 Angebot → 📋 Auftrag → 🏭 Werkstatt → 📦 Versand → 🧾 Rechnung', ctas=[ {'label': 'Zur Auftragsliste', 'href': '/sales-orders', 'primary': True}, {'label': 'Zu den Lieferscheinen','href': '/delivery-notes'}, {'label': '📚 Handbuch (DE)', 'href': '/handbuch/de/pdf', 'external': True}, ], ) }} {% endif %} {% endblock %}