Add Check-in / Ice / Banquet scan modes

- Ice mode: prepaid ice bags (Ice Total / Ice Redeemed columns) redeemed
  independently of ticket check-ins; grab all bags at once or some now.
- Banquet mode: donor total (online + offline) looked up by the ticket's
  email via the Donors Master List, with a manual email override. New
  DonorService + POST /api/banquet.
- Redeem generalized over a resource (tickets|ice); audit records ice actions.
- App gains a mode selector; webhook maps ice_bags (defaults to
  ICE_BAGS_DEFAULT when only a boolean ice option is present).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-08 04:07:51 +00:00
parent b36d63a6a4
commit d293e53ee6
15 changed files with 587 additions and 125 deletions

View file

@ -12,6 +12,14 @@ NOCODB_TABLE_ID=
# Optional: table ID of "2026 Ticket Audit Logs". If unset, audit logging is skipped.
NOCODB_AUDIT_TABLE_ID=
# Banquet mode — donor tables (optional; if the master list is unset, banquet is disabled)
NOCODB_DONORS_TABLE_ID=
NOCODB_DONOR_ONLINE_TABLE_ID=
NOCODB_DONOR_OFFLINE_TABLE_ID=
# Ice bags granted when a purchase includes ice but the webhook sends only a boolean
ICE_BAGS_DEFAULT=3
# MailerSend
MAILERSEND_API_TOKEN=
MAIL_FROM_EMAIL=tickets@beartariacampgrounds.com