{% extends "base.html" %} {% from 'components/common/macros.html' import hero_section %} {% block title %}Préparation Conseil de Classe - {{ class_group.name }} - T{{ trimester }}{% endblock %} {# Override le style du main container pour éviter le clipping des hover effects #} {% block main_class %}w-full px-8 py-8 bg-gray-100{% endblock %} {% block content %}
{# 1. Hero Section #} {% set meta_info = [ { 'icon': '', 'text': council_data.total_students ~ ' élèves' }, { 'icon': '', 'text': 'Trimestre ' ~ trimester }, { 'icon': '', 'text': council_data.completed_appreciations ~ '/' ~ council_data.total_students ~ ' appréciations rédigées' } ] %}
{{ hero_section( title="📊 Préparation Conseil de Classe", subtitle="Rédaction des appréciations • " + class_group.name, meta_info=meta_info, gradient_class="from-purple-600 to-orange-500" ) }}
{# Breadcrumb de retour et sélecteur de trimestre #}
{# Sélecteur de trimestre #}
{# 2. Filtres et Actions Principales #}
{# Recherche et filtres - masqués en mode focus #}
{# Actions globales #}
{# Toujours visible : bouton mode focus #} {# Actions masquées en mode focus #}
{# Compteur de résultats et contrôles mode focus #}
{# Mode liste - compteur normal #}

{{ student_summaries|length }} élèves affichés

{# Mode focus - contrôles de navigation #}
{# Header compact mode focus - visible uniquement en mode focus #} {# 3. Liste des Élèves (Cards Expandables) #}
{# Mode liste - tous les élèves visibles #}
{% for summary in student_summaries %}
{# Header avec layout en deux colonnes principales #}
{# Layout principal : Informations élève + Appréciation + Moyenne #}
{# Colonne 1: Informations élève avec avatar #}
{# Avatar avec initiales #}
{{ summary.student.first_name[0] }}{{ summary.student.last_name[0] }}
{# Informations de base élève #}

{{ summary.student.last_name }}, {{ summary.student.first_name }}

{# Info de base avec chevron #}
{{ summary.assessment_count }} évaluation(s) {% if summary.performance_status == 'struggling' %} ⚠️ Attention requise {% endif %} {# Chevron d'expansion #}
{# Résumé compact des valeurs spéciales #} {% if summary.special_values_summary and summary.special_values_summary.has_special_values %}
Valeurs spéciales: {% for special_value, data in summary.special_values_summary.global.items() %} {% if data.count > 0 %} {% set tooltip_content = [] %} {% for detail in data.details %} {% if detail.comment %} {% set _ = tooltip_content.append(detail.element_name + ': ' + detail.comment) %} {% else %} {% set _ = tooltip_content.append(detail.element_name) %} {% endif %} {% endfor %} {{ special_value }} {{ data.count }} {% endif %} {% endfor %}
{% endif %}
{# Colonne 2: Zone d'appréciation intégrée #}
Sauvegarde automatique {% if summary.appreciation %} {{ summary.appreciation.last_modified.strftime('%d/%m à %H:%M') }} {% endif %}
0 caractères
{# Colonne 3: Moyenne et statuts #}
{# Moyenne principale #}
{% if summary.overall_average %} {{ "%.1f"|format(summary.overall_average) }}/20 {% else %} Pas de données {% endif %}
{# Indicateurs de statut compacts #}
{# Indicateur d'appréciation #} {% if summary.has_appreciation %} Rédigée {% else %} À rédiger {% endif %} {# Indicateur de tendance condensé #} {% if summary.overall_average and summary.grades_by_assessment | length > 1 %} {% set recent_assessments = summary.grades_by_assessment.values() | list | sort(attribute='date') %} {% set trend_recent = (recent_assessments[-1].score / recent_assessments[-1].max * 20) if recent_assessments | length > 0 else 0 %} {% set trend_previous = (recent_assessments[-2].score / recent_assessments[-2].max * 20) if recent_assessments | length > 1 else trend_recent %} {% if trend_recent > trend_previous + 1 %} {% elif trend_recent < trend_previous - 1 %} {% endif %} {% endif %}
{# Contenu expandable #}
{% endfor %}
{# Mode focus - un seul élève visible #}
{# Message si aucun élève #} {% if not student_summaries %}

Aucun élève trouvé

Aucune donnée disponible pour ce trimestre ou cette classe.

{% endif %} {# 4. Statistiques de classe (sidebar ou bottom) - masqué en mode focus #} {% if class_statistics and class_statistics.mean %}

Statistiques de la classe

{{ "%.1f"|format(class_statistics.mean) }}
Moyenne générale
{{ "%.1f"|format(class_statistics.min) }}
Minimum
{{ "%.1f"|format(class_statistics.max) }}
Maximum
{{ "%.1f"|format(class_statistics.median) }}
Médiane
{# Distribution des performances #}

Répartition des performances

{{ class_statistics.performance_distribution.excellent }}
Excellent (≥16)
{{ class_statistics.performance_distribution.good }}
Bien (14-16)
{{ class_statistics.performance_distribution.average }}
Moyen (10-14)
{{ class_statistics.performance_distribution.struggling }}
Difficulté (<10)
{% endif %}
{% endblock %} {% block head %} {% endblock %}