From d07e75d951d4798083e19f8fea26d568e439ee2a Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Tue, 31 Mar 2020 15:33:02 +0200
Subject: [PATCH] Improve import process for rooms

---
 aleksis/apps/untis/settings.py                |  6 +++
 .../untis/util/mysql/importers/common_data.py | 41 +++++++++++++++----
 2 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/aleksis/apps/untis/settings.py b/aleksis/apps/untis/settings.py
index abaa6e4..da7c74d 100644
--- a/aleksis/apps/untis/settings.py
+++ b/aleksis/apps/untis/settings.py
@@ -48,6 +48,11 @@ CONSTANCE_CONFIG = {
         _("Overwrite existing owners?"),
         bool,
     ),
+    "UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME": (
+        True,
+        _("Update name of existing rooms?"),
+        bool,
+    ),
 }
 
 CONSTANCE_CONFIG_FIELDSETS = {
@@ -65,5 +70,6 @@ CONSTANCE_CONFIG_FIELDSETS = {
         "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_SHORT_NAME",
         "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_NAME",
         "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_OVERWRITE_OWNERS",
+        "UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME",
     ),
 }
diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py
index 9679222..c6a3ac8 100644
--- a/aleksis/apps/untis/util/mysql/importers/common_data.py
+++ b/aleksis/apps/untis/util/mysql/importers/common_data.py
@@ -223,25 +223,52 @@ def import_classes(
 def import_rooms() -> Dict[int, chronos_models.Room]:
     """ Import rooms """
 
-    rooms_ref = {}
+    ref = {}
+
+    # Get rooms
     rooms = run_default_filter(mysql_models.Room.objects)
+
     for room in rooms:
         if not room.name:
-            raise Exception("Short name needed.")
+            logger.error(
+                "Room ID {}: Cannot import room without short name.".format(
+                    room.room_id
+                )
+            )
+            continue
 
+        # Build values
         short_name = room.name[:10]
         name = room.longname[:30] if room.longname else short_name
+        import_ref = room.room_id
+
+        logger.info("Import room {} …".format(short_name))
 
         new_room, created = chronos_models.Room.objects.get_or_create(
-            short_name=short_name, defaults={"name": name}
+            short_name=short_name, defaults={"name": name, "import_ref_untis": import_ref}
         )
 
-        new_room.name = name
-        new_room.save()
+        if created:
+            logger.info("  New room created")
+
+        changed = False
+
+        if config.UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME and new_room.name != name:
+            new_room.name = name
+            changed = True
+            logger.info("  Name updated")
+
+        if new_room.import_ref_untis != import_ref:
+            new_room.import_ref_untis = import_ref
+            changed = True
+            logger.info("  Import reference updated")
+
+        if changed:
+            new_room.save()
 
-        rooms_ref[room.room_id] = new_room
+        ref[import_ref] = new_room
 
-    return rooms_ref
+    return ref
 
 
 def import_supervision_areas() -> Dict[int, chronos_models.SupervisionArea]:
-- 
GitLab