diff --git a/aleksis/apps/alsijil/schema/absences.py b/aleksis/apps/alsijil/schema/absences.py index 1dd773e465ff75a6bb6b33846132423dd82e760f..ab006e1d875e053e061d04c9c800ae0c3ef15f2e 100644 --- a/aleksis/apps/alsijil/schema/absences.py +++ b/aleksis/apps/alsijil/schema/absences.py @@ -2,6 +2,7 @@ import datetime from typing import List from django.core.exceptions import PermissionDenied +from django.db.models import Q import graphene @@ -41,15 +42,27 @@ class AbsencesForPersonsCreateMutation(graphene.Mutation): for person in persons: if not info.context.user.has_perm("alsijil.register_absence_rule", person): raise PermissionDenied() - # TODO: fix timeframe - kolego_absence, __ = Absence.objects.get_or_create( - datetime_start=start, - datetime_end=end, + + # Check if there is an existing absence with overlapping datetime + absences = Absence.objects.filter( + Q(datetime_start__lte=start) | Q(date_start__lte=start.date()), + Q(datetime_end__gte=end) | Q(date_end__gte=end.date()), reason_id=reason, person=person, - defaults={"comment": comment}, ) + if len(absences) > 0: + kolego_absence = absences.first() + else: + # Check for same times and create otherwise + kolego_absence, __ = Absence.objects.get_or_create( + datetime_start=start, + datetime_end=end, + reason_id=reason, + person=person, + defaults={"comment": comment}, + ) + events = ParticipationStatus.get_single_events( start, end,