From da3f326aef0ca57d5b1d605db64cfdaa33b46027 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sun, 27 Oct 2019 15:07:35 +0100 Subject: [PATCH] Add function to get lessons on date. Advances #33, #34. --- biscuit/apps/chronos/models.py | 14 ++++++++++++-- biscuit/apps/chronos/views.py | 12 +++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 49ba3b42..9ef800d8 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import date, datetime, timedelta from typing import Dict, Optional, Tuple from django.core import validators @@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from biscuit.core.mixins import SchoolRelated -from .util import CalendarWeek +from .util import CalendarWeek, week_weekday_from_date class LessonPeriodManager(models.Manager): @@ -37,6 +37,16 @@ class LessonPeriodQuerySet(models.QuerySet): select={'_week': wanted_week.week} ) + def on_day(self, day: date): + week, weekday = week_weekday_from_date(day) + + return self.filter( + lesson__date_start__lte=day, lesson__date_end__gte=day, + period__weekday=weekday + ).extra( + select={'_week': week.week} + ) + def filter_group(self, group: int): return self.filter( Q(lesson__groups__pk=group) | Q(lesson__groups__parent_groups__pk=group)) diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index 383ea34d..084e6503 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -16,7 +16,7 @@ from biscuit.core.util import messages from .forms import SelectForm, LessonSubstitutionForm from .models import LessonPeriod, TimePeriod, LessonSubstitution -from .util import CalendarWeek, week_weekday_from_date +from .util import CalendarWeek from .tables import LessonsTable @@ -97,22 +97,16 @@ def lessons_day(request: HttpRequest, when: Optional[str] = None) -> HttpRespons else: day = date.today() - week, weekday = week_weekday_from_date(day) - # Get lessons - lesson_periods = LessonPeriod.objects.filter( - lesson__date_start__lte=day, lesson__date_end__gte=day, - period__weekday=weekday - ) + lesson_periods = LessonPeriod.objects.on_day(day) # Build table - lessons_table = LessonsTable(lesson_periods.extra(select={'_week': week.week}).all()) + lessons_table = LessonsTable(lesson_periods.all()) RequestConfig(request).configure(lessons_table) context['current_head'] = _('Lessons %s') % (day) context['lessons_table'] = lessons_table context['day'] = day - context['week'] = week context['lesson_periods'] = lesson_periods day_prev = day - timedelta(days=1) -- GitLab