From e665f1f2d73b609015c051690812cc6893c57a11 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Tue, 14 Apr 2020 21:40:40 +0200
Subject: [PATCH] Move util code for getting first/last weekdays/periods to
 util.py

---
 .../untis/util/mysql/importers/absences.py    | 19 +++--------
 aleksis/apps/untis/util/mysql/util.py         | 33 +++++++++++++++++++
 2 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/aleksis/apps/untis/util/mysql/importers/absences.py b/aleksis/apps/untis/util/mysql/importers/absences.py
index 44d357f..05de71f 100644
--- a/aleksis/apps/untis/util/mysql/importers/absences.py
+++ b/aleksis/apps/untis/util/mysql/importers/absences.py
@@ -6,7 +6,7 @@ from .... import models as mysql_models
 from ..util import (
     run_default_filter,
     get_term,
-    untis_date_to_date,
+    untis_date_to_date, move_weekday_to_range, get_first_period, get_last_period,
 )
 
 logger = logging.getLogger(__name__)
@@ -52,21 +52,12 @@ def import_absences(
         weekday_to = date_to.weekday()
 
         # Check min/max weekdays
-        first_weekday = sorted(time_periods_ref.keys())[0]
-        last_weekday = sorted(time_periods_ref.keys())[-1]
-
-        if weekday_from < first_weekday:
-            weekday_from = first_weekday
-        if weekday_from > last_weekday:
-            weekday_from = last_weekday
-        if weekday_to < first_weekday:
-            weekday_to = first_weekday
-        if weekday_to > last_weekday:
-            weekday_to = last_weekday
+        weekday_from = move_weekday_to_range(time_periods_ref, weekday_from)
+        weekday_to = move_weekday_to_range(time_periods_ref, weekday_to)
 
         # Check min/max periods
-        first_period = sorted(time_periods_ref[first_weekday].keys())[0]
-        last_period = sorted(time_periods_ref[first_weekday].keys())[-1]
+        first_period = get_first_period(time_periods_ref, weekday_from)
+        last_period = get_last_period(time_periods_ref, weekday_from)
 
         if period_from == 0:
             period_from = first_period
diff --git a/aleksis/apps/untis/util/mysql/util.py b/aleksis/apps/untis/util/mysql/util.py
index fc8c024..e98ab31 100644
--- a/aleksis/apps/untis/util/mysql/util.py
+++ b/aleksis/apps/untis/util/mysql/util.py
@@ -147,3 +147,36 @@ def connect_untis_fields(obj: Model, attr: str, limit: int) -> List[str]:
             all_data += data
 
     return all_data
+
+
+def get_first_weekday(time_periods_ref: dict) -> int:
+    """ Get first weekday from time periods reference """
+    return sorted(time_periods_ref.keys())[0]
+
+
+def get_last_weekday(time_periods_ref: dict) -> int:
+    """ Get last weekday from time periods reference """
+    return sorted(time_periods_ref.keys())[-1]
+
+
+def get_first_period(time_periods_ref: dict, weekday: int) -> int:
+    """ Get first period on a weekday from time periods reference """
+    return sorted(time_periods_ref[weekday].keys())[0]
+
+
+def get_last_period(time_periods_ref: dict, weekday: int) -> int:
+    """ Get last period an a weekday from time periods reference """
+    return sorted(time_periods_ref[weekday].keys())[-1]
+
+
+def move_weekday_to_range(time_periods_ref: dict, weekday: int) -> int:
+    """ Move weekday values into school week (e. g. saturday to friday) """
+    first_weekday = get_first_weekday(time_periods_ref)
+    last_weekday = get_last_weekday(time_periods_ref)
+
+    if weekday < first_weekday:
+        weekday = first_weekday
+    if weekday > last_weekday:
+        weekday = last_weekday
+
+    return weekday
-- 
GitLab