Accept a Check & Other Ledger Entries

Money taken outside the portal — a check, cash, Zelle — is recorded from the Charges and Payments section of the student’s edit page (/admin/student_edit.php?id=N).

What the section shows

  • Current balance — the student’s all-time balance (SUM(debits) − SUM(credits) across every semester): “$X due”, “$X credit”, or “Paid in full.”
  • A line-item table for the currently selected semester: date, type, description, charge, credit.
  • If the selected semester’s entries don’t add up to the all-time balance, an “Earlier charges and payments” disclosure lists everything else — the balance is always explainable from what’s on screen.

Three buttons open modals:

Record Payment

For a check or cash: amount, date (defaults to today — backdate it to when the check actually arrived), and a description like “Check #123”. Lands as a credit of entry type payment on the given date.

Apply Scholarship

Amount and description (“Sliding scale”). Lands as a credit of entry type scholarship_application, always dated today.

Custom Ledger Entry

An adjustment with an explanation — a recital opt-out credit, a make-up charge. The admin picks credit (reduces balance) or charge (increases balance), an amount, and a required description; it lands as entry type other, dated today.

One custom entry to know about: the Guitar Ensemble fee is never posted automatically. Confirming a reservation charges registration, lessons, recital, and installment fees — the ensemble fee exists on the semester (and in the registration quote) but has no automatic posting, so it must be entered by hand as a custom charge.

What happens on save

Each modal posts to /admin/ledger_entry_eval.php, which validates (amount must be positive; the date must parse; custom entries require a description) and inserts exactly one ledger_entries row attributed to the admin. There is no dedupe — double-submitting a modal records the entry twice, and fixing that means a counter-entry, since ledger rows are never deleted.

Because every balance in the system is derived from the ledger, the effect is immediate everywhere on next page load: the student’s balance header, the parent’s Balance & Payments page, and the color of the student’s cell on the Semester Schedule grid.

Which semester the entry lands on

The entry is filed against the admin’s currently selected semester (the semester picker in the top bar) — not automatically against the term the student actually owes for. When no semester exists it’s filed with no semester, which groups under “Other charges” and is never counted toward the “behind on payments” rule. Check the selector before recording a payment meant for a specific term; a surplus in one term does roll forward to the next, so a payment filed one term early still nets out, but the per-term history reads oddly.