From dd632b2b1bd13b3b891b635d5835f1878323e4d4 Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Tue, 20 Aug 2024 09:39:38 +0200 Subject: [PATCH] Update logic for checking for pre-existing absences --- aleksis/apps/alsijil/schema/absences.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/aleksis/apps/alsijil/schema/absences.py b/aleksis/apps/alsijil/schema/absences.py index 1dd773e46..ab006e1d8 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, -- GitLab