From 814ffe640c5c1a5bf4166c98afa4ee76e545565a Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Tue, 31 Mar 2020 22:01:47 +0200
Subject: [PATCH] Improve import of time periods and breaks

---
 .../untis/util/mysql/importers/common_data.py | 30 +++++++++++++------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py
index f10afcc..78bf6c3 100644
--- a/aleksis/apps/untis/util/mysql/importers/common_data.py
+++ b/aleksis/apps/untis/util/mysql/importers/common_data.py
@@ -336,7 +336,7 @@ def import_supervision_areas() -> Dict[int, chronos_models.SupervisionArea]:
 def import_time_periods_and_breaks() -> List[List[chronos_models.TimePeriod]]:
     """ Import time periods an breaks """
 
-    time_periods_ref = []
+    ref = []
     periods = (
         run_default_filter(mysql_models.Commondata.objects, filter_term=False)
         .filter(id=40)  # Fixed UNTIS constant
@@ -349,23 +349,30 @@ def import_time_periods_and_breaks() -> List[List[chronos_models.TimePeriod]]:
         start_time = time(time_period.fieldbyte1, time_period.fieldbyte2)
         end_time = time(time_period.fieldbyte3, time_period.fieldbyte4)
 
+        logger.info("Import time period on weekday {} in the {}. period".format(weekday, period))
+
         new_time_period, created = chronos_models.TimePeriod.objects.get_or_create(
             weekday=weekday,
             period=period,
             defaults={"time_start": start_time, "time_end": end_time},
         )
 
-        new_time_period.time_start = start_time
-        new_time_period.time_end = end_time
-        new_time_period.save()
+        if created:
+            logger.info("  New time period created")
+
+        if new_time_period.time_start != start_time or new_time_period.time_end != end_time:
+            new_time_period.time_start = start_time
+            new_time_period.time_end = end_time
+            new_time_period.save()
+            logger.info("  Time period updated")
 
         # Build index with time periods
-        if len(time_periods_ref) < weekday + 1:
-            time_periods_ref.append([])
-        time_periods_ref[weekday].append(new_time_period)
+        if len(ref) < weekday + 1:
+            ref.append([])
+        ref[weekday].append(new_time_period)
 
     # Build breaks for all weekdays
-    for weekday, time_periods in enumerate(time_periods_ref):
+    for weekday, time_periods in enumerate(ref):
 
         # Add None two times in order to create breaks before first lesson and after last lesson
         time_periods = [None] + time_periods + [None]
@@ -383,10 +390,15 @@ def import_time_periods_and_breaks() -> List[List[chronos_models.TimePeriod]]:
                 before_period.period if before_period else "-",
             )
 
+            logger.info("Generate break {}".format(short_name))
+
             new_break, created = chronos_models.Break.objects.get_or_create(
                 after_period=after_period,
                 before_period=before_period,
                 defaults={"short_name": short_name, "name": short_name},
             )
 
-    return time_periods_ref
+            if created:
+                logger.info("  New break created")
+
+    return ref
-- 
GitLab