View the Semester Schedule
/admin/schedule.php — the Schedule item in the top bar, and the page
admins land on. It shows the abstract weekly pattern for the selected
semester: what usually happens each week. (For a real week’s actual lessons,
see the calendar.)
The grid
One grid per class day, stacked — Saturdays on top, then on through the week — because each day has its own columns and its own hours.
- Columns are location–teacher pairs — the
semester_location_teachersrows for that day, grouped under location headers in their import order. A Saturday-only teacher has no Tuesday column, and a Saturday-only location does not appear in the Tuesday grid at all. No columns yet means no grid: “Import location teachers to build the grid.” - Rows are 30-minute slots over that day’s real opening hours from the class-date calendar (9:00 am–4:30 pm when there are no dates yet, widened automatically to fit whatever is booked). A longer booking spans rows.
- Cells hold a reservation (student name + status), a hold block (title
- “Held”, grey diagonal hatch), or nothing. An accidental double-booking renders both occupants on a red hatch so nothing is ever hidden.
On narrower screens the grid condenses (short names) and pages by location, with a jump-to-teacher select on phones. Hovering any cell shows its full context (“SA 10:00 am · 30 min · Marisol Vega · Bronx Community College”).
The color code
The colors carry meaning and are locked by the design spec:
| Cell state | Appearance |
|---|---|
| Pending reach out | White, italic gray text |
| Pending confirmation | White, normal text |
| Confirmed — no outstanding balance | Pastel blue |
| Confirmed — full semester’s charges outstanding | Pastel yellow |
| Confirmed — about half outstanding (±50¢) | Pastel purple |
| Confirmed — any other outstanding balance | Dark blue, white text |
| Hold block | Grey with diagonal hatch |
The balance behind the color is the student’s all-time balance — a family that still owes from last semester shows a balance color here even if this term is paid, which is deliberate: the grid is the org’s collection radar.
Clicking a cell
- Empty cell → “Reserve this slot.” Location, teacher, day, and time are
prefilled from the cell; two tabs:
- Student Lesson — pick the student (typeahead), length (30/60/90/120), and starting status.
- Hold Block — a title (“What is this time for?”) and a length; the slot is then held on every class date this semester.
- Reservation → the edit modal. Shows the student’s outstanding balance, a link to their record, and two controls — Length (see Change a Lesson’s Duration) and Status — plus Delete reservation (“Future lessons will be removed; past lessons are kept”).
- Hold block → its edit modal — retitle, resize, or delete on the same future-only terms.
What confirming does
The status change is where the schedule meets the money
(ReservationManagement::setStatus):
- → Confirmed: the slot is re-checked for conflicts first (a week may have been hand-moved into it while this sat pending), then the semester’s lessons are generated — one per active class date at that location on that weekday, numbered 1..N by the calendar (holidays generate nothing; past dates are generated when confirming mid-semester) — and the semester’s charges post to the student’s ledger: registration, lessons (priced by duration; 90/120-minute lessons prorate off the 30-minute rate), recital fee, and installment plan fee, each skipped if zero or already live for this student+semester — so a second instrument never double-charges the per-student fees. (The guitar ensemble fee is not posted automatically — see ledger entries.)
- Confirmed → pending: future lessons are deleted (past ones stay) and the charges are reversed — offsetting credits described “Reversal: lessons (registration unconfirmed)”; the original debits remain for the audit trail. The reversal quietly declines if the student has already had a lesson this semester or still holds another confirmed reservation — in that case adjust the ledger by hand.
- Delete soft-deletes the reservation (terminal — it can’t be un-deleted), removes future lessons, and reverses charges on the same terms.
Edit mode: drag a weekly slot
Dragging is off by default so reading the schedule can’t move someone’s lesson by a trackpad brush. Press Edit, drag a reservation to any empty slot — another time, teacher, or location — and press Done. The mechanics and conflict rules are covered in Move a Lesson’s Time; a refused move shows the server’s reason and changes nothing.
