diff --git a/aleksis/apps/untis/model_extensions.py b/aleksis/apps/untis/model_extensions.py index bf639c33979131509fd63946c0bc3b7ec6f7ad2e..6ab37e57941e7fb57d9e7e9d9796e062969ae656 100644 --- a/aleksis/apps/untis/model_extensions.py +++ b/aleksis/apps/untis/model_extensions.py @@ -87,3 +87,8 @@ chronos_models.Event.field( verbose_name=_("UNTIS import reference"), null=True, blank=True ) ) +chronos_models.Holiday.field( + import_ref_untis=IntegerField( + verbose_name=_("UNTIS import reference"), null=True, blank=True + ) +) diff --git a/aleksis/apps/untis/util/mysql/importers/holidays.py b/aleksis/apps/untis/util/mysql/importers/holidays.py new file mode 100644 index 0000000000000000000000000000000000000000..fe85b74c550bbad30b480194ab53e243a0ddfbdd --- /dev/null +++ b/aleksis/apps/untis/util/mysql/importers/holidays.py @@ -0,0 +1,69 @@ +import logging +from typing import Dict + + +from aleksis.apps.chronos import models as chronos_models + +from .... import models as mysql_models +from ..util import run_default_filter, untis_date_to_date + +logger = logging.getLogger(__name__) + + +def import_holidays() -> Dict[int, chronos_models.Holiday]: + """ Import holidays """ + ref = {} + + # Get holidays + holidays = run_default_filter(mysql_models.Holiday.objects, filter_term=False) + + for holiday in holidays: + import_ref = holiday.holiday_id + + # Check if needed data are provided + if not holiday.name: + logger.error( + "Holiday ID {}: Cannot import holiday without short name.".format( + import_ref + ) + ) + continue + + title = holiday.name[:50] + comments = holiday.longname + + date_start = untis_date_to_date(holiday.datefrom) + date_end = untis_date_to_date(holiday.dateto) + + logger.info("Import holiday {} …".format(title)) + + # Get or create holiday + new_holiday, created = chronos_models.Holiday.objects.get_or_create( + import_ref_untis=import_ref, + defaults={ + "title": title, + "comments": comments, + "date_start": date_start, + "date_end": date_end + } + ) + + if created: + logger.info(" New holiday created") + + if ( + new_holiday.title != title + or new_holiday.comments != comments + or new_holiday.date_start != date_start + or new_holiday.date_end != date_end + ): + new_holiday.title = title + new_holiday.comments = comments + new_holiday.date_start = date_start + new_holiday.date_end = date_end + new_holiday.save() + logger.info(" Holiday updated") + + ref[import_ref] = new_holiday + + return ref diff --git a/aleksis/apps/untis/util/mysql/main.py b/aleksis/apps/untis/util/mysql/main.py index 15f7230151e0b241cf1e81544e57cc83a4d932ff..ac4e73ed8d8d8d29b82da23b89fe5eee31ff2d3e 100644 --- a/aleksis/apps/untis/util/mysql/main.py +++ b/aleksis/apps/untis/util/mysql/main.py @@ -10,6 +10,7 @@ from .importers.common_data import ( import_absence_reasons, ) from .importers.events import import_events +from .importers.holidays import import_holidays from .importers.lessons import import_lessons from .importers.substitutions import import_substitutions @@ -28,6 +29,9 @@ def untis_import_mysql(): time_periods_ref = import_time_periods() breaks_ref = import_breaks(time_periods_ref) + # Holidays + holidays_ref = import_holidays() + # Supervisions supervision_areas_ref = import_supervision_areas(breaks_ref, teachers_ref)