Skip to content
Snippets Groups Projects
Commit b081e4d3 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch 'date-time-helpers' into 'master'

Fix some date/time functions and add new helper functions

See merge request !63
parents 0055d180 5b6aed8f
No related branches found
No related tags found
1 merge request!63Fix some date/time functions and add new helper functions
Pipeline #2862 passed
...@@ -36,7 +36,7 @@ from aleksis.apps.chronos.managers import ( ...@@ -36,7 +36,7 @@ from aleksis.apps.chronos.managers import (
) )
from aleksis.apps.chronos.util.format import format_m2m from aleksis.apps.chronos.util.format import format_m2m
from aleksis.core.mixins import ExtensibleModel from aleksis.core.mixins import ExtensibleModel
from aleksis.core.models import DashboardWidget from aleksis.core.models import DashboardWidget, SchoolTerm
from aleksis.core.util.core_helpers import has_person from aleksis.core.util.core_helpers import has_person
...@@ -68,13 +68,23 @@ class TimePeriod(ExtensibleModel): ...@@ -68,13 +68,23 @@ class TimePeriod(ExtensibleModel):
year = date.today().year year = date.today().year
week_number = week or getattr(self, "_week", None) or CalendarWeek().week week_number = week or getattr(self, "_week", None) or CalendarWeek().week
if week_number < self.school.current_term.date_start.isocalendar()[1]: if week_number < SchoolTerm.current.date_start.isocalendar()[1]:
year += 1 year += 1
wanted_week = CalendarWeek(year=year, week=week_number) wanted_week = CalendarWeek(year=year, week=week_number)
return wanted_week[self.weekday] 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 @classmethod
def get_next_relevant_day( def get_next_relevant_day(
cls, day: Optional[date] = None, time: Optional[time] = None, prev: bool = False cls, day: Optional[date] = None, time: Optional[time] = None, prev: bool = False
......
from datetime import date from datetime import date, datetime
from typing import Optional, Union from typing import Optional, Union
from django import template from django import template
...@@ -35,6 +35,21 @@ def period_to_date(week: Union[CalendarWeek, int], period) -> date: ...@@ -35,6 +35,21 @@ def period_to_date(week: Union[CalendarWeek, int], period) -> date:
return week_period_to_date(week, period) 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 @register.simple_tag
def today() -> date: def today() -> date:
return date.today() return date.today()
@register.simple_tag
def now_datetime() -> datetime:
return datetime.now()
...@@ -11,7 +11,7 @@ def week_weekday_from_date(when: date) -> Tuple[CalendarWeek, int]: ...@@ -11,7 +11,7 @@ def week_weekday_from_date(when: date) -> Tuple[CalendarWeek, int]:
def week_weekday_to_date(week: CalendarWeek, weekday: int) -> date: def week_weekday_to_date(week: CalendarWeek, weekday: int) -> date:
"""Return a date object for one day in a calendar week.""" """Return a date object for one day in a calendar week."""
return week[weekday - 1] return week[weekday]
def week_period_to_date(week: Union[CalendarWeek, int], period) -> date: def week_period_to_date(week: Union[CalendarWeek, int], period) -> date:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment