READY page: the weekly worship checklist, checked against Planning Center #1

Merged
christian merged 2 commits from ready-page into main 2026-10-14 20:47:13 -04:00
7 changed files with 6 additions and 38 deletions
Showing only changes of commit bf128e1bad - Show all commits
+3 -4
View File
@@ -106,7 +106,7 @@ HyperDeck is recording). **STATUS PAGE** (bottom left) goes back.
|--------|-------|-------|-------|-------|-------|
| row 0 (Ableton) | TRACKS | FOH MIX | BOH MIX (tap) | LIGHTS | MIDI |
| row 1 (ProP / Resolume) | PROP | TIMECODE | BKGDS | LED CROSS | |
| row 2 (backstage, stage) | LINEUP TV | | MICS (tap) | STAGE (tap) | |
| row 2 (backstage) | LINEUP TV | | | | |
| row 3 (outgoing) | TRACKS OUT | PROP OUT | | | |
The READY key at row 3 col 7 (and the one on the status page) shows how many keys still have something to do and
@@ -116,9 +116,8 @@ the first of them.
still missing turns **blinking red**. A song that is not mixed stays amber, because it is only a guess. These keys
are not part of ALL, so an unfinished checklist on a Tuesday never turns the page-number keys red.
**Tap keys** (BOH MIX, MICS, STAGE) are things only a person can see. Tap once when it is done; the key
shows `DONE THU 14:02`. Tap again to take it back. Everything resets on Monday at midnight. MICS also says which mics
this weekend needs, from Planning Center (`4 VOX MC TIM`).
**BOH MIX** is a tap key: only a person can judge it. Tap once when it is done; the key shows `DONE THU 14:02`.
Tap again to take it back. It resets on Monday at midnight.
**Hold any key for 2 s** to fix what can be fixed, or to look again now if there is no fix. **Hold READY** to fix
everything on the page at once.
-30
View File
@@ -1186,36 +1186,6 @@
}
]
},
{
"id": "rd_mics",
"label": "MICS",
"pos": [
2,
3
],
"checks": [
{
"type": "ready_manual",
"item": "mics",
"msg": "TAP WHEN SET"
}
]
},
{
"id": "rd_stage",
"label": "STAGE",
"pos": [
2,
4
],
"checks": [
{
"type": "ready_manual",
"item": "stage",
"msg": "HELIX, RISERS: TAP"
}
]
},
{
"id": "rd_trk_out",
"label": "TRACKS OUT",
Binary file not shown.
+1 -1
View File
@@ -316,7 +316,7 @@ field("ready.due", "list", [], "From when gaps are red instead of amber.", "Read
field("ready.due[].days", "days", None, "", "Ready", required=True)
field("ready.due[].start", "hhmm", None, "", "Ready", required=True)
field("ready.due[].end", "hhmm", None, "", "Ready", required=True)
field("ready.reset_day", "enum", "mon", "Taps (BOH mix, mics, stage) count from midnight on this day.", "Ready",
field("ready.reset_day", "enum", "mon", "Taps (BOH mix) count from midnight on this day.", "Ready",
options=list(sp.DAYS))
field("ready.pco_credentials", "path", "~/Library/Application Support/ProdDash/modules.json", "ProdDash's settings "
"file, which holds the Planning Center login.", "Ready", advanced=True)
+1 -1
View File
@@ -506,7 +506,7 @@
const snap = await api("/api/snapshot").catch(() => ({}));
const r = snap.ready || {};
const plan = r.plan ? `<p class="small muted">Plan: ${esc(r.plan.title || "")} ${esc(r.plan.dates || "")}${r.time ? ` · looked ${esc(new Date(r.time * 1000).toLocaleTimeString())}` : ""}</p>` : `<p class="small muted">Not looked yet.</p>`;
if (i < 0) return `<div class="card"><h2 style="margin-top:4px">The weekly checklist</h2>${plan}<p class="small">Amber: still to do. Blinking red: still missing once it is due (${esc(((c.ready || {}).due || []).map((w) => w.days.join("/") + " " + w.start + "-" + w.end).join(", "))}). Tap keys (BOH MIX, MICS, STAGE) are tapped done on the deck and reset every ${esc((c.ready || {}).reset_day || "mon")}. Hold any key ${esc(hold)} to fix it or look again; hold READY to fix everything.</p><p class="small muted">Click a key to see what it checks and why it is amber or red.</p></div>`;
if (i < 0) return `<div class="card"><h2 style="margin-top:4px">The weekly checklist</h2>${plan}<p class="small">Amber: still to do. Blinking red: still missing once it is due (${esc(((c.ready || {}).due || []).map((w) => w.days.join("/") + " " + w.start + "-" + w.end).join(", "))}). BOH MIX is tapped done on the deck and reset every ${esc((c.ready || {}).reset_day || "mon")}. Hold any key ${esc(hold)} to fix it or look again; hold READY to fix everything.</p><p class="small muted">Click a key to see what it checks and why it is amber or red.</p></div>`;
const k = c.ready_page.keys[i], chk = (k.checks || [])[0] || {};
const item = r.items && chk.item ? r.items[chk.item] : null;
const fix = chk.fix && c.fixes[chk.fix];
+1 -1
View File
@@ -553,7 +553,7 @@ def check_ready(chk, snap, ctx):
def check_ready_manual(chk, snap, ctx):
"""A checklist line only a person can see (BOH mix, stage): a tap marks it done for the week."""
"""A checklist line only a person can judge (BOH mix): a tap marks it done for the week."""
done = ctx.get("ready_done", {}).get(chk["item"])
if done:
return [("done", Result(OK, info="DONE " + datetime.fromtimestamp(done).strftime("%a %H:%M").upper()))]
-1
View File
@@ -354,7 +354,6 @@ class TestWatchdog(unittest.TestCase):
self.assertEqual(tiles["rd_trk_out"]["x"], "TRACKS OUT\nNOT SENT SC")
self.assertEqual(tiles["rd_trk_out"]["b"], sp.COLORS["warn"][0][0])
self.assertEqual(tiles["rd_boh"]["x"], "BOH MIX\nTAP WHEN DONE")
self.assertEqual(tiles["rd_mics"]["x"], "MICS\n2 VOX MC TIM\nTAP WHEN SET")
self.assertEqual(tiles["rd_cross"]["b"], sp.COLORS["ok"][0][0])
self.assertTrue(tiles["ready"]["x"].startswith("READY\n"))
self.assertIn("TO DO", tiles["ready"]["x"])