Skip to content
Snippets Groups Projects
Commit ae5cfae3 authored by Felix Blanke's avatar Felix Blanke
Browse files

Do not introduce constraints if available for whole event

parent ce126f70
No related branches found
No related tags found
1 merge request!3Merge into fork's `main` branch
......@@ -575,6 +575,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 len(avail_union) == 1 and avail_union[0].contains(full_event):
time_constraints = []
else:
time_constraints = [f"availability-room-{self.pk}"]
data = {
"id": self.pk,
"info": {
......@@ -583,7 +594,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)
......@@ -684,6 +695,25 @@ class AKSlot(models.Model):
super().save(force_insert, force_update, using, 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),
......@@ -700,9 +730,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)
......
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