.
This commit is contained in:
+50
-1
@@ -180,6 +180,53 @@ def load_workers():
|
||||
print(rota_b_assignments)
|
||||
# You can now use rota_b_assignments as needed
|
||||
|
||||
# --- Load prior allocations (targets) from CSV ---
|
||||
priors_path = "cons/sep2025priors.csv"
|
||||
priors_map = {}
|
||||
try:
|
||||
priors_df = pd.read_csv(priors_path)
|
||||
for _, prow in priors_df.iterrows():
|
||||
initial = str(prow.get("Worker", "")).strip()
|
||||
if not initial or initial.lower() == "nan":
|
||||
continue
|
||||
prev = {}
|
||||
# expected columns: oncall, twilight, weekend
|
||||
for col in ("oncall", "twilight", "weekend"):
|
||||
raw = prow.get(col, "")
|
||||
if pd.isna(raw) or raw == "" or str(raw).strip() in ("-", "nan"):
|
||||
continue
|
||||
s = str(raw).strip()
|
||||
# Expect formats like: '4 (2.50)' or '3 (2.86)'
|
||||
worked = 0.0
|
||||
allocated = 0.0
|
||||
if "(" in s:
|
||||
try:
|
||||
worked_part = s.split("(")[0].strip()
|
||||
worked = float(worked_part)
|
||||
except Exception:
|
||||
worked = 0.0
|
||||
try:
|
||||
inner = s.split("(", 1)[1].split(")", 1)[0]
|
||||
allocated = float(inner.strip())
|
||||
except Exception:
|
||||
allocated = worked
|
||||
else:
|
||||
try:
|
||||
allocated = float(s)
|
||||
except Exception:
|
||||
continue
|
||||
worked = 0.0
|
||||
|
||||
# store as tuple (worked, allocated) as expected by RotaBuilder
|
||||
prev[col] = (worked, allocated)
|
||||
|
||||
if prev:
|
||||
priors_map[initial] = prev
|
||||
except FileNotFoundError:
|
||||
print(f"Prior allocations file not found: {priors_path}")
|
||||
except Exception as e:
|
||||
print(f"Error reading prior allocations: {e}")
|
||||
|
||||
# --- Example: Print the first few rows of each sheet ---
|
||||
#print("Days sheet:")
|
||||
#print(days_df.head())
|
||||
@@ -257,6 +304,7 @@ def load_workers():
|
||||
) for req in work_requests if req["worker"] == worker
|
||||
],
|
||||
nwds=non_working_days,
|
||||
previous_shifts=priors_map.get(initial, {}),
|
||||
)
|
||||
|
||||
#if initial == "L1":
|
||||
@@ -336,12 +384,13 @@ def main(
|
||||
rota_start_date,
|
||||
weeks_to_rota=weeks,
|
||||
balance_offset_modifier=bom,
|
||||
use_previous_shifts=True,
|
||||
name="cons rota feb 2026",
|
||||
allow_force_assignment_with_leave_conflict=True,
|
||||
constraint_options=RotaConstraintOptions(
|
||||
balance_weekends=True,
|
||||
max_shifts_per_week=6,
|
||||
max_days_per_week_block=[(4, 2), (4, 3)],
|
||||
max_days_per_week_block=[(4, 2), (4, 4)],
|
||||
balance_weekend_days=True,
|
||||
#weekend_day_hard_max_deviation=2,
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user