diff --git a/biscuit/apps/chronos/urls.py b/biscuit/apps/chronos/urls.py index fb05d07e00ebd88e0b65580d333d33fce952f568..4161fb3c33f52407f1a653635749feaf16976228 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 73790dcaa5ebed08fee0a75ec7949be5a3be1ff3..fe78d98d774c6467de2ccf70846f3a9e052f5c50 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 0e6d69daa5bc9443302874588ec4c33ed3472ea2..0093134989a1241a4d52306a82756abfd8bb09e9 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)