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