Skip to content
Snippets Groups Projects
Verified Commit 3e931079 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Fix queries for person statistics

parent b14d34c2
No related branches found
No related tags found
1 merge request!361Resolve "Add statistics page for absences"
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,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment