Add event report dashboard, slide-out drawer, in-app comp portal + creator tracking
All checks were successful
Build Android APK / build-apk (push) Successful in 56m36s

- Reporting: GET /api/stats aggregates check-in progress, ice, ticket types,
  people breakdown, add-ons/donors, gate-crew leaderboard (from audit),
  comp tickets by creator, and a by-hour check-in timeline. New /stats screen.
- Slide-out drawer (custom RN Animated, no new native deps) replaces per-screen
  header links; available on every main screen via a hamburger.
- In-app comp portal (/comp), password-gated like /crush33, reusing the portal
  endpoints; records the issuing gate-staff name (Created By column) and reports
  comps per creator.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-13 17:30:18 +00:00
parent 251edfce42
commit 43fddec286
15 changed files with 979 additions and 21 deletions

View file

@ -25,6 +25,7 @@ export const COL = {
iceAccess: "Ice Access",
paymentMethod: "Payment Method",
ticketType: "Ticket Type", // "" for regular; Guest/Worker/Performer/Volunteer/Speaker for portal comps
createdBy: "Created By", // gate-staff name who issued a comp ticket (portal)
// Columns this system manages:
code: "Ticket Code",
@ -96,6 +97,7 @@ export interface TicketView {
name: string;
email: string;
ticketType: string; // "" for regular; Guest/Worker/... for special tickets
createdBy: string; // who issued a comp ticket
total: number;
redeemed: number;
remaining: number;
@ -124,6 +126,7 @@ export function toView(rec: NocoRecord): TicketView {
name: String(rec[COL.name] ?? ""),
email: String(rec[COL.email] ?? ""),
ticketType: String(rec[COL.ticketType] ?? ""),
createdBy: String(rec[COL.createdBy] ?? ""),
total,
redeemed,
remaining: Math.max(0, total - redeemed),