diff --git a/aleksis/apps/untis/model_extensions.py b/aleksis/apps/untis/model_extensions.py index 10823bffb5557442e33c5e3055815bfee37b7728..22b4f215b31023d0b75a179c63dbe4ad69796f45 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 a708b56cf03407a93fda49729220fabaa82185dc..d867f2c12c58346d8f02d7439898081aa90ecf34 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 8f2ad26dbd5199baa5b58c3ead8ec5243388d9af..c175a60a9bb17417c37c5c6c2e09ae09eb322ad6 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()