feat: add completion indicator

This commit is contained in:
2025-08-04 15:36:24 +02:00
parent a1e3e4a688
commit 21aa7015f9
4 changed files with 216 additions and 11 deletions

View File

@@ -48,6 +48,65 @@ class Assessment(db.Model):
def __repr__(self):
return f'<Assessment {self.title}>'
@property
def grading_progress(self):
"""Calcule le pourcentage de progression des notes saisies pour cette évaluation.
Retourne un dictionnaire avec les statistiques de progression."""
# Obtenir tous les éléments de notation pour cette évaluation
total_elements = 0
completed_elements = 0
total_students = len(self.class_group.students)
if total_students == 0:
return {
'percentage': 0,
'completed': 0,
'total': 0,
'status': 'no_students'
}
# Parcourir tous les exercices et leurs éléments de notation
for exercise in self.exercises:
for grading_element in exercise.grading_elements:
total_elements += total_students
# Compter les notes saisies (valeur non nulle et non vide)
completed_for_element = db.session.query(Grade).filter(
Grade.grading_element_id == grading_element.id,
Grade.value.isnot(None),
Grade.value != '',
Grade.value != '.'
).count()
completed_elements += completed_for_element
if total_elements == 0:
return {
'percentage': 0,
'completed': 0,
'total': 0,
'status': 'no_elements'
}
percentage = round((completed_elements / total_elements) * 100)
# Déterminer le statut
if percentage == 0:
status = 'not_started'
elif percentage == 100:
status = 'completed'
else:
status = 'in_progress'
return {
'percentage': percentage,
'completed': completed_elements,
'total': total_elements,
'status': status,
'students_count': total_students
}
class Exercise(db.Model):
id = db.Column(db.Integer, primary_key=True)