diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a79287ec7afe8b8aeecdbe655fe1333a74430e0b..556b6f5b29fef2433c6f082a3af3a7b14e188bc2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ Fixed ~~~~~ * Students were displayed multiple times in class register views. +* Absences were counted multiple times in some class register views. `2.1`_ - 2022-06-25 ------------------- diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index 5b0e5ac4b1337dfdc44c97470c36cd954fc7b915..b53f87f997b9f4b62336ef594fcc2676cc00a983 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -434,6 +434,7 @@ def generate_person_list_with_class_register_statistics( "filtered_personal_notes", filter=Q(filtered_personal_notes__absent=True) & ~Q(filtered_personal_notes__excuse_type__count_as_absent=False), + distinct=True, ), excused=Count( "filtered_personal_notes", @@ -442,6 +443,7 @@ def generate_person_list_with_class_register_statistics( filtered_personal_notes__excused=True, ) & ~Q(filtered_personal_notes__excuse_type__count_as_absent=False), + distinct=True, ), excused_without_excuse_type=Count( "filtered_personal_notes", @@ -450,15 +452,16 @@ def generate_person_list_with_class_register_statistics( filtered_personal_notes__excused=True, filtered_personal_notes__excuse_type__isnull=True, ), + distinct=True, ), unexcused=Count( "filtered_personal_notes", filter=Q(filtered_personal_notes__absent=True, filtered_personal_notes__excused=False), + distinct=True, ), tardiness=Sum("filtered_personal_notes__late"), tardiness_count=Count( - "filtered_personal_notes", - filter=Q(filtered_personal_notes__late__gt=0), + "filtered_personal_notes", filter=Q(filtered_personal_notes__late__gt=0), distinct=True ), )