diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index d28f5bb41ad67a5e9c2d32fcb89a9195fc2bd626..820770d630ee50daa62c6419e7ba774522e601b4 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -93,6 +93,16 @@ def annotate_person_statistics( return persons +def annotate_person_statistics_from_documentations(docs: QuerySet[Documentation]) -> QuerySet[Person]: + """Annotate a queryset of persons with class register statistics from queryset of documentations.""" + docs = list(documentations.values_list("pk", flat=True)) + return annotate_person_statistics( + persons, + Q(participations__related_documentation__in=docs), + Q(new_personal_notes__documentation__in=docs), + ) + + def annotate_person_statistics_for_school_term( persons: QuerySet[Person], school_term: SchoolTerm, group: Group | None = None ) -> QuerySet[Person]: @@ -103,9 +113,4 @@ def annotate_person_statistics_for_school_term( ) if group: documentations.filter(Q(course__groups=group) | Q(course__groups__parent_groups=group)) - docs = list(documentations.values_list("pk", flat=True)) - return annotate_person_statistics( - persons, - Q(participations__related_documentation__in=docs), - Q(new_personal_notes__documentation__in=docs), - ) + return annotate_person_statistics_from_documentations(documentations) diff --git a/aleksis/apps/alsijil/tasks.py b/aleksis/apps/alsijil/tasks.py index e8cab0065bffe5d610e69fe5e1053aad5cd57138..882bbc1ae20d73a22a8a067c9a5bb32b9409aa33 100644 --- a/aleksis/apps/alsijil/tasks.py +++ b/aleksis/apps/alsijil/tasks.py @@ -185,8 +185,15 @@ def generate_full_register_printout( group = group[0] context["group"] = group + if include_members_table or include_person_overviews or include_coursebook: + documentations = Documentation.objects.filter( + Q(datetime_start__date__gte=group.school_term.date_start) + & Q(datetime_end__date__lte=group.school_term.date_end) + & (Q(course__groups=group) | Q(course__groups__parent_groups=group)) + ) + if include_members_table or include_person_overviews: - context["members"] = annotate_person_statistics_for_school_term(group.members.all(), group.school_term, group) + context["members"] = annotate_person_statistics_from_documentations(documentations) if include_person_overviews: doc_query_set = Documentation.objects.select_related("subject").prefetch_related("teachers"), @@ -223,6 +230,11 @@ def generate_full_register_printout( ), ) + if include_coursebook: + context["documentations_by_day"] = {} + for day in documentations.dates("datetime_start", "day"): + context["documentations_by_day"][day] = documentations.filter(datetime_start__date=day) + # OLD context["school_term"] = group.school_term diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html b/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html index 122eedc7567e5ead796e33da356c0d3a4173da30..7931a9675631bbaff3099b32d1e9dd85db6aa5df 100644 --- a/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html +++ b/aleksis/apps/alsijil/templates/alsijil/partials/register_coursebook.html @@ -1,4 +1,4 @@ -{% for week in weeks %} +{% for day, documentations in documentations_by_day %} <h4>{% trans 'Week' %} {{ week.week }}: {{ week.0 }}–{{ week.6 }}</h4> <table class="small-print">