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