-
Jonathan Weth authoredJonathan Weth authored
build.py 2.00 KiB
from datetime import date, datetime, time
from aleksis.apps.chronos.models import LessonEvent, SupervisionEvent
from aleksis.core.models import Group, Person
def build_substitutions_list(wanted_day: date) -> tuple[list[dict], set[Person], set[Group]]:
rows = []
affected_teachers = set()
affected_groups = set()
lesson_events = LessonEvent.get_single_events(
datetime.combine(wanted_day, time.min),
datetime.combine(wanted_day, time.max),
params={"current_changes": True},
with_reference_object=True,
)
for lesson_event in lesson_events:
ref_object = lesson_event["REFERENCE_OBJECT"]
affected_teachers.update(lesson_event["REFERENCE_OBJECT"].teachers.all())
affected_groups.update(lesson_event["REFERENCE_OBJECT"].groups.all())
if ref_object.amends:
affected_teachers.update(ref_object.amends.teachers.all())
affected_groups.update(ref_object.amends.groups.all())
row = {
"type": "substitution",
"sort_a": ref_object.group_names,
"sort_b": str(lesson_event["DTSTART"]),
"el": lesson_event,
}
rows.append(row)
supervision_events = SupervisionEvent.get_single_events(
datetime.combine(wanted_day, time.min),
datetime.combine(wanted_day, time.max),
params={"current_changes": True},
with_reference_object=True,
)
for supervision_event in supervision_events:
ref_object = supervision_event["REFERENCE_OBJECT"]
affected_teachers.update(ref_object.teachers.all())
if ref_object.amends:
affected_teachers.update(ref_object.amends.teachers.all())
row = {
"type": "supervision_substitution",
"sort_a": "Z",
"sort_b": str(supervision_event["DTSTART"]),
"el": supervision_event,
}
rows.append(row)
rows.sort(key=lambda row: row["sort_a"] + row["sort_b"])
return rows, affected_teachers, affected_groups