From f854234d4922a023968d62405fcc62534fc87086 Mon Sep 17 00:00:00 2001
From: magicfelix <felix@felix-zauberer.de>
Date: Sat, 30 Nov 2024 15:45:43 +0100
Subject: [PATCH] Show only teachers with courses in the current school term

---
 aleksis/apps/chronos/schema/__init__.py      |  6 ++++--
 aleksis/apps/chronos/util/chronos_helpers.py | 21 +++++++++++++-------
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py
index 898de1e3..7529b009 100644
--- a/aleksis/apps/chronos/schema/__init__.py
+++ b/aleksis/apps/chronos/schema/__init__.py
@@ -242,7 +242,9 @@ class Query(graphene.ObjectType):
     timetable_days = graphene.List(graphene.Int)
 
     def resolve_timetable_teachers(self, info, **kwargs):
-        return graphene_django_optimizer.query(get_teachers(info.context.user), info)
+        return graphene_django_optimizer.query(
+            get_teachers(info.context.user, request=info.context), info
+        )
 
     def resolve_timetable_groups(self, info, **kwargs):
         return graphene_django_optimizer.query(
@@ -264,7 +266,7 @@ class Query(graphene.ObjectType):
                 )
             )
 
-        for teacher in get_teachers(info.context.user):
+        for teacher in get_teachers(info.context.user, request=info.context):
             all_timetables.append(
                 TimetableObjectType(
                     id=teacher.id,
diff --git a/aleksis/apps/chronos/util/chronos_helpers.py b/aleksis/apps/chronos/util/chronos_helpers.py
index 851db2b1..0adb0bd6 100644
--- a/aleksis/apps/chronos/util/chronos_helpers.py
+++ b/aleksis/apps/chronos/util/chronos_helpers.py
@@ -8,8 +8,12 @@ from django.shortcuts import get_object_or_404
 from guardian.shortcuts import get_objects_for_user
 
 from aleksis.apps.cursus.models import Course
-from aleksis.core.models import Announcement, Group, Person, Room, SchoolTerm
-from aleksis.core.util.core_helpers import get_active_school_term, get_site_preferences
+from aleksis.core.models import Announcement, Group, Person, Room
+from aleksis.core.util.core_helpers import (
+    filter_active_school_term,
+    get_active_school_term,
+    get_site_preferences,
+)
 
 from ..managers import TimetableType
 from .build import build_substitutions_list
@@ -43,11 +47,16 @@ def get_el_by_pk(
         return HttpResponseNotFound()
 
 
-def get_teachers(user: "User"):
+def get_teachers(user: "User", request=None):
     """Get the teachers whose timetables are allowed to be seen by current user."""
 
+    school_term = get_active_school_term(request)
+
+    q = Q(courses_as_teacher__groups__school_term=school_term) | Q(
+        courses_as_teacher__groups__school_term=None
+    )
     teachers = (
-        Person.objects.annotate(course_count=Count("courses_as_teacher"))
+        Person.objects.annotate(course_count=Count("courses_as_teacher", filter=q))
         .filter(course_count__gt=0)
         .order_by("short_name", "last_name")
     )
@@ -66,9 +75,7 @@ def get_teachers(user: "User"):
 def get_groups(user: "User", request=None):
     """Get the groups whose timetables are allowed to be seen by current user."""
 
-    school_term = get_active_school_term(request) if request is not None else SchoolTerm.current
-
-    groups = Group.objects.for_school_term(school_term)
+    groups = filter_active_school_term(request, Group.objects.all())
 
     group_types = get_site_preferences()["chronos__group_types_timetables"]
 
-- 
GitLab