diff --git a/aleksis/apps/alsijil/tasks.py b/aleksis/apps/alsijil/tasks.py index 882bbc1ae20d73a22a8a067c9a5bb32b9409aa33..dbecfe16b69b53ae0c584cfb4ce2d9a8f252cdd9 100644 --- a/aleksis/apps/alsijil/tasks.py +++ b/aleksis/apps/alsijil/tasks.py @@ -157,6 +157,29 @@ def generate_full_register_printout( prefetched_persons.append(person) # NEXT begins here: + def prefetch_notable_participations(*prefetch_related): + return Prefetch( + "participations", + to_attr="notable_participations", + queryset=ParticipationStatus.objects + .exclude( + Q(absence_reason__isnull=True) + | Q(tardiness__isnull=True) + ) + .select_related("absence_reason") + .prefetch_related(*prefetch_related), + ) + + def prefetch_personal_notes(*prefetch_related): + return Prefetch( + "new_personal_notes", + queryset=NewPersonalNote.objects + .exclude( + Q(note="") + | Q(extra_mark=None)) + .select_related("extra_mark") + .prefetch_related(*prefetch_related), + ) # build the query-set group = Group.objects.filter(pk=group) @@ -198,40 +221,23 @@ def generate_full_register_printout( if include_person_overviews: doc_query_set = Documentation.objects.select_related("subject").prefetch_related("teachers"), context["members"] = context["members"].prefetch_related( - Prefetch( - "participations", - queryset=ParticipationStatus.objects - .exclude( - Q(absence_reason__isnull=True) - | Q(tardiness__isnull=True) + prefetch_notable_participations( + Prefetch( + "related_documentation", + queryset=doc_query_set, ) - .select_related("absence_reason") - .prefetch_related( - Prefetch( - "related_documentation", - queryset=doc_query_set, - ), - ), - to_attr="notable_participations", ), - Prefetch( - "new_personal_notes", - queryset=NewPersonalNote.objects - .exclude( - Q(note="") - | Q(extra_marks=None)) - .prefetch_related( - Prefetch( - "documentation", - queryset=doc_query_set, - ), - "extra_mark", + prefetch_personal_notes( + Prefetch( + "documentation", + queryset=doc_query_set, ) ), ) if include_coursebook: context["documentations_by_day"] = {} + documentations.prefetch_related("participations", "personal_notes") for day in documentations.dates("datetime_start", "day"): context["documentations_by_day"][day] = documentations.filter(datetime_start__date=day)