From b8c25a5928e7c86543e2d3bab1fb6b78e513b344 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Mon, 26 Aug 2019 17:31:58 +0200 Subject: [PATCH] Impemente util function and templatetags to get week dates. Advances BiscuIT-App-Alsijil#8. --- biscuit/apps/chronos/templatetags/__init__.py | 0 .../apps/chronos/templatetags/week_helpers.py | 18 ++++++++++++++++++ biscuit/apps/chronos/util.py | 16 ++++++++++++++-- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 biscuit/apps/chronos/templatetags/__init__.py create mode 100644 biscuit/apps/chronos/templatetags/week_helpers.py diff --git a/biscuit/apps/chronos/templatetags/__init__.py b/biscuit/apps/chronos/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/biscuit/apps/chronos/templatetags/week_helpers.py b/biscuit/apps/chronos/templatetags/week_helpers.py new file mode 100644 index 00000000..3bc055ca --- /dev/null +++ b/biscuit/apps/chronos/templatetags/week_helpers.py @@ -0,0 +1,18 @@ +from datetime import date + +from django import template + +from .util import week_days + + +register = template.Library() + + +@register.filter +def week_start(week: int) -> date: + return week_days(week)[0] + + +@register.filter +def week_end(week: int) -> date: + return week_days(week)[-1] diff --git a/biscuit/apps/chronos/util.py b/biscuit/apps/chronos/util.py index a128c0d1..d315859e 100644 --- a/biscuit/apps/chronos/util.py +++ b/biscuit/apps/chronos/util.py @@ -1,5 +1,5 @@ -from datetime import datetime -from typing import Optional +from datetime import date, datetime, timedelta +from typing import Optional, Sequence from django.apps import apps from django.db import models @@ -9,6 +9,18 @@ def current_week() -> int: return int(datetime.now().strftime('%V')) +def week_days(week: Optional[int]) -> Sequence[date]: + # FIXME Make this aware of the school term concept + # cf. BiscuIT-ng#40 + + year = date.today().year + wanted_week = week or current_week() + + first_day = datetime.strptime('%d-%d-1' % (year, wanted_week), '%Y-%W-%w') + + return [(first_day + timedelta(days=offset)).date() for offset in range(0, 7)] + + def current_lesson_periods(when: Optional[datetime] = None) -> models.query.QuerySet: now = when or datetime.now() -- GitLab