From 219eff23826062310290f4b5db3bed51bed564e1 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 13 Apr 2020 15:51:46 +0200 Subject: [PATCH] Add importer for absence reasons --- aleksis/apps/untis/model_extensions.py | 6 ++- .../untis/util/mysql/importers/common_data.py | 48 +++++++++++++++++++ aleksis/apps/untis/util/mysql/main.py | 5 +- 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/aleksis/apps/untis/model_extensions.py b/aleksis/apps/untis/model_extensions.py index 10823bf..22b4f21 100644 --- a/aleksis/apps/untis/model_extensions.py +++ b/aleksis/apps/untis/model_extensions.py @@ -72,4 +72,8 @@ chronos_models.SupervisionSubstitution.field( verbose_name=_("UNTIS import reference"), null=True, blank=True ) ) - +chronos_models.AbsenceReason.field( + import_ref_untis=IntegerField( + verbose_name=_("UNTIS import reference"), null=True, blank=True + ) +) diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py index a708b56..d867f2c 100644 --- a/aleksis/apps/untis/util/mysql/importers/common_data.py +++ b/aleksis/apps/untis/util/mysql/importers/common_data.py @@ -495,3 +495,51 @@ def import_breaks( breaks_ref[weekday][next_period] = new_break return breaks_ref + + +def import_absence_reasons() -> Dict[int, chronos_models.AbsenceReason]: + """ Import absence reasons """ + + ref = {} + + # Get reasons + reasons = run_default_filter(mysql_models.Absencereason.objects, filter_term=False) + + for reason in reasons: + if not reason.name: + logger.error( + "Absence reason ID {}: Cannot import absence reason without short name.".format( + reason.absence_reason_id + ) + ) + continue + + # Build values + short_name = reason.name + name = reason.longname if reason.longname else short_name + import_ref = reason.absence_reason_id + + logger.info("Import absence reason {} …".format(short_name)) + + new_reason, created = chronos_models.AbsenceReason.objects.get_or_create( + import_ref_untis=import_ref, + defaults={"short_name": short_name, "name": name} + ) + + if created: + logger.info(" New absence reason created") + + changed = False + + if new_reason.short_name != short_name or new_reason.name != name: + new_reason.short_name = short_name + new_reason.name = name + changed = True + logger.info(" Short name and name updated") + + if changed: + new_reason.save() + + ref[import_ref] = new_reason + + return ref diff --git a/aleksis/apps/untis/util/mysql/main.py b/aleksis/apps/untis/util/mysql/main.py index 8f2ad26..c175a60 100644 --- a/aleksis/apps/untis/util/mysql/main.py +++ b/aleksis/apps/untis/util/mysql/main.py @@ -5,7 +5,9 @@ from .importers.common_data import ( import_supervision_areas, import_teachers, import_time_periods, - import_breaks) + import_breaks, + import_absence_reasons, +) from .importers.lessons import import_lessons from .importers.substitutions import import_substitutions @@ -14,6 +16,7 @@ def untis_import_mysql(): # Coomon data for Chronos subjects_ref = import_subjects() rooms_ref = import_rooms() + absence_reasons_ref = import_absence_reasons() # Common data for core teachers_ref = import_teachers() -- GitLab