Skip to content
Snippets Groups Projects
Verified Commit 81195d3f authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Move group, teacher and room filters to QuerySet. Advances #33, #34; closes #39.

parent b11115aa
No related branches found
No related tags found
No related merge requests found
...@@ -36,6 +36,18 @@ class LessonPeriodQuerySet(models.QuerySet): ...@@ -36,6 +36,18 @@ class LessonPeriodQuerySet(models.QuerySet):
select={'_week': wanted_week.week} select={'_week': wanted_week.week}
) )
def filter_group(self, group: int):
return self.filter(
Q(lesson__groups__pk=group) | Q(lesson__groups__parent_groups__pk=group))
def filter_teacher(self, teacher: int):
return self.filter(
Q(substitutions__teachers__pk=teacher, substitutions__week=models.F('_week')) | Q(lesson__teachers__pk=teacher))
def filter_room(self, room: int):
return self.filter(
Q(substitutions__room__pk=room, substitutions__week=models.F('_week')) | Q(room__pk=room))
class TimePeriod(SchoolRelated): class TimePeriod(SchoolRelated):
WEEKDAY_CHOICES = [ WEEKDAY_CHOICES = [
......
...@@ -31,17 +31,14 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i ...@@ -31,17 +31,14 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i
lesson_periods = LessonPeriod.objects.in_week(wanted_week) lesson_periods = LessonPeriod.objects.in_week(wanted_week)
# Incrementally filter lesson periods by GET parameters
if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None): if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
# Incrementally filter lesson periods by GET parameters
if 'group' in request.GET and request.GET['group']: if 'group' in request.GET and request.GET['group']:
lesson_periods = lesson_periods.filter( lesson_periods = lesson_periods.filter_group(int(request.GET['group']))
Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group'])))
if 'teacher' in request.GET and request.GET['teacher']: if 'teacher' in request.GET and request.GET['teacher']:
lesson_periods = lesson_periods.filter( lesson_periods = lesson_periods.filter_teacher(int(request.GET['teacher']))
Q(substitutions__teachers__pk=int(request.GET['teacher']), substitutions__week=wanted_week.week) | Q(lesson__teachers__pk=int(request.GET['teacher'])))
if 'room' in request.GET and request.GET['room']: if 'room' in request.GET and request.GET['room']:
lesson_periods = lesson_periods.filter( lesson_periods = lesson_periods.room_filter(int(request.GET['room']))
room__pk=int(request.GET['room']))
else: else:
# Redirect to a selected view if no filter provided # Redirect to a selected view if no filter provided
if request.user.person: if request.user.person:
......
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