From 04b1a0fadc64383d1f959dce2b4b4d722ca215d0 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 22 Sep 2021 18:40:30 +0200
Subject: [PATCH] Support also dates for TimePeriod's methods
 get_datetime_start/_end

---
 CHANGELOG.rst                                  |  8 ++++++++
 aleksis/apps/chronos/models.py                 | 18 ++++++++++++++----
 .../apps/chronos/templatetags/week_helpers.py  |  8 ++++----
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 0b8bd712..4f70bb71 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -6,6 +6,14 @@ All notable changes to this project will be documented in this file.
 The format is based on `Keep a Changelog`_,
 and this project adheres to `Semantic Versioning`_.
 
+Unreleased
+----------
+
+Changed
+~~~~~~~
+
+* Support dates for ``TimePeriod.get_datetime_start`` and ``TimePeriod.get_datetime_end``.
+
 `2.0rc2`_ - 2021-08-01
 ----------
 
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 07dc3fda..9d51ac7a 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -161,14 +161,24 @@ class TimePeriod(ValidityRangeRelatedExtensibleModel):
 
         return wanted_week[self.weekday]
 
-    def get_datetime_start(self, week: Optional[Union[CalendarWeek, int]] = None) -> datetime:
+    def get_datetime_start(
+        self, date_ref: Optional[Union[CalendarWeek, int, date]] = None
+    ) -> datetime:
         """Get datetime of lesson start in a specific week."""
-        day = self.get_date(week)
+        if isinstance(date_ref, date):
+            day = date_ref
+        else:
+            day = self.get_date(date_ref)
         return datetime.combine(day, self.time_start)
 
-    def get_datetime_end(self, week: Optional[Union[CalendarWeek, int]] = None) -> datetime:
+    def get_datetime_end(
+        self, date_ref: Optional[Union[CalendarWeek, int, date]] = None
+    ) -> datetime:
         """Get datetime of lesson end in a specific week."""
-        day = self.get_date(week)
+        if isinstance(date_ref, date):
+            day = date_ref
+        else:
+            day = self.get_date(date_ref)
         return datetime.combine(day, self.time_end)
 
     @classmethod
diff --git a/aleksis/apps/chronos/templatetags/week_helpers.py b/aleksis/apps/chronos/templatetags/week_helpers.py
index 2f66d51e..cdba9b3f 100644
--- a/aleksis/apps/chronos/templatetags/week_helpers.py
+++ b/aleksis/apps/chronos/templatetags/week_helpers.py
@@ -36,13 +36,13 @@ def period_to_date(week: CalendarWeek, period) -> date:
 
 
 @register.simple_tag
-def period_to_time_start(week: CalendarWeek, period) -> date:
-    return period.get_datetime_start(week)
+def period_to_time_start(date_ref: Union[CalendarWeek, int, date], period) -> date:
+    return period.get_datetime_start(date_ref)
 
 
 @register.simple_tag
-def period_to_time_end(week: Union[CalendarWeek, int], period) -> date:
-    return period.get_datetime_end(week)
+def period_to_time_end(date_ref: Union[CalendarWeek, int, date], period) -> date:
+    return period.get_datetime_end(date_ref)
 
 
 @register.simple_tag
-- 
GitLab