From fc485fc630d16926c5c2049b4f8f6b9e8752e85b Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sat, 4 Apr 2020 21:58:45 +0200
Subject: [PATCH] Add import process for supervisions

---
 .../untis/util/mysql/importers/common_data.py | 64 ++++++++++++++++++-
 aleksis/apps/untis/util/mysql/main.py         |  3 +-
 2 files changed, 62 insertions(+), 5 deletions(-)

diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py
index 5bf3aba..4520de4 100644
--- a/aleksis/apps/untis/util/mysql/importers/common_data.py
+++ b/aleksis/apps/untis/util/mysql/importers/common_data.py
@@ -274,7 +274,9 @@ def import_rooms() -> Dict[int, chronos_models.Room]:
     return ref
 
 
-def import_supervision_areas() -> Dict[int, chronos_models.SupervisionArea]:
+def import_supervision_areas(
+    breaks_ref, teachers_ref
+) -> Dict[int, chronos_models.SupervisionArea]:
     """ Import supervision areas """
 
     ref = {}
@@ -334,7 +336,63 @@ def import_supervision_areas() -> Dict[int, chronos_models.SupervisionArea]:
         if changed:
             new_area.save()
 
-        # TODO: Supervisions
+        logger.info("  Import supervisions for this area")
+
+        # Parse raw data
+        raw_untis_data = area.breaksupervision1
+        raw_supervisions = untis_split_first(raw_untis_data)
+
+        supervisions_ref = {}
+        for raw_supervision in raw_supervisions:
+            # Split more and get teacher id
+            raw_supervision_2 = raw_supervision.split("~")
+            teacher_id = int(raw_supervision_2[1])
+
+            if teacher_id in teachers_ref:
+                # Get weekday, period after break and teacher
+                weekday = int(raw_supervision_2[2]) - 1
+                period_after_break = int(raw_supervision_2[3])
+                teacher = teachers_ref[teacher_id]
+
+                logger.info(
+                    "    Import supervision on weekday {} before the {}. period (teacher {})".format(
+                        weekday, period_after_break, teacher
+                    )
+                )
+
+                # Get or create
+                new_supervision, created = new_area.supervisions.get_or_create(
+                    break_item=breaks_ref[weekday][period_after_break],
+                    defaults={"teacher": teacher},
+                )
+
+                # Log
+                if created:
+                    logger.info("      New supervision created")
+
+                # Save supervisions in reference dict
+                if weekday not in supervisions_ref:
+                    supervisions_ref[weekday] = {}
+                if period_after_break not in supervisions_ref[weekday]:
+                    supervisions_ref[weekday][period_after_break] = []
+                supervisions_ref[weekday][period_after_break].append(new_supervision)
+
+        for supervision in new_area.supervisions.all():
+            delete = True
+
+            # Get weekday and period after break
+            weekday = supervision.break_item.weekday
+            period_after_break = supervision.break_item.before_period_number
+
+            # Delete supervision if no longer existing
+            if weekday in supervisions_ref:
+                if period_after_break in supervisions_ref[weekday]:
+                    if supervision in supervisions_ref[weekday][period_after_break]:
+                        delete = False
+
+            if delete:
+                supervision.delete()
+                logger.info("    Supervision {} deleted".format(supervision))
 
         ref[import_ref] = new_area
 
@@ -423,7 +481,7 @@ def import_breaks(
                 logger.info("  New break created")
 
             # Save index with lesson after break
-            next_period = after_period.period if after_period else before_period.period + 1
+            next_period = new_break.before_period_number
             breaks_ref[weekday][next_period] = new_break
 
     return breaks_ref
diff --git a/aleksis/apps/untis/util/mysql/main.py b/aleksis/apps/untis/util/mysql/main.py
index 6ae8ccd..1d3d9d1 100644
--- a/aleksis/apps/untis/util/mysql/main.py
+++ b/aleksis/apps/untis/util/mysql/main.py
@@ -23,8 +23,7 @@ def untis_import_mysql():
     breaks_ref = import_breaks(time_periods_ref)
 
     # Supervisions
-    supervision_areas_ref = import_supervision_areas()
-
+    supervision_areas_ref = import_supervision_areas(breaks_ref, teachers_ref)
 
     # Lessons
     import_lessons(time_periods_ref, rooms_ref, subjects_ref, teachers_ref, classes_ref)
-- 
GitLab