diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 895420f186127b31c2f4527478a9bbe3f5c176b2..ed06b1e5b4b86d6f4aaf64809f73d8dadf00b974 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -15,7 +15,7 @@ from calendarweek.django import CalendarWeek, i18n_day_names_lazy, i18n_day_abbr from aleksis.core.mixins import ExtensibleModel from aleksis.core.models import Group, Person -from .util import week_weekday_from_date +from aleksis.apps.chronos.util.weeks import week_weekday_from_date class LessonPeriodManager(models.Manager): diff --git a/aleksis/apps/chronos/util/min_max.py b/aleksis/apps/chronos/util/min_max.py new file mode 100644 index 0000000000000000000000000000000000000000..4d5dd421443f36b3b2f01ce0a2ef74b6504a0b5e --- /dev/null +++ b/aleksis/apps/chronos/util/min_max.py @@ -0,0 +1,19 @@ +from django.db.models import Min, Max + +from aleksis.apps.chronos.models import TimePeriod + +# Determine overall first and last day and period +min_max = TimePeriod.objects.aggregate( + Min("period"), Max("period"), Min("weekday"), Max("weekday"), Min("time_start"), Max("time_end") +) + +period_min = min_max.get("period__min", 1) +period_max = min_max.get("period__max", 7) + +time_min = min_max.get("time_start__min", None) +time_max = min_max.get("time_end__max", None) + +weekday_min_ = min_max.get("weekday__min", 0) +weekday_max = min_max.get("weekday__max", 6) + + diff --git a/aleksis/apps/chronos/min_max.py b/aleksis/apps/chronos/util/prev_next.py similarity index 63% rename from aleksis/apps/chronos/min_max.py rename to aleksis/apps/chronos/util/prev_next.py index 8d8d60c2cf6ec146a4b22166f32ef4f4d228deda..077a26de80585f27ecb06de3efe54ec46b3487d3 100644 --- a/aleksis/apps/chronos/min_max.py +++ b/aleksis/apps/chronos/util/prev_next.py @@ -1,25 +1,10 @@ -from datetime import date, time, timedelta +from datetime import timedelta, date, time from typing import Optional from calendarweek import CalendarWeek -from django.db.models import Min, Max from django.utils import timezone -from .models import TimePeriod - -# Determine overall first and last day and period -min_max = TimePeriod.objects.aggregate( - Min("period"), Max("period"), Min("weekday"), Max("weekday"), Min("time_start"), Max("time_end") -) - -period_min = min_max.get("period__min", 1) -period_max = min_max.get("period__max", 7) - -time_min = min_max.get("time_start__min", None) -time_max = min_max.get("time_end__max", None) - -weekday_min_ = min_max.get("weekday__min", 0) -weekday_max = min_max.get("weekday__max", 6) +from aleksis.apps.chronos.util.min_max import weekday_min_, weekday_max, time_max def get_next_relevant_day(day: Optional[date] = None, time: Optional[time] = None) -> date: diff --git a/aleksis/apps/chronos/util.py b/aleksis/apps/chronos/util/weeks.py similarity index 100% rename from aleksis/apps/chronos/util.py rename to aleksis/apps/chronos/util/weeks.py diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py index 5ac21d70f6a66802177e39d250aa736c7ff700de..6841d735f96ba61119742869dec94d2944404603 100644 --- a/aleksis/apps/chronos/views.py +++ b/aleksis/apps/chronos/views.py @@ -9,25 +9,22 @@ from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils import timezone from django.utils.translation import ugettext as _ - from django_tables2 import RequestConfig from aleksis.core.decorators import admin_required from aleksis.core.models import Person, Group from aleksis.core.util import messages - from .forms import LessonSubstitutionForm -from .min_max import ( +from .models import LessonPeriod, LessonSubstitution, TimePeriod, Room +from .tables import LessonsTable +from .util.min_max import ( period_min, period_max, weekday_min_, - weekday_max, - get_next_relevant_day, - get_prev_relevant_day, + weekday_max ) -from .models import LessonPeriod, LessonSubstitution, TimePeriod, Room -from .tables import LessonsTable -from .util import CalendarWeek, get_weeks_for_year +from .util.prev_next import get_prev_relevant_day, get_next_relevant_day +from .util.weeks import CalendarWeek, get_weeks_for_year def get_prev_next_by_day(day: date, url: str) -> Tuple[str, str]: