diff --git a/AKModel/models.py b/AKModel/models.py index 5fc04ffba0945a3b010f74a259c6743dea549dd6..ae9abca44c05fcbd800bbbca118cc4a9ac445a02 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