From 0596b8b3bc5d686bb0a43a12a1eb1c2ca40048b0 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 18 Jun 2020 22:14:40 +0200
Subject: [PATCH] Add new helper functions for getting start and end datetime
 of time periods in templates

---
 aleksis/apps/chronos/models.py                  | 10 ++++++++++
 .../apps/chronos/templatetags/week_helpers.py   | 17 ++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 2ad06ef8..1c35b674 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -75,6 +75,16 @@ class TimePeriod(ExtensibleModel):
 
         return wanted_week[self.weekday]
 
+    def get_datetime_start(self, week: Optional[Union[CalendarWeek, int]] = None) -> datetime:
+        """Get datetime of lesson start in a specific week."""
+        day = self.get_date(week)
+        return datetime.combine(day, self.time_start)
+
+    def get_datetime_end(self, week: Optional[Union[CalendarWeek, int]] = None) -> datetime:
+        """Get datetime of lesson end in a specific week."""
+        day = self.get_date(week)
+        return datetime.combine(day, self.time_end)
+
     @classmethod
     def get_next_relevant_day(
         cls, day: Optional[date] = None, time: Optional[time] = None, prev: bool = False
diff --git a/aleksis/apps/chronos/templatetags/week_helpers.py b/aleksis/apps/chronos/templatetags/week_helpers.py
index acfb3a3a..c9770317 100644
--- a/aleksis/apps/chronos/templatetags/week_helpers.py
+++ b/aleksis/apps/chronos/templatetags/week_helpers.py
@@ -1,4 +1,4 @@
-from datetime import date
+from datetime import date, datetime
 from typing import Optional, Union
 
 from django import template
@@ -35,6 +35,21 @@ def period_to_date(week: Union[CalendarWeek, int], period) -> date:
     return week_period_to_date(week, period)
 
 
+@register.simple_tag
+def period_to_time_start(week: Union[CalendarWeek, int], period) -> date:
+    return period.get_datetime_start(week)
+
+
+@register.simple_tag
+def period_to_time_end(week: Union[CalendarWeek, int], period) -> date:
+    return period.get_datetime_end(week)
+
+
 @register.simple_tag
 def today() -> date:
     return date.today()
+
+
+@register.simple_tag
+def now_datetime() -> datetime:
+    return datetime.now()
-- 
GitLab