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

Filter unnecessary fulfilled constraints

parent ff96c9fc
No related branches found
No related tags found
1 merge request!268Merge fork for interoperability of KoMa solver
import json import json
from datetime import timedelta from datetime import timedelta
from typing import List
from django.contrib import messages from django.contrib import messages
from django.urls import reverse_lazy from django.urls import reverse_lazy
...@@ -71,15 +72,24 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView): ...@@ -71,15 +72,24 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
for slot in context["slots"]: for slot in context["slots"]:
slot.slots_in_an_hour = SLOTS_IN_AN_HOUR slot.slots_in_an_hour = SLOTS_IN_AN_HOUR
ak_availabilities = {slot.ak.pk: availability ak_availabilities = {
slot.ak.pk: Availability.union(slot.ak.availabilities.all())
for slot in context["slots"] for slot in context["slots"]
for availability in slot.ak.availabilities.all()} }
room_availabilities = {room.pk: availability room_availabilities = {
room.pk: Availability.union(room.availabilities.all())
for room in rooms for room in rooms
for availability in room.availabilities.all()} }
person_availabilities = {person.pk: availability person_availabilities = {
person.pk: Availability.union(person.availabilities.all())
for person in AKOwner.objects.filter(event=self.event) for person in AKOwner.objects.filter(event=self.event)
for availability in person.availabilities.all()} }
def _test_add_constraint(slot: Availability, availabilities: List[Availability]) -> bool:
return (
(not Availability.is_event_covered(self.event, availabilities))
and any(availability.contains(slot) for availability in availabilities)
)
for block in self.event.time_slots(slots_in_an_hour=SLOTS_IN_AN_HOUR): for block in self.event.time_slots(slots_in_an_hour=SLOTS_IN_AN_HOUR):
current_block = [] current_block = []
...@@ -92,16 +102,16 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView): ...@@ -92,16 +102,16 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
if self.event.reso_deadline is None or slot.end < self.event.reso_deadline: if self.event.reso_deadline is None or slot.end < self.event.reso_deadline:
constraints.append("resolution") constraints.append("resolution")
for (ak, availability) in ak_availabilities.items(): for ak, availabilities in ak_availabilities.items():
if availability.contains(slot): if _test_add_constraint(slot, availabilities):
constraints.append(f"availability-ak-{ak}") constraints.append(f"availability-ak-{ak}")
for (person, availability) in person_availabilities.items(): for person, availabilities in person_availabilities.items():
if availability.contains(slot): if _test_add_constraint(slot, availabilities):
constraints.append(f"availability-person-{person}") constraints.append(f"availability-person-{person}")
for (room, availability) in room_availabilities.items(): for person, availabilities in room_availabilities.items():
if availability.contains(slot): if _test_add_constraint(slot, availabilities):
constraints.append(f"availability-room-{room}") constraints.append(f"availability-room-{room}")
current_block.append({ current_block.append({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment