Add allow_self option to PostShiftConstraint and PreShiftConstraint for flexible shift assignment

This commit is contained in:
Ross
2025-12-08 17:47:19 +00:00
parent 3f4d8068eb
commit 4a8c478a73
3 changed files with 47 additions and 7 deletions
+10 -2
View File
@@ -93,11 +93,13 @@ class PreShiftConstraint(BaseShiftConstraint):
days: Any = None
ignore_shifts: List[str] = []
exclude_days: List[str] = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
allow_self: bool = True
class PostShiftConstraint(BaseShiftConstraint):
days: Any = None
ignore_shifts: List[str] = []
exclude_days: List[str] = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
allow_self: bool = True
class BalanceAcrossGroupsConstraint(BaseShiftConstraint):
""""""
@@ -2932,7 +2934,10 @@ class RotaBuilder(object):
PreShiftConstraint
):
constraint = constraint_shift.get_constraint(PreShiftConstraint)
ignore_shifts = constraint.ignore_shifts + [constraint_shift.name]
if constraint.allow_self:
ignore_shifts = constraint.ignore_shifts + [constraint_shift.name]
else:
ignore_shifts = constraint.ignore_shifts
if week not in constraint.weeks:
continue
for n in range(0, constraint.days):
@@ -2969,7 +2974,10 @@ class RotaBuilder(object):
PostShiftConstraint
):
constraint = constraint_shift.get_constraint(PostShiftConstraint)
ignore_shifts = constraint.ignore_shifts + [constraint_shift.name]
if constraint.allow_self:
ignore_shifts = constraint.ignore_shifts + [constraint_shift.name]
else:
ignore_shifts = constraint.ignore_shifts
if week not in constraint.weeks:
continue
for n in range(0, constraint.days):