diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html b/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html index e42575fd07fc5ad520575643a1db2effa61ba66a..6730844b323539e2ebcf5a70024d12e582f8564a 100644 --- a/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/week_view.html @@ -88,15 +88,15 @@ {% blocktrans %}Personal notes{% endblocktrans %} </span> {% for person in persons %} - <h5 class="card-title">{{ person.full_name }}</h5> + <h5 class="card-title">{{ person.person.full_name }}</h5> <p class="card-text"> - {% trans "Absent" %}: {{ person.absences_count }} - ({{ person.unexcused_count }} {% trans "unexcused" %}) + {% trans "Absent" %}: {{ person.person.absences_count }} + ({{ person.person.unexcused_count }} {% trans "unexcused" %}) </p> <p class="card-text"> - {% trans "Summed up tardiness" %}: {{ person.tardiness_sum }}' + {% trans "Summed up tardiness" %}: {{ person.person.tardiness_sum }}' </p> - {% for note in person.personal_notes|only_week:week %} + {% for note in person.personal_notes %} {% if note.remarks %} <blockquote> {{ note.remarks }} diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 8fa58f62a8fa267c92caa35b0de30fa90ed0ff8b..3b55bf1caa3ea177b0649743481b5bcdc1cb669f 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -184,16 +184,25 @@ def week_view( if lesson_periods: # Aggregate all personal notes for this group and week - persons = ( - Person.objects.filter(is_active=True) - .filter(member_of__lessons__lesson_periods__in=lesson_periods) - .distinct() + lesson_periods_pk = list(lesson_periods.values_list("pk", flat=True)) + + persons_qs = Person.objects.filter(is_active=True) + + if group: + persons_qs = persons_qs.filter(member_of=group) + else: + persons_qs = persons_qs.filter( + member_of__lessons__lesson_periods__in=lesson_periods_pk + ) + + persons_qs = ( + persons_qs.distinct() .prefetch_related("personal_notes") .annotate( absences_count=Count( "personal_notes", filter=Q( - personal_notes__lesson_period__in=lesson_periods, + personal_notes__lesson_period__in=lesson_periods_pk, personal_notes__week=wanted_week.week, personal_notes__absent=True, ), @@ -202,7 +211,7 @@ def week_view( unexcused_count=Count( "personal_notes", filter=Q( - personal_notes__lesson_period__in=lesson_periods, + personal_notes__lesson_period__in=lesson_periods_pk, personal_notes__week=wanted_week.week, personal_notes__absent=True, personal_notes__excused=False, @@ -212,7 +221,7 @@ def week_view( tardiness_sum=Subquery( Person.objects.filter( pk=OuterRef("pk"), - personal_notes__lesson_period__in=lesson_periods, + personal_notes__lesson_period__in=lesson_periods_pk, personal_notes__week=wanted_week.week, ) .distinct() @@ -221,6 +230,17 @@ def week_view( ), ) ) + + persons = [] + for person in persons_qs: + persons.append( + { + "person": person, + "personal_notes": person.personal_notes.filter( + week=wanted_week.week, lesson_period__in=lesson_periods_pk + ), + } + ) else: persons = None