{# templates/analytics/_bloc_comparatif.html.twig ───────────────────────────────────────────────────────────────────────────── Bloc comparatif — Multi-Cartes uniquement. Paramètres attendus : statsParCarte (array) → [beneficiaire_id => { vues: int, clics: int }] trié par vues décroissantes (depuis le repository) beneficiaires (array) → collection de Beneficiaire ───────────────────────────────────────────────────────────────────────────── #} {# ── Index des bénéficiaires par id pour lookup rapide ── #} {% set benefIndex = {} %} {% for b in beneficiaires %} {% set benefIndex = benefIndex | merge({ (b.id): b }) %} {% endfor %} {# ── Valeur max pour normaliser les barres ── #} {% set maxVues = 1 %} {% for id, stats in statsParCarte %} {% if stats.vues > maxVues %} {% set maxVues = stats.vues %} {% endif %} {% endfor %} {# ── Palette couleurs (même ordre que _bloc_parc) ── #} {% set palette = ['#667eea', '#764ba2', '#22c55e', '#f59e0b', '#ef4444', '#06b6d4', '#8b5cf6', '#ec4899'] %}

🏆 Comparatif performance

{{ jours }} derniers jours
{% if statsParCarte is empty %}

Aucune donnée disponible pour comparer les cartes.

{% else %} {# ══════════════════════════════════════════════════════════════════ TABLEAU COMPARATIF ══════════════════════════════════════════════════════════════════ #}
{% set rang = 1 %} {% for id, stats in statsParCarte %} {% set benef = benefIndex[id] ?? null %} {% set couleur = palette[(rang - 1) % palette | length] %} {% set engagement = stats.vues > 0 ? ((stats.clics / stats.vues) * 100) | round(1) : 0 %} {% set pctBarre = maxVues > 0 ? ((stats.vues / maxVues) * 100) | round(1) : 0 %} {# Rang #} {# Identité #} {# Vues #} {# Clics #} {# Taux engagement #} {# Barre performance relative #} {% set rang = rang + 1 %} {% endfor %}
# Carte Vues Clics Engagement Performance
{% if rang == 1 %} 🥇 {% elseif rang == 2 %} 🥈 {% elseif rang == 3 %} 🥉 {% else %} {{ rang }} {% endif %} {% if benef %} {{ benef.fullName }} {% if benef.entreprise %} {{ benef.entreprise }} {% endif %} {% else %} Carte #{{ id }} {% endif %} {{ stats.vues }} {{ stats.clics }} {% if engagement > 0 %} {{ engagement }}% {% else %} {% endif %}
{{ pctBarre }}%
{# ══════════════════════════════════════════════════════════════════ BAR CHART COMPARATIF — vues vs clics par carte ══════════════════════════════════════════════════════════════════ #}
{% endif %}