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

Filter unnecessary fulfilled constraints

parent 440709c1
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
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 = {
for slot in context["slots"] slot.ak.pk: Availability.union(slot.ak.availabilities.all())
for availability in slot.ak.availabilities.all()} for slot in context["slots"]
room_availabilities = {room.pk: availability }
for room in rooms room_availabilities = {
for availability in room.availabilities.all()} room.pk: Availability.union(room.availabilities.all())
person_availabilities = {person.pk: availability for room in rooms
for person in AKOwner.objects.filter(event=self.event) }
for availability in person.availabilities.all()} person_availabilities = {
person.pk: Availability.union(person.availabilities.all())
for person in AKOwner.objects.filter(event=self.event)
}
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