feat: add concil page
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user