from typing import Optional from django.db.models import QuerySet import reversion from tqdm import tqdm from aleksis.apps.chronos.util.change_tracker import TimetableDataChangeTracker from aleksis.apps.untis.util.mysql.importers.terms import import_terms from aleksis.apps.untis.util.mysql.util import TQDM_DEFAULTS from .importers.absences import import_absences from .importers.common_data import ( import_absence_reasons, import_breaks, import_classes, import_rooms, import_subjects, import_supervision_areas, import_teachers, import_time_periods, ) from .importers.events import import_events from .importers.holidays import import_holidays from .importers.lessons import import_lessons from .importers.substitutions import import_substitutions def untis_import_mysql(terms: Optional[QuerySet] = None, version: Optional[int] = None): # School terms and validity ranges validity_ref = import_terms(terms, version=version) for validity_range in tqdm( validity_ref.values(), desc="Import data for terms", **TQDM_DEFAULTS ): with reversion.create_revision(atomic=True): reversion.set_comment(f"Untis import for validity range {validity_range}") tracker = TimetableDataChangeTracker() # Common data for Chronos subjects_ref = import_subjects(validity_range) rooms_ref = import_rooms(validity_range) absence_reasons_ref = import_absence_reasons(validity_range) # Common data for core teachers_ref = import_teachers(validity_range) classes_ref = import_classes(validity_range, teachers_ref) # Time periods time_periods_ref = import_time_periods(validity_range) breaks_ref = import_breaks(validity_range, time_periods_ref) # Holidays holidays_ref = import_holidays(validity_range) # Supervisions supervision_areas_ref = import_supervision_areas( validity_range, breaks_ref, teachers_ref ) # Lessons import_lessons( validity_range, time_periods_ref, rooms_ref, subjects_ref, teachers_ref, classes_ref, ) # Substitutions import_absences( validity_range, absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref, ) import_substitutions( validity_range, teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref, time_periods_ref, ) # Events import_events(validity_range, time_periods_ref, teachers_ref, classes_ref, rooms_ref)