{% extends '@App/app.html.twig' %} {% block title %}{{ title }}{% endblock %} {% block page_header %}{% endblock %} {% block content %} {% set is_quote = scope == 'quote' %} {% set index_route = is_quote ? 'billing_quote_index' : 'billing_invoice_index' %} {% set visible_total = documents|length %} {% set draft_count = documents|filter(document => document.status == 'draft')|length %} {% set sent_count = documents|filter(document => document.status in ['sent', 'viewed'])|length %} {% set validated_count = documents|filter(document => document.status in ['validated', 'issued', 'sent', 'partially_paid', 'paid', 'overdue', 'dispute'])|length %} {% set completed_count = documents|filter(document => document.status == (is_quote ? 'accepted' : 'paid'))|length %} {% set overdue_count = documents|filter(document => document.status == 'overdue')|length %} {% set page_size = 20 %}

{{ title }}

{{ is_quote ? 'Créez, envoyez et suivez vos propositions commerciales.' : 'Pilotez vos factures, avoirs et règlements clients.' }}

{% if not is_quote %} {% if can_view_payments and is_granted('BILLING_EXPORT_PAYMENTS', company) %} Exporter factures & paiements {% endif %} {% if can_view_amounts %} Exporter {% endif %} {% if is_granted('BILLING_DOCUMENT_CREATE', 'credit_note') %} Nouvel avoir {% endif %} {% endif %} {{ is_quote ? 'Nouveau devis' : 'Nouvelle facture' }}
{% set kpis = is_quote ? [ {label: 'Devis affichés', value: visible_total, icon: 'ti ti-files', tone: 'indigo', trend: 'Total'}, {label: 'Brouillons', value: draft_count, icon: 'ti ti-pencil', tone: 'red', trend: 'À finaliser'}, {label: 'Envoyés ou vus', value: sent_count, icon: 'ti ti-send', tone: 'green', trend: 'En cours'}, {label: 'Acceptés', value: completed_count, icon: 'ti ti-circle-check-filled', tone: 'violet', trend: 'Gagnés'} ] : [ {label: 'Documents affichés', value: visible_total, icon: 'ti ti-files', tone: 'indigo', trend: 'Total'}, {label: 'Brouillons', value: draft_count, icon: 'ti ti-pencil', tone: 'red', trend: 'À finaliser'}, {label: 'Factures émises', value: validated_count, icon: 'ti ti-file-check', tone: 'green', trend: 'Émises'}, {label: 'Factures réglées', value: completed_count, icon: 'ti ti-cash', tone: 'violet', trend: overdue_count > 0 ? overdue_count ~ ' en retard' : 'À jour'} ] %} {% for kpi in kpis %}
{{ kpi.label }} {{ kpi.value }} {{ kpi.trend }}
{% endfor %}
{% if not is_quote %} {% endif %} Réinitialiser

Documents de la société active : {{ company.nom|default('Société active') }}

{% if can_view_amounts %}{% endif %}{% if can_view_payments %}{% endif %} {% for document in documents %} {% set document_number = document.number ?: 'Brouillon' %} {% set customer_name = document.customer ? document.customer.nom : 'Client non renseigné' %} {% set type_tone = document.type == 'quote' ? 'violet' : (document.type == 'credit_note' ? 'slate' : (document.type == 'deposit_invoice' ? 'amber' : (document.type == 'balance_invoice' ? 'teal' : 'blue'))) %} {% set type_icon = document.type == 'quote' ? 'ti ti-file-description' : (document.type == 'credit_note' ? 'ti ti-file-minus' : 'ti ti-file-invoice') %} {% set status_tone = document.status in ['paid', 'accepted'] ? 'success' : (document.status in ['overdue', 'dispute', 'refused'] ? 'danger' : (document.status in ['sent', 'viewed', 'partially_paid'] ? 'warning' : (document.status in ['validated', 'issued'] ? 'info' : (document.status == 'cancelled' ? 'muted' : 'draft')))) %} {% set status_label = document.type == 'quote' and document.status == 'validated' ? 'Validé' : status_labels[document.status]|default(document.status) %} {% set currency_label = document.currency == 'EUR' ? '€' : document.currency %} {% if can_view_amounts %}{% endif %} {% if can_view_payments %}{% endif %} {% endfor %}
DocumentTypeClientDateStatutTotal HTTotal TTCReste dûActions
{{ document_number }}{{ document.reference|default('') ?: 'Sans référence' }} {{ type_labels[document.type]|default(document.type) }} {{ customer_name }} {{ document.issueDate ? document.issueDate|date('d/m/Y') : '—' }} {{ status_label }}{{ document.subtotalHt|number_format(2, ',', ' ') }} {{ currency_label }} {{ document.totalTtc|number_format(2, ',', ' ') }} {{ currency_label }}{{ document.balanceDue|number_format(2, ',', ' ') }} {{ currency_label }}
{% if document.status == 'draft' and not document.locked %}{% endif %}
{% if can_view_amounts %}{% set currency_label = period_totals.currency == 'EUR' ? '€' : period_totals.currency %}
Période : {{ filters.periodLabel }}
{% if is_quote %}
Total devis HT
{{ period_totals.quotes|number_format(2, ',', ' ') }} {{ currency_label }}
{% else %}
Factures HT
{{ period_totals.invoices|number_format(2, ',', ' ') }} {{ currency_label }}
Avoirs HT
− {{ period_totals.credits|number_format(2, ',', ' ') }} {{ currency_label }}
Factures − avoirs HT
{{ period_totals.net|number_format(2, ',', ' ') }} {{ currency_label }}
{% endif %}
{% endif %}
{% endblock %}