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

Import absences and substitutions related to school term and validity range

parent 8f42a2eb
No related branches found
No related tags found
2 merge requests!26Fix lint issues and reformat,!24Resolve "Import school terms and validity ranges"
Pipeline #2958 passed
import logging
from enum import Enum
from aleksis.apps.chronos.models import ValidityRange
from tqdm import tqdm
from aleksis.apps.chronos import models as chronos_models
......@@ -10,10 +11,10 @@ from ..util import (
TQDM_DEFAULTS,
get_first_period,
get_last_period,
get_term,
move_weekday_to_range,
run_default_filter,
untis_date_to_date,
date_to_untis_date,
)
logger = logging.getLogger(__name__)
......@@ -26,18 +27,16 @@ class AbsenceType(Enum):
ROOM = 102
def import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref):
def import_absences(validity_range: ValidityRange, absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref):
ref = {}
# Get term
term = get_term()
term_date_start = untis_date_to_date(term.datefrom)
term_date_end = untis_date_to_date(term.dateto)
untis_term_start = date_to_untis_date(validity_range.date_start)
untis_term_end = date_to_untis_date(validity_range.date_end)
# Get absences
absences = (
run_default_filter(mysql_models.Absence.objects, filter_term=False)
.filter(datefrom__lte=term.dateto, dateto__gte=term.datefrom)
run_default_filter(validity_range, mysql_models.Absence.objects, filter_term=False)
.filter(datefrom__lte=untis_term_end, dateto__gte=untis_term_start)
.order_by("absence_id")
)
......@@ -101,6 +100,7 @@ def import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes
"period_from": time_period_from,
"period_to": time_period_to,
"comment": absence.text,
"school_term": validity_range.school_term,
},
)
......@@ -117,6 +117,7 @@ def import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes
or new_absence.period_from != time_period_from
or new_absence.period_to != time_period_to
or new_absence.comment != comment
or new_absence.school_term != validity_range.school_term
):
new_absence.reason = reason
new_absence.group = group
......@@ -127,16 +128,19 @@ def import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes
new_absence.period_from = time_period_from
new_absence.period_to = time_period_to
new_absence.comment = comment
new_absence.school_term = validity_range.school_term
new_absence.save()
logger.info(" Absence updated")
existing_absences.append(import_ref)
ref[import_ref] = new_absence
# Delete all no longer existing absences
for a in chronos_models.Absence.objects.filter(
date_start__lte=term_date_start, date_end__gte=term_date_end
):
if a.import_ref_untis and a.import_ref_untis not in existing_absences:
logger.info("Absence {} deleted".format(a.id))
a.delete()
# Delete all no longer existing absences
for a in chronos_models.Absence.objects.filter(
date_start__lte=validity_range.date_end, date_end__gte=validity_range.date_start
):
if a.import_ref_untis and a.import_ref_untis not in existing_absences:
logger.info("Absence {} deleted".format(a.id))
a.delete()
return ref
import logging
from enum import Enum
from aleksis.apps.chronos.models import ValidityRange
from django.db.models import Q
from calendarweek import CalendarWeek
......@@ -11,10 +12,10 @@ from aleksis.apps.chronos import models as chronos_models
from .... import models as mysql_models
from ..util import (
TQDM_DEFAULTS,
get_term,
run_default_filter,
untis_date_to_date,
untis_split_first,
date_to_untis_date,
)
logger = logging.getLogger(__name__)
......@@ -26,16 +27,13 @@ class SubstitutionFlag(Enum):
def import_substitutions(
teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref, time_periods_ref,
validity_range: ValidityRange, teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref, time_periods_ref,
):
"""Import substitutions."""
term = get_term()
date_start = untis_date_to_date(term.datefrom)
date_end = untis_date_to_date(term.dateto)
subs = (
run_default_filter(mysql_models.Substitution.objects, filter_term=False)
.filter(date__gte=term.datefrom, date__lte=term.dateto)
run_default_filter(validity_range, mysql_models.Substitution.objects, filter_term=False)
.filter(date__gte=date_to_untis_date(validity_range.date_start), date__lte=date_to_untis_date(validity_range.date_end))
.exclude(
Q(flags__contains="N")
| Q(flags__contains="b")
......@@ -91,6 +89,7 @@ def import_substitutions(
if not is_supervision_substitution:
lesson_periods = chronos_models.LessonPeriod.objects.filter(
lesson__validity=validity_range,
lesson__lesson_id_untis=lesson_id,
lesson__teachers=teacher_old,
period__period=period,
......@@ -221,20 +220,20 @@ def import_substitutions(
logger.info(" Supervision substitution updated")
# Delete all no longer existing substitutions
for s in chronos_models.LessonSubstitution.objects.within_dates(date_start, date_end):
for s in chronos_models.LessonSubstitution.objects.within_dates(validity_range.date_start, validity_range.date_end):
if s.import_ref_untis and s.import_ref_untis not in existing_subs:
logger.info("Substitution {} deleted".format(s.id))
s.delete()
# Delete all no longer existing extra lessons
for s in chronos_models.ExtraLesson.objects.within_dates(date_start, date_end):
for s in chronos_models.ExtraLesson.objects.within_dates(validity_range.date_start, validity_range.date_end):
if s.import_ref_untis and s.import_ref_untis not in existing_subs:
logger.info("Extra lesson {} deleted".format(s.id))
s.delete()
# Delete all no longer existing supervision substitutions
for s in chronos_models.SupervisionSubstitution.objects.filter(
date__gte=date_start, date__lte=date_end
date__gte=validity_range.date_start, date__lte=validity_range.date_end
):
if s.import_ref_untis and s.import_ref_untis not in existing_subs:
logger.info("Supervision substitution {} deleted".format(s.id))
......
......@@ -49,11 +49,11 @@ def untis_import_mysql():
# Lessons
import_lessons(validity_range, time_periods_ref, rooms_ref, subjects_ref, teachers_ref, classes_ref)
# Substitutions
import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref)
import_substitutions(
teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref, time_periods_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(time_periods_ref, teachers_ref, classes_ref, rooms_ref)
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