stepolan commited on
Commit
bd920df
·
1 Parent(s): ce5f3de

Add Load Plan dropdown to sidebar — loads saved plan params for live editing

Browse files
Files changed (1) hide show
  1. app.py +57 -0
app.py CHANGED
@@ -279,6 +279,63 @@ apps_script_url = "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec"''', l
279
  # ---- Sidebar: Plan Parameters ----
280
 
281
  st.sidebar.header("Plan Parameters")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  st.sidebar.caption("Adjust these to model different comp plan structures. Changes update results instantly.")
283
 
284
  with st.sidebar.expander("Compensation Structure", expanded=True):
 
279
  # ---- Sidebar: Plan Parameters ----
280
 
281
  st.sidebar.header("Plan Parameters")
282
+
283
+ # --- Load a saved plan into the sidebar ---
284
+ saved_plans = load_plans() if sheet_ok else {}
285
+ load_options = ["— New plan —"] + list(saved_plans.keys())
286
+ load_choice = st.sidebar.selectbox("Load a saved plan", load_options, key="load_plan",
287
+ help="Select a saved plan to load its parameters into the sidebar for editing")
288
+ if load_choice != "— New plan —" and load_choice in saved_plans:
289
+ if st.sidebar.button("Load into sidebar"):
290
+ plan = saved_plans[load_choice]
291
+ p = plan.get("params", {})
292
+ # Set session state for all sidebar widgets
293
+ st.session_state["base"] = p.get("base_salary", 150_000)
294
+ st.session_state["quota"] = p.get("annual_quota", 1_250_000)
295
+ st.session_state["draw"] = p.get("draw_amount", 0)
296
+ st.session_state["draw_months"] = p.get("draw_months", 12)
297
+ st.session_state["draw_rec"] = p.get("draw_recoverable", False)
298
+ st.session_state["cogs_pct"] = p.get("cogs_pct", 20.0)
299
+ st.session_state["other_cost"] = p.get("other_cost_per_rep", 20_000)
300
+ # Commission mode
301
+ st.session_state["comm_mode"] = plan.get("commission_mode", "Attainment-based rates")
302
+ st.session_state["retroactive"] = plan.get("retroactive", False)
303
+ # Ramp
304
+ ramp = p.get("ramp_pcts", [])
305
+ st.session_state["ramp_months"] = len(ramp)
306
+ for i, pct in enumerate(ramp):
307
+ st.session_state[f"ramp_{i}"] = int(pct)
308
+ # Commission tiers
309
+ tiers = p.get("commission_tiers") or []
310
+ if tiers:
311
+ st.session_state["num_tiers"] = len(tiers)
312
+ for i, tier in enumerate(tiers):
313
+ if tier[0] is not None:
314
+ st.session_state[f"at_u_{i}"] = int(tier[0])
315
+ st.session_state[f"at_r_{i}"] = float(tier[1])
316
+ # Deal-size tiers
317
+ deal_tiers = p.get("deal_rate_tiers") or []
318
+ if deal_tiers:
319
+ st.session_state["num_deal_tiers"] = len(deal_tiers)
320
+ for i, tier in enumerate(deal_tiers):
321
+ st.session_state[f"dt_mn_{i}"] = int(tier[0])
322
+ if tier[1] is not None:
323
+ st.session_state[f"dt_mx_{i}"] = int(tier[1])
324
+ st.session_state[f"dt_rt_{i}"] = float(tier[2])
325
+ # Accelerators
326
+ accels = p.get("accel_tiers") or []
327
+ if accels:
328
+ st.session_state["num_accels"] = len(accels)
329
+ for i, tier in enumerate(accels):
330
+ if tier[0] is not None:
331
+ st.session_state[f"ac_u_{i}"] = int(tier[0])
332
+ st.session_state[f"ac_m_{i}"] = float(tier[1])
333
+ # Months employed
334
+ st.session_state["months_emp"] = plan.get("months_employed", 12)
335
+ # Author
336
+ st.session_state["author"] = plan.get("author", "")
337
+ st.rerun()
338
+
339
  st.sidebar.caption("Adjust these to model different comp plan structures. Changes update results instantly.")
340
 
341
  with st.sidebar.expander("Compensation Structure", expanded=True):