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

Handle existing amends on LessonEvents

parent 98dcdc40
No related branches found
No related tags found
1 merge request!192Handle existing amends on LessonEvents
Pipeline #193913 failed
......@@ -21,6 +21,7 @@ from ..util import (
move_weekday_to_range,
run_default_filter,
untis_date_to_date,
update_or_create_lesson_event,
)
logger = logging.getLogger(__name__)
......@@ -151,7 +152,7 @@ def import_absences(
for affected_event in affected_events:
ref_object = affected_event["REFERENCE_OBJECT"]
amending_event, __ = LessonEvent.objects.update_or_create(
amending_event = update_or_create_lesson_event(
amends=ref_object,
datetime_start=affected_event["DTSTART"].dt,
datetime_end=affected_event["DTEND"].dt,
......@@ -159,6 +160,7 @@ def import_absences(
)
amending_event.extended_data["cancelled_by_absence_untis"] = import_ref
amending_event.save()
logging.info(
f" Cancel lesson event {ref_object.id} from {affected_event['DTSTART'].dt} "
f"to {affected_event['DTEND'].dt} with event {amending_event.id}"
......
......@@ -15,6 +15,7 @@ from ..util import (
run_default_filter,
untis_date_to_date,
untis_split_first,
update_or_create_lesson_event,
)
logger = logging.getLogger(__name__)
......@@ -156,30 +157,21 @@ def import_substitutions(
datetime_start = lesson.slot_start.get_datetime_start(date)
datetime_end = lesson.slot_end.get_datetime_end(date)
(
substitution,
created,
) = (
LessonEvent.objects.select_related(None)
.prefetch_related(None)
.update_or_create(
amends=lesson.lesson_event,
extended_data__substitution_ref_untis=sub_id,
defaults={
"datetime_start": datetime_start,
"datetime_end": datetime_end,
"subject": subject_new,
"cancelled": cancelled,
"comment": comment,
"slot_number_start": lesson.slot_start.period,
"slot_number_end": lesson.slot_end.period,
},
)
substitution = update_or_create_lesson_event(
amends=lesson.lesson_event,
datetime_start=datetime_start,
datetime_end=datetime_end,
defaults={
"datetime_start": datetime_start,
"datetime_end": datetime_end,
"subject": subject_new,
"cancelled": cancelled,
"comment": comment,
"slot_number_start": lesson.slot_start.period,
"slot_number_end": lesson.slot_end.period,
},
)
if created:
logger.info(" Substitution created")
# Sync teachers
substitution.teachers.set(teachers)
substitution.rooms.set(rooms)
......
......@@ -6,7 +6,9 @@ from typing import Any, Callable, Optional, Sequence, Type, Union
from django.db.models import Model, QuerySet
from aleksis.apps.chronos.models import LessonEvent
from aleksis.apps.lesrooster.models import ValidityRange
from aleksis.core.models import CalendarEvent
DB_NAME = "untis"
UNTIS_DATE_FORMAT = "%Y%m%d"
......@@ -215,3 +217,29 @@ def move_weekday_to_range(time_periods_ref: dict, weekday: int) -> int:
weekday = last_weekday
return weekday
def update_or_create_lesson_event(amends: CalendarEvent, datetime_start, datetime_end, defaults):
try:
existing_event = CalendarEvent.objects.get(
amends=amends, datetime_start=datetime_start, datetime_end=datetime_end
)
existing_event.amends = None
existing_event.save()
except CalendarEvent.DoesNotExist:
existing_event = None
amending_event, __ = (
LessonEvent.objects.select_related(None)
.prefetch_related(None)
.update_or_create(
amends=amends,
datetime_start=datetime_start,
datetime_end=datetime_end,
defaults=defaults,
)
)
if existing_event:
existing_event.amends = amending_event
existing_event.save()
return amending_event
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