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
Branches
No related tags found
6 merge requests!262[WIP] compatibility with koma solver import/export,!261[WIP] compatibility with koma solver import/export,!260[WIP] import/export merge,!259Add view to clear schedule,!237Draft: add tests on json export,!235Merge fork for interoperability of KoMa solver
......@@ -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.
Please register or to comment