{# templates/analytics/multi_cartes.html.twig ───────────────────────────────────────────────────────────────────────────── Dashboard analytics — Pack Multi-Cartes (529/769/999€) Structure différente des autres niveaux : - pas de beneficiaire unique → on raisonne sur la CommandeMulti - _layout.html.twig ne convient pas (pas de beneficiaire en contexte) - on extends directement account/base_account.html.twig Blocs : parc (consolidé), comparatif, puis boucle par carte ───────────────────────────────────────────────────────────────────────────── #} {% extends 'account/base_account.html.twig' %} {% block page_title %}Analytics parc — {{ commande.reference }}{% endblock %} {% block stylesheets %} {{ parent() }} {% endblock %} {% block content %} {# ══════════════════════════════════════════════════════════════════════════ HEADER SPÉCIFIQUE MULTI — pas de beneficiaire.fullName ici ══════════════════════════════════════════════════════════════════════════ #}

Tableau de bord du parc

{{ commande.reference }}

◈ {{ commande.packLabel }}
{# ── Sélecteur de période ── #}
Période :
{% for p in [7, 30, 90] %} {{ p }}j {% endfor %}
{# ══════════════════════════════════════════════════════════════════════════ BLOCS CONSOLIDÉS DU PARC ══════════════════════════════════════════════════════════════════════════ #}
{# ── Vue consolidée — KPIs globaux + donut répartition ── #} {{ include('analytics/_bloc_parc.html.twig', { commande: commande, totalParc: totalParc, statsParCarte: statsParCarte }) }} {# ── Comparatif performance entre cartes ── #} {{ include('analytics/_bloc_comparatif.html.twig', { statsParCarte: statsParCarte, beneficiaires: beneficiaires }) }}
{# ══════════════════════════════════════════════════════════════════════════ DÉTAIL PAR CARTE — boucle sur chaque bénéficiaire ══════════════════════════════════════════════════════════════════════════ #}

Détail par carte {{ beneficiaires | length }} carte{{ beneficiaires | length > 1 ? 's' : '' }}

{% for beneficiaire in beneficiaires %} {% set statsCarteActuelle = statsParCarte[beneficiaire.id] ?? { vues: 0, clics: 0 } %}
{# ── En-tête carte individuelle ── #}

{{ beneficiaire.fullName }}

{% if beneficiaire.entreprise %} {{ beneficiaire.entreprise }} {% endif %}
{# Mini KPIs résumés ── #}
{{ statsCarteActuelle.vues }} vues
{{ statsCarteActuelle.clics }} clics
{% if statsCarteActuelle.vues > 0 %} {{ ((statsCarteActuelle.clics / statsCarteActuelle.vues) * 100) | round(1) }}% {% else %} — {% endif %} engagement
{# ── Blocs stats de la carte ── #}
{{ include('analytics/_bloc_vues.html.twig', { totalVues: statsCarteActuelle.vues, mode: 'compteur' }) }} {{ include('analytics/_bloc_appareils.html.twig', { appareils: statsCarteActuelle.appareils ?? [] }) }} {{ include('analytics/_bloc_pays.html.twig', { pays: statsCarteActuelle.pays ?? [], mode: 'liste' }) }} {{ include('analytics/_bloc_source.html.twig', { sources: statsCarteActuelle.sources ?? [] }) }}
{# Séparateur entre cartes sauf après la dernière #} {% if not loop.last %}
{% endif %} {% endfor %}
{# ══════════════════════════════════════════════════════════════════════════ EXPORT PDF PARC ══════════════════════════════════════════════════════════════════════════ #}
📄 Exporter le rapport du parc

Rapport consolidé {{ beneficiaires | length }} cartes sur {{ jours }} jours

{# ══════════════════════════════════════════════════════════════════════════ FOOTER RGPD ══════════════════════════════════════════════════════════════════════════ #} {% endblock %} {% block javascripts %} {{ parent() }} {% endblock %}