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