Add guard against division by zero in target_shifts calculation with warning logging

This commit is contained in:
Ross
2025-12-15 20:51:19 +00:00
parent b0af2daca4
commit 00c737becf
+18 -5
View File
@@ -2007,11 +2007,24 @@ class RotaBuilder(object):
for i in shift.sites
)
target_shifts = (
total_shifts
/ full_time_equivalent_joined
* worker.get_fte(shift=shift.name)
)
# Guard against division by zero: if no full-time
# equivalent is available for the shift's sites the
# denominator may be zero (for example when all site
# FTEs are 0). In that case emit a warning and set the
# target to 0 rather than raising an exception.
if not full_time_equivalent_joined:
# avoid ZeroDivisionError
self.add_warning(
"Zero FTE for sites",
f"full_time_equivalent sum is zero for shift {shift.name}; setting target_shifts=0 for worker {worker.name}",
)
target_shifts = 0
else:
target_shifts = (
total_shifts
/ full_time_equivalent_joined
* worker.get_fte(shift=shift.name)
)
if self.use_previous_shifts:
if shift.name in worker.previous_shifts: