diff --git a/biscuit/apps/chronos/templatetags/__init__.py b/biscuit/apps/chronos/templatetags/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/biscuit/apps/chronos/templatetags/week_helpers.py b/biscuit/apps/chronos/templatetags/week_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..3bc055cab25b423cb7c30ba293dc96702cf1e295 --- /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 a128c0d11c577595ec8e1f1fe5f9c78f7640a0e8..d315859e8eb0af9835142d3f272e9c9913f1c055 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()