-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.py
More file actions
40 lines (36 loc) · 1.91 KB
/
Copy pathcli.py
File metadata and controls
40 lines (36 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# pods_tool/cli.py
from pathlib import Path
import pandas as pd
from core import normalize, packer, assigner, staffing, validate, export as exporter
from core.models import Config
from datetime import datetime
def run(day_fp, hour_fp, call_fp, agents_fp, outdir="exports"):
df_day = pd.read_excel(day_fp) if day_fp.endswith(("xlsx","xls")) else pd.read_csv(day_fp)
df_hour= pd.read_excel(hour_fp) if hour_fp.endswith(("xlsx","xls")) else pd.read_csv(hour_fp)
df_call= pd.read_excel(call_fp) if call_fp.endswith(("xlsx","xls")) else pd.read_csv(call_fp)
df_agents = pd.read_excel(agents_fp) if agents_fp.endswith(("xlsx","xls")) else pd.read_csv(agents_fp)
cfg = Config()
msps = normalize.calculate_msp_metrics(df_day, df_hour, df_call, cfg)
agents = normalize.normalize_agents(df_agents)
pods = packer.pack_msps_into_pods(msps, cfg)
assigns = assigner.assign_agents_to_pods(pods, agents, msps, cfg)
demand = staffing.calculate_hourly_demand(pods, msps)
hourly = staffing.calculate_staffing_gaps(demand, assigns, agents, cfg)
res = validate.run_validations(assigns, agents, pods, msps, cfg)
out_root = Path(outdir) / datetime.now().strftime("%Y%m%d_%H%M%S")
out_root.mkdir(parents=True, exist_ok=True)
exporter.export_summary_csvs(pods, assigns, hourly, out_root)
exporter.export_consolidated_workbook(pods, assigns, hourly, msps, agents, cfg, out_root / "pods_run.xlsx")
print(f"Exported to {out_root}")
for r in res:
print(f"[{r.status}] {r.check_name} - {r.message}")
if __name__ == "__main__":
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("--day", required=True)
ap.add_argument("--hour", required=True)
ap.add_argument("--call", required=True)
ap.add_argument("--agents", required=True)
ap.add_argument("--outdir", default="exports")
args = ap.parse_args()
run(args.day, args.hour, args.call, args.agents, args.outdir)