diff --git a/AKModel/models.py b/AKModel/models.py index 887b720226d34e77f54c408e3fcb5c4df2ddc751..5cb9973944295161aef6b739f28ef4f988476c3e 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -628,6 +628,17 @@ class Room(models.Model): return self.title def as_json(self) -> str: + from AKModel.availability.models import Availability + + # check if room is available for the whole event + # -> no time constraint needs to be introduced + 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): + time_constraints = [] + else: + time_constraints = [f"availability-room-{self.pk}"] + data = { "id": self.pk, "info": { @@ -636,7 +647,7 @@ class Room(models.Model): "capacity": self.capacity, "fulfilled_room_constraints": [constraint.name for constraint in self.properties.all()], - "time_constraints": [f"availability-room-{self.pk}"] + "time_constraints": time_constraints } return json.dumps(data) @@ -738,6 +749,25 @@ class AKSlot(models.Model): force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields) def as_json(self) -> str: + from AKModel.availability.models import Availability + + # check if ak resp. owner is available for the whole event + # -> no time constraint needs to be introduced + 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): + 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): + return [] + else: + return [f"availability-person-{owner.pk}"] + data = { "id": self.pk, "duration": int(self.duration * self.slots_in_an_hour), @@ -754,9 +784,9 @@ class AKSlot(models.Model): }, } - data["time_constraints"].append(f"availability-ak-{self.pk}") - data["time_constraints"] += [f"availability-person-{owner.pk}" - for owner in self.ak.owners.all()] + data["time_constraints"].extend(ak_time_constraints) + for owner in self.ak.owners.all(): + data["time_constraints"].extend(_owner_time_constraints(owner)) return json.dumps(data)