feat: add completion indicator
This commit is contained in:
59
models.py
59
models.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user