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

Filter unnecessary fulfilled constraints

parent 440709c1
No related branches found
No related tags found
1 merge request!3Merge into fork's `main` branch
import json
from datetime import timedelta
from typing import List
from django.contrib import messages
from django.urls import reverse_lazy
......@@ -71,15 +72,24 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
for slot in context["slots"]:
slot.slots_in_an_hour = SLOTS_IN_AN_HOUR
ak_availabilities = {slot.ak.pk: availability
for slot in context["slots"]
for availability in slot.ak.availabilities.all()}
room_availabilities = {room.pk: availability
for room in rooms
for availability in room.availabilities.all()}
person_availabilities = {person.pk: availability
for person in AKOwner.objects.filter(event=self.event)
for availability in person.availabilities.all()}
ak_availabilities = {
slot.ak.pk: Availability.union(slot.ak.availabilities.all())
for slot in context["slots"]
}
room_availabilities = {
room.pk: Availability.union(room.availabilities.all())
for room in rooms
}
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):
current_block = []
......@@ -92,16 +102,16 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
if self.event.reso_deadline is None or slot.end < self.event.reso_deadline:
constraints.append("resolution")
for (ak, availability) in ak_availabilities.items():
if availability.contains(slot):
for ak, availabilities in ak_availabilities.items():
if _test_add_constraint(slot, availabilities):
constraints.append(f"availability-ak-{ak}")
for (person, availability) in person_availabilities.items():
if availability.contains(slot):
for person, availabilities in person_availabilities.items():
if _test_add_constraint(slot, availabilities):
constraints.append(f"availability-person-{person}")
for (room, availability) in room_availabilities.items():
if availability.contains(slot):
for person, availabilities in room_availabilities.items():
if _test_add_constraint(slot, availabilities):
constraints.append(f"availability-room-{room}")
current_block.append({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment