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