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
No related merge requests found
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