diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index 8270ddb91bc494b0b7bb2032b3c06c99f3671edb..5ee293aa1874f146b12087c6f97b2796437de240 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -1,7 +1,6 @@ -from django.utils.translation import gettext as _ - from django.db.models import FilteredRelation, Q, QuerySet from django.db.models.aggregates import Count, Sum +from django.utils.translation import gettext as _ from aleksis.apps.kolego.models import AbsenceReason from aleksis.core.models import Group, Person, SchoolTerm @@ -34,7 +33,6 @@ Group.add_permission("assign_grouprole", _("Can assign a group role for this gro Person.add_permission("register_absence_person", _("Can register an absence for a person")) - def annotate_person_statistics( persons: QuerySet[Person], participations_filter: Q, personal_notes_filter: Q ) -> QuerySet[Person]: @@ -59,7 +57,7 @@ def annotate_person_statistics( filter=Q(filtered_participation_statuses__absence_reason__count_as_absent=True), distinct=True, ), - tardiness_sum=Sum("filtered_participation_statuses__tardiness"), + tardiness_sum=Sum("filtered_participation_statuses__tardiness", distinct=True), tardiness_count=Count( "filtered_participation_statuses", filter=Q(filtered_participation_statuses__tardiness__gt=0), @@ -104,7 +102,11 @@ def annotate_person_statistics_for_school_term( datetime_end__date__lte=school_term.date_end, ) if group: - documentations.filter(Q(course__groups=group) | Q(course__groups__parent_groups=group)) + documentations.filter( + pk__in=Documentation.objects.filter(course__groups=group).union( + Documentation.objects.filter(course__groups__parent_groups=group) + ) + ) docs = list(documentations.values_list("pk", flat=True)) return annotate_person_statistics( persons,