Add ignore_shifts parameter to PostShiftConstraint and PreShiftConstraint
This commit is contained in:
+1
-1
@@ -353,7 +353,7 @@ def main(
|
||||
#{"name": "pre", "options": 2},
|
||||
|
||||
#{"name": "post", "options": 1},
|
||||
PostShiftConstraint(days=1, start_date="2025-11-24"),
|
||||
PostShiftConstraint(days=1, start_date="2025-11-17", ignore_shifts=["oncall"]),
|
||||
],
|
||||
display_char="a",
|
||||
#force_assign_with=["oncall"]
|
||||
|
||||
+6
-2
@@ -96,9 +96,11 @@ class NightConstraint(BaseShiftConstraint):
|
||||
|
||||
class PreShiftConstraint(BaseShiftConstraint):
|
||||
days: Any = None
|
||||
ignore_shifts: List[str] = []
|
||||
|
||||
class PostShiftConstraint(BaseShiftConstraint):
|
||||
days: Any = None
|
||||
ignore_shifts: List[str] = []
|
||||
|
||||
class BalanceAcrossGroupsConstraint(BaseShiftConstraint):
|
||||
""""""
|
||||
@@ -2898,6 +2900,7 @@ class RotaBuilder(object):
|
||||
PreShiftConstraint
|
||||
):
|
||||
constraint = constraint_shift.get_constraint(PreShiftConstraint)
|
||||
ignore_shifts = constraint.ignore_shifts + [constraint_shift.name]
|
||||
if week not in constraint.weeks:
|
||||
continue
|
||||
for n in range(0, constraint.days):
|
||||
@@ -2922,7 +2925,7 @@ class RotaBuilder(object):
|
||||
for shiftname in self.get_shift_names_by_week_day(
|
||||
pre_map[n][1], pre_map[n][2]
|
||||
)
|
||||
if shiftname != constraint_shift.name
|
||||
if shiftname not in ignore_shifts
|
||||
for w in workers
|
||||
if w.site in constraint_shift.sites # Only workers who can work this shift
|
||||
)
|
||||
@@ -2932,6 +2935,7 @@ class RotaBuilder(object):
|
||||
PostShiftConstraint
|
||||
):
|
||||
constraint = constraint_shift.get_constraint(PostShiftConstraint)
|
||||
ignore_shifts = constraint.ignore_shifts + [constraint_shift.name]
|
||||
if week not in constraint.weeks:
|
||||
continue
|
||||
for n in range(0, constraint.days):
|
||||
@@ -2956,7 +2960,7 @@ class RotaBuilder(object):
|
||||
for shiftname in self.get_shift_names_by_week_day(
|
||||
post_map[n][1], post_map[n][2]
|
||||
)
|
||||
if shiftname != constraint_shift.name
|
||||
if shiftname not in ignore_shifts
|
||||
for w in workers
|
||||
if w.site in constraint_shift.sites # Only workers who can work this shift
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user