feat: add concil page

This commit is contained in:
2025-08-11 06:01:23 +02:00
parent 13f0e69bb0
commit c132419213
17 changed files with 5072 additions and 12 deletions

View File

@@ -124,4 +124,60 @@ class AssessmentRepository(BaseRepository[Assessment]):
elif status == 'not_started' and progress_status == 'not_started':
filtered_assessments.append(assessment)
return filtered_assessments
return filtered_assessments
def find_completed_by_class_trimester(self, class_group_id: int, trimester: int) -> List[Assessment]:
"""Trouve les évaluations terminées d'une classe pour un trimestre."""
assessments = Assessment.query.filter_by(
class_group_id=class_group_id,
trimester=trimester
).options(
joinedload(Assessment.class_group),
joinedload(Assessment.exercises).joinedload(Exercise.grading_elements)
).all()
# Filtrer sur progression = 100%
completed_assessments = []
for assessment in assessments:
progress = assessment.grading_progress
if progress.get('status') == 'completed':
completed_assessments.append(assessment)
return completed_assessments
def find_by_class_trimester_with_details(self, class_group_id: int, trimester: int) -> List[Assessment]:
"""Trouve toutes les évaluations d'une classe pour un trimestre avec détails complets."""
return Assessment.query.filter_by(
class_group_id=class_group_id,
trimester=trimester
).options(
joinedload(Assessment.class_group),
joinedload(Assessment.exercises).joinedload(Exercise.grading_elements)
).order_by(Assessment.date.desc()).all()
def get_trimester_statistics(self, class_group_id: int, trimester: int) -> dict:
"""Statistiques des évaluations pour une classe/trimestre."""
assessments = self.find_by_class_trimester_with_details(class_group_id, trimester)
completed = 0
in_progress = 0
not_started = 0
for assessment in assessments:
progress = assessment.grading_progress
status = progress.get('status', 'not_started')
if status == 'completed':
completed += 1
elif status == 'in_progress':
in_progress += 1
else:
not_started += 1
return {
'total': len(assessments),
'completed': completed,
'in_progress': in_progress,
'not_started': not_started,
'completion_percentage': (completed / len(assessments) * 100) if assessments else 0
}