From 068d345220925261f1c24937524834870dc344ff Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Sat, 31 Aug 2019 21:16:23 +0200
Subject: [PATCH] Add view and url for lessons day view. Advances #11, #12.

---
 biscuit/apps/chronos/urls.py  |  2 ++
 biscuit/apps/chronos/util.py  |  4 ++++
 biscuit/apps/chronos/views.py | 28 +++++++++++++++++++++++++++-
 3 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/biscuit/apps/chronos/urls.py b/biscuit/apps/chronos/urls.py
index fb05d07e..4161fb3c 100644
--- a/biscuit/apps/chronos/urls.py
+++ b/biscuit/apps/chronos/urls.py
@@ -5,4 +5,6 @@ from . import views
 
 urlpatterns = [
     path('timetable', views.timetable, name='timetable'),
+    path('lessons', views.lessons_day, name='lessons_day'),
+    path('lessons/<when>', views.lessons_day, name='lessons_day_by_date')
 ]
diff --git a/biscuit/apps/chronos/util.py b/biscuit/apps/chronos/util.py
index 73790dca..fe78d98d 100644
--- a/biscuit/apps/chronos/util.py
+++ b/biscuit/apps/chronos/util.py
@@ -30,3 +30,7 @@ def current_lesson_periods(when: Optional[datetime] = None) -> models.query.Quer
                                        period__weekday=now.isoweekday(),
                                        period__time_start__lte=now.time(),
                                        period__time_end__gte=now.time())
+
+
+def week_weekday_from_date(when: date) -> Sequence[int, int]:
+    return (int(when.strftime('%V')), int(when.strftime('%u')))
diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py
index 0e6d69da..00931349 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -1,4 +1,5 @@
 from collections import OrderedDict
+from datetime import date, timedelta
 
 from django.contrib.auth.decorators import login_required
 from django.db.models import Max, Min
@@ -12,7 +13,7 @@ from biscuit.core.models import Group, Person
 
 from .forms import SelectForm
 from .models import LessonPeriod, TimePeriod, Room
-from .util import current_week
+from .util import current_week, week_weekday_from_date
 
 
 @login_required
@@ -78,3 +79,28 @@ def timetable(request: HttpRequest) -> HttpResponse:
     context['select_form'] = select_form
 
     return render(request, 'chronos/tt_week.html', context)
+
+
+@login_required
+def lessons_day(request: HttpRequest, when: Optional[str] = None) -> HttpResponse:
+    context = {}
+
+    if when:
+        day = datetime.strptime(when, '%Y-%m-%d').date()
+    else:
+        day = date.today()
+
+    week, weekday = week_weekday_from_date(day)
+
+    lesson_periods = LessonPeriod.objects.filter(
+        lesson__date_start__lte=day, lesson__date_end__gte=day,
+        period__weekday=weekday
+    ).all()
+
+    context['day'] = day
+    context['day_prev'] = day + timedelta(days=-1)
+    context['day_next'] = day + timedelta(days=1)
+    context['week'] = week
+    context['lesson_periods'] = lesson_periods
+
+    return render(request, 'chronos/lessons_day.html', context)
-- 
GitLab