Skip to content
Snippets Groups Projects
Commit 554b3871 authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Fix constraint check for not-yet scheduled ak slots

parent 868a5198
No related branches found
No related tags found
No related merge requests found
Pipeline #22764 passed
...@@ -268,29 +268,30 @@ def akslot_changed_handler(sender, instance: AKSlot, **kwargs): ...@@ -268,29 +268,30 @@ def akslot_changed_handler(sender, instance: AKSlot, **kwargs):
violation_type = ConstraintViolation.ViolationType.OWNER_TWO_SLOTS violation_type = ConstraintViolation.ViolationType.OWNER_TWO_SLOTS
new_violations = [] new_violations = []
# For all owners (after recent change)... if instance.start:
for owner in instance.ak.owners.all(): # For all owners (after recent change)...
# ...find other slots that might be overlapping... for owner in instance.ak.owners.all():
# ...find other slots that might be overlapping...
for ak in owner.ak_set.all(): for ak in owner.ak_set.all():
# ...find overlapping slots... # ...find overlapping slots...
if ak != instance.ak: if ak != instance.ak:
for other_slot in ak.akslot_set.filter(start__isnull=False): for other_slot in ak.akslot_set.filter(start__isnull=False):
if instance.overlaps(other_slot): if instance.overlaps(other_slot):
# ...and create a temporary violation if necessary... # ...and create a temporary violation if necessary...
c = ConstraintViolation( c = ConstraintViolation(
type=violation_type, type=violation_type,
level=ConstraintViolation.ViolationLevel.VIOLATION, level=ConstraintViolation.ViolationLevel.VIOLATION,
event=event, event=event,
ak_owner=owner ak_owner=owner
) )
c.aks_tmp.add(instance.ak) c.aks_tmp.add(instance.ak)
c.aks_tmp.add(other_slot.ak) c.aks_tmp.add(other_slot.ak)
c.ak_slots_tmp.add(instance) c.ak_slots_tmp.add(instance)
c.ak_slots_tmp.add(other_slot) c.ak_slots_tmp.add(other_slot)
new_violations.append(c) new_violations.append(c)
print(f"{owner} has the following conflicts: {new_violations}") print(f"{owner} has the following conflicts: {new_violations}")
# ... and compare to/update list of existing violations of this type # ... and compare to/update list of existing violations of this type
# belonging to the AK that was recently changed (important!) # belonging to the AK that was recently changed (important!)
...@@ -339,21 +340,22 @@ def akslot_changed_handler(sender, instance: AKSlot, **kwargs): ...@@ -339,21 +340,22 @@ def akslot_changed_handler(sender, instance: AKSlot, **kwargs):
violation_type = ConstraintViolation.ViolationType.AK_SLOT_COLLISION violation_type = ConstraintViolation.ViolationType.AK_SLOT_COLLISION
new_violations = [] new_violations = []
# For all other slots of this ak... if instance.start:
for other_slot in instance.ak.akslot_set.filter(start__isnull=False): # For all other slots of this ak...
if other_slot != instance: for other_slot in instance.ak.akslot_set.filter(start__isnull=False):
# ... find overlapping slots... if other_slot != instance:
if instance.overlaps(other_slot): # ... find overlapping slots...
# ...and create a temporary violation if necessary... if instance.overlaps(other_slot):
c = ConstraintViolation( # ...and create a temporary violation if necessary...
type=violation_type, c = ConstraintViolation(
level=ConstraintViolation.ViolationLevel.WARNING, type=violation_type,
event=event, level=ConstraintViolation.ViolationLevel.WARNING,
) event=event,
c.aks_tmp.add(instance.ak) )
c.ak_slots_tmp.add(instance) c.aks_tmp.add(instance.ak)
c.ak_slots_tmp.add(other_slot) c.ak_slots_tmp.add(instance)
new_violations.append(c) c.ak_slots_tmp.add(other_slot)
new_violations.append(c)
# ... and compare to/update list of existing violations of this type # ... and compare to/update list of existing violations of this type
# belonging to the slot that was recently changed (important!) # belonging to the slot that was recently changed (important!)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment