Skip to content
Snippets Groups Projects
Verified Commit f0842f64 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Import common data with relation to school term

parent 9984ed75
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ from datetime import time ...@@ -3,6 +3,7 @@ from datetime import time
from enum import Enum from enum import Enum
from typing import Dict from typing import Dict
from aleksis.apps.chronos.models import ValidityRange
from tqdm import tqdm from tqdm import tqdm
from aleksis.apps.chronos import models as chronos_models from aleksis.apps.chronos import models as chronos_models
...@@ -25,12 +26,12 @@ class CommonDataId(Enum): ...@@ -25,12 +26,12 @@ class CommonDataId(Enum):
PERIOD = 40 PERIOD = 40
def import_subjects() -> Dict[int, chronos_models.Subject]: def import_subjects(validity_range: ValidityRange) -> Dict[int, chronos_models.Subject]:
"""Import subjects.""" """Import subjects."""
subjects_ref = {} subjects_ref = {}
# Get subjects # Get subjects
subjects = run_default_filter(mysql_models.Subjects.objects, filter_term=False) subjects = run_default_filter(validity_range, mysql_models.Subjects.objects, filter_term=False)
for subject in tqdm(subjects, desc="Import subjects", **TQDM_DEFAULTS): for subject in tqdm(subjects, desc="Import subjects", **TQDM_DEFAULTS):
# Check if needed data are provided # Check if needed data are provided
...@@ -92,12 +93,12 @@ def import_subjects() -> Dict[int, chronos_models.Subject]: ...@@ -92,12 +93,12 @@ def import_subjects() -> Dict[int, chronos_models.Subject]:
return subjects_ref return subjects_ref
def import_teachers() -> Dict[int, core_models.Person]: def import_teachers(validity_range: ValidityRange) -> Dict[int, core_models.Person]:
"""Import teachers.""" """Import teachers."""
teachers_ref = {} teachers_ref = {}
# Get teachers # Get teachers
teachers = run_default_filter(mysql_models.Teacher.objects) teachers = run_default_filter(validity_range, mysql_models.Teacher.objects)
for teacher in tqdm(teachers, desc="Import teachers", **TQDM_DEFAULTS): for teacher in tqdm(teachers, desc="Import teachers", **TQDM_DEFAULTS):
# Check if needed data are provided # Check if needed data are provided
...@@ -157,12 +158,12 @@ def import_teachers() -> Dict[int, core_models.Person]: ...@@ -157,12 +158,12 @@ def import_teachers() -> Dict[int, core_models.Person]:
return teachers_ref return teachers_ref
def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, core_models.Group]: def import_classes(validity_range: ValidityRange, teachers_ref: Dict[int, core_models.Person]) -> Dict[int, core_models.Group]:
"""Import classes.""" """Import classes."""
classes_ref = {} classes_ref = {}
# Get classes # Get classes
course_classes = run_default_filter(mysql_models.Class.objects, filter_term=True) course_classes = run_default_filter(validity_range, mysql_models.Class.objects, filter_term=True)
for class_ in tqdm(course_classes, desc="Import classes", **TQDM_DEFAULTS): for class_ in tqdm(course_classes, desc="Import classes", **TQDM_DEFAULTS):
# Check if needed data are provided # Check if needed data are provided
...@@ -181,12 +182,12 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor ...@@ -181,12 +182,12 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor
logger.info("Import class {} (as group) …".format(short_name)) logger.info("Import class {} (as group) …".format(short_name))
try: try:
new_group = core_models.Group.objects.get(short_name__iexact=short_name) new_group = core_models.Group.objects.get(short_name__iexact=short_name, school_term__in=[None, validity_range.school_term])
except core_models.Group.DoesNotExist: except core_models.Group.DoesNotExist:
new_group = core_models.Group.objects.create( new_group = core_models.Group.objects.create(
short_name=short_name, name=name, import_ref_untis=import_ref, short_name=short_name, name=name, import_ref_untis=import_ref, school_term=validity_range.school_term
) )
logger.info(" New person created") logger.info(" New group created")
changed = False changed = False
...@@ -208,6 +209,11 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor ...@@ -208,6 +209,11 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor
changed = True changed = True
logger.info(" Import reference updated") logger.info(" Import reference updated")
if new_group.school_term != validity_range.school_term:
new_group.school_term = validity_range.school_term
changed = True
logger.info(" School term updated")
if changed: if changed:
new_group.save() new_group.save()
...@@ -223,12 +229,12 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor ...@@ -223,12 +229,12 @@ def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, cor
return classes_ref return classes_ref
def import_rooms() -> Dict[int, chronos_models.Room]: def import_rooms(validity_range: ValidityRange) -> Dict[int, chronos_models.Room]:
"""Import rooms.""" """Import rooms."""
ref = {} ref = {}
# Get rooms # Get rooms
rooms = run_default_filter(mysql_models.Room.objects) rooms = run_default_filter(validity_range, mysql_models.Room.objects)
for room in tqdm(rooms, desc="Import rooms", **TQDM_DEFAULTS): for room in tqdm(rooms, desc="Import rooms", **TQDM_DEFAULTS):
if not room.name: if not room.name:
...@@ -270,12 +276,12 @@ def import_rooms() -> Dict[int, chronos_models.Room]: ...@@ -270,12 +276,12 @@ def import_rooms() -> Dict[int, chronos_models.Room]:
return ref return ref
def import_supervision_areas(breaks_ref, teachers_ref) -> Dict[int, chronos_models.SupervisionArea]: def import_supervision_areas(validity_range: ValidityRange, breaks_ref, teachers_ref) -> Dict[int, chronos_models.SupervisionArea]:
"""Import supervision areas.""" """Import supervision areas."""
ref = {} ref = {}
# Get supervision areas # Get supervision areas
areas = run_default_filter(mysql_models.Corridor.objects, filter_term=False) areas = run_default_filter(validity_range, mysql_models.Corridor.objects, filter_term=False)
for area in tqdm(areas, desc="Import supervision areas", **TQDM_DEFAULTS): for area in tqdm(areas, desc="Import supervision areas", **TQDM_DEFAULTS):
if not area.name: if not area.name:
...@@ -390,10 +396,10 @@ def import_supervision_areas(breaks_ref, teachers_ref) -> Dict[int, chronos_mode ...@@ -390,10 +396,10 @@ def import_supervision_areas(breaks_ref, teachers_ref) -> Dict[int, chronos_mode
return ref return ref
def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: def import_time_periods(validity_range: ValidityRange) -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
"""Import time periods an breaks.""" """Import time periods an breaks."""
times = ( times = (
run_default_filter(mysql_models.Commondata.objects, filter_term=False) run_default_filter(validity_range, mysql_models.Commondata.objects, filter_term=False)
.filter(id=30) .filter(id=30)
.order_by("number") .order_by("number")
) )
...@@ -409,7 +415,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: ...@@ -409,7 +415,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
times_ref[period] = (start_time, end_time) times_ref[period] = (start_time, end_time)
periods = ( periods = (
run_default_filter(mysql_models.Commondata.objects, filter_term=False) run_default_filter(validity_range, mysql_models.Commondata.objects, filter_term=False)
.filter(id=CommonDataId.PERIOD.value) .filter(id=CommonDataId.PERIOD.value)
.order_by("number", "number1") .order_by("number", "number1")
) )
...@@ -426,6 +432,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: ...@@ -426,6 +432,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
new_time_period, created = chronos_models.TimePeriod.objects.get_or_create( new_time_period, created = chronos_models.TimePeriod.objects.get_or_create(
weekday=weekday, weekday=weekday,
period=period, period=period,
validity=validity_range,
defaults={"time_start": start_time, "time_end": end_time}, defaults={"time_start": start_time, "time_end": end_time},
) )
...@@ -447,7 +454,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: ...@@ -447,7 +454,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
def import_breaks( def import_breaks(
time_periods_ref: Dict[int, Dict[int, chronos_models.TimePeriod]], validity_range: ValidityRange, time_periods_ref: Dict[int, Dict[int, chronos_models.TimePeriod]],
) -> Dict[int, Dict[int, chronos_models.Break]]: ) -> Dict[int, Dict[int, chronos_models.Break]]:
# Build breaks for all weekdays # Build breaks for all weekdays
breaks_ref = {} breaks_ref = {}
...@@ -479,6 +486,7 @@ def import_breaks( ...@@ -479,6 +486,7 @@ def import_breaks(
new_break, created = chronos_models.Break.objects.get_or_create( new_break, created = chronos_models.Break.objects.get_or_create(
after_period=after_period, after_period=after_period,
before_period=before_period, before_period=before_period,
validity=validity_range,
defaults={"short_name": short_name, "name": short_name}, defaults={"short_name": short_name, "name": short_name},
) )
...@@ -492,12 +500,12 @@ def import_breaks( ...@@ -492,12 +500,12 @@ def import_breaks(
return breaks_ref return breaks_ref
def import_absence_reasons() -> Dict[int, chronos_models.AbsenceReason]: def import_absence_reasons(validity_range: ValidityRange) -> Dict[int, chronos_models.AbsenceReason]:
"""Import absence reasons.""" """Import absence reasons."""
ref = {} ref = {}
# Get reasons # Get reasons
reasons = run_default_filter(mysql_models.Absencereason.objects, filter_term=False) reasons = run_default_filter(validity_range, mysql_models.Absencereason.objects, filter_term=False)
for reason in tqdm(reasons, desc="Import absence reasons", **TQDM_DEFAULTS): for reason in tqdm(reasons, desc="Import absence reasons", **TQDM_DEFAULTS):
if not reason.name: if not reason.name:
......
from aleksis.apps.untis.util.mysql.importers.terms import import_terms, get_terms_for_date from aleksis.apps.untis.util.mysql.importers.terms import import_terms, get_terms_for_date
from aleksis.apps.untis.util.mysql.util import TQDM_DEFAULTS
from django.db import transaction from django.db import transaction
from tqdm import tqdm
from .importers.absences import import_absences from .importers.absences import import_absences
from .importers.common_data import ( from .importers.common_data import (
...@@ -24,18 +26,19 @@ def untis_import_mysql(): ...@@ -24,18 +26,19 @@ def untis_import_mysql():
terms = get_terms_for_date() terms = get_terms_for_date()
validity_ref = import_terms(terms) validity_ref = import_terms(terms)
# Coomon data for Chronos for validity_range in tqdm(validity_ref.values(), desc="Import data for terms ...", **TQDM_DEFAULTS):
subjects_ref = import_subjects() # Common data for Chronos
rooms_ref = import_rooms() subjects_ref = import_subjects(validity_range)
absence_reasons_ref = import_absence_reasons() rooms_ref = import_rooms(validity_range)
absence_reasons_ref = import_absence_reasons(validity_range)
# Common data for core # Common data for core
teachers_ref = import_teachers() teachers_ref = import_teachers(validity_range)
classes_ref = import_classes(teachers_ref) classes_ref = import_classes(validity_range, teachers_ref)
# Time periods # Time periods
time_periods_ref = import_time_periods() time_periods_ref = import_time_periods(validity_range)
breaks_ref = import_breaks(time_periods_ref) breaks_ref = import_breaks(validity_range, time_periods_ref)
# Holidays # Holidays
holidays_ref = import_holidays() holidays_ref = import_holidays()
......
...@@ -2,6 +2,7 @@ import logging ...@@ -2,6 +2,7 @@ import logging
from datetime import date, datetime from datetime import date, datetime
from typing import Any, Callable, Optional, Sequence, Union from typing import Any, Callable, Optional, Sequence, Union
from aleksis.apps.chronos.models import ValidityRange
from django.db.models import Model, QuerySet from django.db.models import Model, QuerySet
DB_NAME = "untis" DB_NAME = "untis"
...@@ -22,18 +23,18 @@ def run_using(obj: QuerySet) -> QuerySet: ...@@ -22,18 +23,18 @@ def run_using(obj: QuerySet) -> QuerySet:
def run_default_filter( def run_default_filter(
validity_range: ValidityRange,
qs: QuerySet, qs: QuerySet,
for_date: Optional[date] = None, for_date: Optional[date] = None,
filter_term: bool = True, filter_term: bool = True,
filter_deleted: bool = True, filter_deleted: bool = True,
) -> QuerySet: ) -> QuerySet:
"""Add a default filter in order to select the correct term.""" """Add a default filter in order to select the correct term."""
term = get_term(for_date)
term_id, schoolyear_id, school_id, version_id = ( term_id, schoolyear_id, school_id, version_id = (
term.term_id, validity_range.import_ref_untis,
term.schoolyear_id, validity_range.school_term.import_ref_untis,
term.school_id, validity_range.school_id_untis,
term.version_id, validity_range.version_id_untis,
) )
qs = run_using(qs).filter( qs = run_using(qs).filter(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment