From ff96c9fce50a6dce01a6d0fd162373e7484fb290 Mon Sep 17 00:00:00 2001 From: Felix Blanke <info@fblanke.de> Date: Mon, 27 May 2024 07:46:06 +0200 Subject: [PATCH] Introduce availabilits class method is_event_covered --- AKModel/availability/models.py | 8 ++++++++ AKModel/models.py | 17 +++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/AKModel/availability/models.py b/AKModel/availability/models.py index 7ce794dc..de51e438 100644 --- a/AKModel/availability/models.py +++ b/AKModel/availability/models.py @@ -267,6 +267,14 @@ class Availability(models.Model): return Availability(start=timeframe_start, end=timeframe_end, event=event, person=person, room=room, ak=ak, ak_category=ak_category) + @classmethod + def is_event_covered(cls, event, availabilities: List['Availability']) -> bool: + # NOTE: Cannot use `Availability.with_event_length` as its end is the + # event end + 1 day + full_event = Availability(event=event, start=event.start, end=event.end) + avail_union = Availability.union(availabilities) + return not avail_union or avail_union[0].contains(full_event) + class Meta: verbose_name = _('Availability') verbose_name_plural = _('Availabilities') diff --git a/AKModel/models.py b/AKModel/models.py index 6ee9b6fa..d5332753 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -632,12 +632,7 @@ class Room(models.Model): # check if room is available for the whole event # -> no time constraint needs to be introduced - - # NOTE: Cannot use `Availability.with_event_length` as its end is the - # event end + 1 day - full_event = Availability(event=self.event, start=self.event.start, end=self.event.end) - avail_union = Availability.union(self.availabilities.all()) - if not avail_union or avail_union[0].contains(full_event): + if Availability.is_event_covered(self.event, self.availabilities.all()): time_constraints = [] else: time_constraints = [f"availability-room-{self.pk}"] @@ -757,19 +752,13 @@ class AKSlot(models.Model): # check if ak resp. owner is available for the whole event # -> no time constraint needs to be introduced - # NOTE: Cannot use `Availability.with_event_length` as its end is the - # event end + 1 day - full_event = Availability(event=self.event, start=self.event.start, end=self.event.end) - - ak_avail_union = Availability.union(self.ak.availabilities.all()) - if not ak_avail_union or ak_avail_union[0].contains(full_event): + if Availability.is_event_covered(self.event, self.ak.availabilities.all()): ak_time_constraints = [] else: ak_time_constraints = [f"availability-ak-{self.ak.pk}"] def _owner_time_constraints(owner: AKOwner): - owner_avail_union = Availability.union(owner.availabilities.all()) - if not owner_avail_union or owner_avail_union[0].contains(full_event): + if Availability.is_event_covered(self.event, owner.availabilities.all()): return [] else: return [f"availability-person-{owner.pk}"] -- GitLab