diff --git a/aleksis/apps/chronos/util/chronos_helpers.py b/aleksis/apps/chronos/util/chronos_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..11b1c5b9c697a5d6fbc787cac70a5ff9c96615c4 --- /dev/null +++ b/aleksis/apps/chronos/util/chronos_helpers.py @@ -0,0 +1,35 @@ +from typing import Optional + +from django.http import HttpRequest, HttpResponseNotFound +from django.shortcuts import get_object_or_404 + +from aleksis.core.models import Person, Group +from ..managers import TimetableType +from ..models import LessonPeriod, LessonSubstitution, Room + + +def get_el_by_pk( + request: HttpRequest, + type_: str, + pk: int, + year: Optional[int] = None, + week: Optional[int] = None, + regular: Optional[str] = None, +): + if type_ == TimetableType.GROUP.value: + return get_object_or_404(Group, pk=pk) + elif type_ == TimetableType.TEACHER.value: + return get_object_or_404(Person, pk=pk) + elif type_ == TimetableType.ROOM.value: + return get_object_or_404(Room, pk=pk) + else: + return HttpResponseNotFound() + + +def get_substitution_by_id(request: HttpRequest, id_: int, week: int): + lesson_period = get_object_or_404(LessonPeriod, pk=id_) + wanted_week = lesson_period.lesson.get_calendar_week(week) + + return LessonSubstitution.objects.filter( + week=wanted_week.week, lesson_period=lesson_period + ).first() diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py index 04e975f7ea3d138baefdb05ec754cff8f13feef2..96a332d946053fcb6364c717e3c4e4cea07bac7e 100644 --- a/aleksis/apps/chronos/views.py +++ b/aleksis/apps/chronos/views.py @@ -20,6 +20,7 @@ from .managers import TimetableType from .models import Absence, Holiday, LessonPeriod, LessonSubstitution, Room, TimePeriod from .tables import LessonsTable from .util.build import build_substitutions_list, build_timetable, build_weekdays +from .util.chronos_helpers import get_el_by_pk, get_substitution_by_id from .util.date import CalendarWeek, get_weeks_for_year from .util.js import date_unix @@ -96,24 +97,6 @@ def my_timetable( return redirect("all_timetables") -def get_el_by_pk( - request: HttpRequest, - type_: str, - pk: int, - year: Optional[int] = None, - week: Optional[int] = None, - regular: Optional[str] = None, -): - if type_ == TimetableType.GROUP.value: - return get_object_or_404(Group, pk=pk) - elif type_ == TimetableType.TEACHER.value: - return get_object_or_404(Person, pk=pk) - elif type_ == TimetableType.ROOM.value: - return get_object_or_404(Room, pk=pk) - else: - return HttpResponseNotFound() - - @permission_required("chronos.view_timetable", fn=get_el_by_pk) def timetable( request: HttpRequest, @@ -222,15 +205,6 @@ def lessons_day( return render(request, "chronos/lessons_day.html", context) -def get_substitution_by_id(request: HttpRequest, id_: int, week: int): - lesson_period = get_object_or_404(LessonPeriod, pk=id_) - wanted_week = lesson_period.lesson.get_calendar_week(week) - - return LessonSubstitution.objects.filter( - week=wanted_week.week, lesson_period=lesson_period - ).first() - - @permission_required("chronos.edit_substitution", fn=get_substitution_by_id) def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse: """View a form to edit a substitution lessen."""