From 1dccf28d5fc074b17db09b221093be9d84553af3 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Tue, 5 Aug 2025 10:40:18 +0200 Subject: [PATCH] refact: remove exercise detail pages and modernize assessment interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove routes/exercises.py blueprint (only consultation routes) - Delete templates/exercise_detail.html (intermediate page removed) - Update app.py to remove exercises blueprint registration - Modernize templates/assessment_detail.html with: * Hero section with gradient background * Action cards with hover effects and animations * Centered progress indicator with visual circles * Compact exercise structure display * Improved responsive design and UX Part of Phase 2 UX improvements - eliminating intermediate pages for direct navigation. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- app.py | 2 - routes/exercises.py | 17 -- templates/assessment_detail.html | 453 +++++++++++++++++++++---------- templates/exercise_detail.html | 128 --------- 4 files changed, 310 insertions(+), 290 deletions(-) delete mode 100644 routes/exercises.py delete mode 100644 templates/exercise_detail.html diff --git a/app.py b/app.py index d129c21..f10b601 100644 --- a/app.py +++ b/app.py @@ -10,7 +10,6 @@ from core.logging import setup_logging # Import blueprints from routes.assessments import bp as assessments_bp -from routes.exercises import bp as exercises_bp from routes.grading import bp as grading_bp from routes.config import bp as config_bp @@ -40,7 +39,6 @@ def create_app(config_name=None): # Register blueprints app.register_blueprint(assessments_bp) - app.register_blueprint(exercises_bp) app.register_blueprint(grading_bp) app.register_blueprint(config_bp) diff --git a/routes/exercises.py b/routes/exercises.py deleted file mode 100644 index 5ba002c..0000000 --- a/routes/exercises.py +++ /dev/null @@ -1,17 +0,0 @@ -from flask import Blueprint, render_template -from models import Assessment, Exercise -from utils import handle_db_errors - -bp = Blueprint('exercises', __name__) - -# Routes de consultation seulement - La création/modification se fait via le formulaire unifié d'évaluation - -@bp.route('/assessments//exercises/') -@handle_db_errors -def detail(assessment_id, id): - from sqlalchemy.orm import joinedload - assessment = Assessment.query.get_or_404(assessment_id) - exercise = Exercise.query.options( - joinedload(Exercise.grading_elements) - ).filter_by(id=id, assessment_id=assessment_id).first_or_404() - return render_template('exercise_detail.html', assessment=assessment, exercise=exercise) \ No newline at end of file diff --git a/templates/assessment_detail.html b/templates/assessment_detail.html index c93e647..742ee4f 100644 --- a/templates/assessment_detail.html +++ b/templates/assessment_detail.html @@ -3,194 +3,361 @@ {% block title %}{{ assessment.title }} - Gestion Scolaire{% endblock %} {% block content %} -
-
-
- - ← Retour aux évaluations - -

{{ assessment.title }}

-

{{ assessment.class_group.name }} - {{ assessment.date.strftime('%d/%m/%Y') }} - Trimestre {{ assessment.trimester }}

-
-
- - Modifier l'évaluation complète - - +
+ +
+
+
+ + ← Retour aux évaluations + +

{{ assessment.title }}

+
+ + + + + {{ assessment.class_group.name }} + + + + + + {{ assessment.date.strftime('%d/%m/%Y') }} + + + + + + Trimestre {{ assessment.trimester }} + +
+
+
- -
-
-

Informations générales

-
-
-
-
-
Classe
-
{{ assessment.class_group.name }}
+ + + + +
+ +
+
+

État des corrections

+ {% set progress = assessment.grading_progress %} + {% if progress.status == 'completed' %} + Terminé + {% elif progress.status == 'in_progress' %} + En cours + {% elif progress.status == 'not_started' %} + À faire + {% endif %} +
- -
-
État des corrections
-
- {% set progress = assessment.grading_progress %} -
- - {% if progress.status == 'completed' %} -
- - - - Corrections terminées (100%) -
- {% elif progress.status == 'in_progress' %} - -
- - - - -
- Corrections en cours ({{ progress.percentage }}%) - Cliquer pour continuer -
- {% elif progress.status == 'not_started' %} - - - - - Corrections non commencées - Cliquer pour démarrer - - {% else %} -
- - - - État indéterminé -
- {% endif %} - - -
- {{ progress.completed }}/{{ progress.total }} notes saisies - {% if progress.students_count %} - ({{ progress.students_count }} élèves) - {% endif %} -
+ +
+ {% if progress.status == 'completed' %} +
+ + + +
+

100% Terminé

+

Toutes les corrections sont saisies

+ {% elif progress.status == 'in_progress' %} +
+ + + + +
+ {{ progress.percentage }}%
-
+
+

En cours

+

{{ progress.completed }} notes sur {{ progress.total }} saisies

+ + + + + Continuer la correction + + {% elif progress.status == 'not_started' %} +
+ + + +
+

0% - À commencer

+

Aucune note n'a encore été saisie

+ + + + + Démarrer la correction + + {% endif %} +
+ + +
+
+
+ Notes saisies : + {{ progress.completed }}/{{ progress.total }} +
+ {% if progress.students_count %} +
+ Élèves : + {{ progress.students_count }} +
+ {% endif %} +
+
+
+ + +
+

Informations générales

+
+
+ Classe + {{ assessment.class_group.name }} +
+
+ Date + {{ assessment.date.strftime('%d/%m/%Y') }} +
+
+ Trimestre + {{ assessment.trimester }} +
+
+ Coefficient + {{ assessment.coefficient }} +
+
+ Exercices + {{ assessment.exercises|length }}
{% if assessment.description %} -
-
Description
-
{{ assessment.description }}
+
+ Description +

{{ assessment.description }}

{% endif %} -
+
-
-
-

Exercices

- - Utilisez "Modifier l'évaluation complète" pour ajouter des exercices - +
+
+
+

Structure de l'évaluation

+ + {{ assessment.exercises|length }} exercice(s) + +
+
+ + + + Utilisez "Modifier" pour ajouter des exercices +
-
+
{% if assessment.exercises %} -
+
{% for exercise in assessment.exercises|sort(attribute='order') %} -
-
-
-

{{ exercise.title }}

- {% if exercise.description %} -

{{ exercise.description }}

- {% endif %} -
- {{ exercise.grading_elements|length }} élément(s) de notation +
+ +
+
+
+ + {{ loop.index }} + +
+

{{ exercise.title }}

+ {% set total_points = exercise.grading_elements | map(attribute='max_points') | sum %} + {% if total_points > 0 %} + + {{ total_points }} points total + + {% endif %} +
- + {% if exercise.description %} +

{{ exercise.description }}

+ {% endif %} +
+ + +
+ {% if exercise.grading_elements %} +
+ {% for element in exercise.grading_elements %} +
+
+
{{ element.label }}
+
+ {% if element.skill %} + + {{ element.skill }} + + {% endif %} + {% if element.grading_type == 'competences' %} + + Échelle + + {% endif %} +
+
+ {{ element.max_points }} +
+ {% if not loop.last %} +
+ {% endif %} + {% endfor %} +
+ {% else %} +

Aucun élément de notation

+ {% endif %}
{% endfor %}
{% else %} -
- - - -

Aucun exercice

-

Commencez par ajouter le premier exercice de cette évaluation.

-
- - Modifier l'évaluation complète - +
+
+ + +
+

Aucun exercice créé

+

+ Cette évaluation ne contient pas encore d'exercices. Utilisez le bouton "Modifier" pour structurer votre évaluation. +

+ + + + + Ajouter des exercices +
{% endif %}
- -
-
-

Actions

+ +
+
+

Actions supplémentaires

-
-
- - - +
+
+ + + + +
diff --git a/templates/exercise_detail.html b/templates/exercise_detail.html deleted file mode 100644 index 8b6e079..0000000 --- a/templates/exercise_detail.html +++ /dev/null @@ -1,128 +0,0 @@ -{% extends "base.html" %} - -{% block title %}{{ exercise.title }} - Gestion Scolaire{% endblock %} - -{% block content %} -
-
-
- - ← Retour à l'évaluation "{{ assessment.title }}" - -

{{ exercise.title }}

-

{{ assessment.title }} - {{ assessment.class_group.name }}

-
- -
- - -
-
-

Informations de l'exercice

-
-
-
-
-
Ordre
-
{{ exercise.order }}
-
-
-
Nombre d'éléments de notation
-
{{ exercise.grading_elements|length }}
-
- {% if exercise.description %} -
-
Description
-
{{ exercise.description }}
-
- {% endif %} -
-
-
- - -
-
-

Éléments de notation

- - Modifier l'évaluation complète - -
-
- {% if exercise.grading_elements %} -
- {% for element in exercise.grading_elements %} -
-
-
-
-

{{ element.label }}

- - {% if element.grading_type == 'score' %}Score (0-3){% else %}Points{% endif %} - -
- {% if element.description %} -

{{ element.description }}

- {% endif %} -
- {% if element.skill %} - Compétence: {{ element.skill }} - {% endif %} - Barème: {{ element.max_points }} {% if element.grading_type == 'points' %}point(s){% else %}max{% endif %} -
-
-
- - Utilisez "Modifier l'évaluation complète" pour modifier - -
-
-
- {% endfor %} -
- {% else %} -
- - - -

Aucun élément de notation

-

Commencez par ajouter le premier élément de notation pour cet exercice.

- -
- {% endif %} -
-
- - -
-
-

Actions

-
-
-
- - - - - Saisir les notes - - -
-
-
-
-{% endblock %} \ No newline at end of file