{# Macro : class_stats_card(type, data, expanded=False, trimester_colors={}) TYPES : 'quantity', 'domains', 'competences', 'results' DATA STRUCTURE attendue : - quantity: {"total": 8, "completed": 6, "in_progress": 2, "not_started": 0} - domains: [{"name": "Calcul", "color": "#3B82F6", "total_points": 45.0, "elements_count": 12}] - competences: [{"name": "Calculer", "color": "#8B5CF6", "total_points": 25.0, "elements_count": 6}] - results: {"mean": 14.2, "median": 15.0, "distribution": [0,1,3,8,12,6,2,0], "min": 8.0, "max": 20.0} #} {% macro class_stats_card(type, data, expanded=False, trimester_colors={}) %} {# Configuration des icônes par type #} {% set icons = { 'quantity': '', 'domains': '', 'competences': '', 'results': '' } %} {# Configuration des titres et couleurs par type #} {% set config = { 'quantity': { 'title': 'Évaluations', 'color_class': 'blue', 'icon_color': 'text-blue-600', 'bg_color': 'bg-blue-50', 'border_color': 'border-blue-200' }, 'domains': { 'title': 'Domaines', 'color_class': 'purple', 'icon_color': 'text-purple-600', 'bg_color': 'bg-purple-50', 'border_color': 'border-purple-200' }, 'competences': { 'title': 'Compétences', 'color_class': 'indigo', 'icon_color': 'text-indigo-600', 'bg_color': 'bg-indigo-50', 'border_color': 'border-indigo-200' }, 'results': { 'title': 'Résultats', 'color_class': 'green', 'icon_color': 'text-green-600', 'bg_color': 'bg-green-50', 'border_color': 'border-green-200' } } %} {% set card_config = config[type] %}
{{ icons[type]|safe }}

{{ card_config.title }}

{% if type == 'quantity' %}

{{ data.total }} évaluations

{{ data.completed }} terminées

{% elif type == 'domains' %}

{{ data|length }} domaines

{{ data|sum(attribute='total_points')|round(1) }} points total

{% elif type == 'competences' %}

{{ data|length }} compétences

{{ data|sum(attribute='elements_count') }} éléments

{% elif type == 'results' %}

{{ data.mean|round(1) }}/20

Moyenne générale

{% endif %}
{% if type == 'quantity' %}

Terminées

{{ data.completed }}

En cours

{{ data.in_progress }}

Non commencées

{{ data.not_started }}

{% elif type == 'domains' %}
{% for domain in data %}

{{ domain.name }}

{{ domain.elements_count }} éléments

{{ domain.total_points|round(1) }} pts

{% endfor %}
{% elif type == 'competences' %}
{% for competence in data %}
{{ competence.name[:2]|upper }}

{{ competence.name }}

{{ competence.elements_count }} éléments

{{ competence.total_points|round(1) }} pts

{% endfor %}
{% elif type == 'results' %}

Moyenne

{{ data.mean|round(1) }}

Médiane

{{ data.median|round(1) }}

Minimum

{{ data.min|round(1) }}

Maximum

{{ data.max|round(1) }}

Distribution des notes :

{% for count in data.distribution %}
{% if count > 0 %}
{{ count }}
{% endif %}
{% endfor %}
{% for i in range(data.distribution|length) %} {{ i }}-{{ i+1 }} {% endfor %}
{% endif %}
{% endmacro %} {# JavaScript pour l'interaction d'expansion - À inclure dans la page qui utilise le composant #}