From e84125158aea0866c8345f220b660682bcd25535 Mon Sep 17 00:00:00 2001 From: Felix Blanke <info@fblanke.de> Date: Wed, 22 Jan 2025 16:53:49 +0100 Subject: [PATCH] Add checks for fixed AKs and empty timeslots --- AKModel/models.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/AKModel/models.py b/AKModel/models.py index 5fc04ff..ae9abca 100644 --- a/AKModel/models.py +++ b/AKModel/models.py @@ -406,6 +406,11 @@ class Event(models.Model): scheduled_slot["timeslot_ids"] = list(map(int, scheduled_slot["timeslot_ids"])) slot = AKSlot.objects.get(id=int(scheduled_slot["ak_id"])) + if not scheduled_slot["timeslot_ids"]: + raise ValueError( + _("AK {ak_name} is not assigned any timeslot by the solver").format(ak_name=slot.ak.name) + ) + start_timeslot = timeslot_dict[min(scheduled_slot["timeslot_ids"])].avail end_timeslot = timeslot_dict[max(scheduled_slot["timeslot_ids"])].avail solver_duration = (end_timeslot.end - start_timeslot.start).total_seconds() / 3600.0 @@ -422,10 +427,35 @@ class Event(models.Model): ) ) - slot.room = Room.objects.get(id=int(scheduled_slot["room_id"])) - slot.start = start_timeslot.start - slot.save() - slots_updated += 1 + if slot.fixed: + solver_room = Room.objects.get(id=int(scheduled_slot["room_id"])) + if slot.room != solver_room: + raise ValueError( + _( + "Fixed AK {ak_name} assigned by solver to room {solver_room} " + "is fixed to room {slot_room}" + ).format( + ak_name=slot.ak.name, + solver_room=solver_room.name, + slot_room=slot.room.name, + ) + ) + if slot.start != start_timeslot.start: + raise ValueError( + _( + "Fixed AK {ak_name} assigned by solver to start at {solver_start} " + "is fixed to start at {slot_start}" + ).format( + ak_name=slot.ak.name, + solver_start=start_timeslot.start, + slot_start=slot.start, + ) + ) + else: + slot.room = Room.objects.get(id=int(scheduled_slot["room_id"])) + slot.start = start_timeslot.start + slot.save() + slots_updated += 1 return slots_updated -- GitLab