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

Cancel all lessons on group absences

parent 230084da
No related branches found
No related tags found
1 merge request!191Resolve "Cancel all lessons on group absences"
import logging
from enum import Enum
from django.db.models import Count
from django.utils.translation import gettext as _
from reversion import create_revision, set_comment
from tqdm import tqdm
from aleksis.apps.chronos.models import LessonEvent
from aleksis.apps.kolego import models as kolego_models
from aleksis.apps.lesrooster.models import ValidityRange
from aleksis.core.models import Group
from .... import models as mysql_models
from ..util import (
......@@ -125,6 +128,42 @@ def import_absences(
existing_absences.append(import_ref)
ref[import_ref] = new_absence
# Cancel all lessons of this group
if group:
# Search parent groups with match
group_qs = Group.objects.annotate(parent_groups_count=Count("parent_groups")).filter(
parent_groups_count=1, parent_groups=group
)
# Search lesson events with exact groups or parent groups match
qs = LessonEvent.objects.filter(
amends__isnull=True, extended_data__event_untis__isnull=True
).filter(
pk__in=LessonEvent.objects.annotate(groups_count=Count("groups"))
.filter(groups_count=1, groups=group)
.values_list("id", flat=True)
.union(LessonEvent.objects.filter(groups__in=group_qs).values_list("id", flat=True))
)
affected_events = LessonEvent.get_single_events(
datetime_start, datetime_end, request=None, with_reference_object=True, queryset=qs
)
for affected_event in affected_events:
ref_object = affected_event["REFERENCE_OBJECT"]
amending_event, __ = LessonEvent.objects.update_or_create(
amends=ref_object,
datetime_start=affected_event["DTSTART"].dt,
datetime_end=affected_event["DTEND"].dt,
defaults=dict(cancelled=True),
)
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}"
)
# Delete all no longer existing absences
for a in kolego_models.Absence.objects.filter(
extended_data__import_ref_untis__isnull=False,
......
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