Financial correctness (donation-leg model):
- Donations are no longer mutated when assigned to a registration; assignment now
creates an immutable "leg" record referencing the original donation instead.
- Fixed several places where money was double-counted once a donation was partially
or fully assigned (Payments, Revenue summary, Cashup reconciliation, Finance
report, Profit report, Master Orders, Revenue Detailed).
- Payments now record who recorded them (recordedBy), separate from who they're for.
Cashup:
- Per-user cash denomination counting (optional, any time) replaces the single
event-wide manual entry; the event's cash actual is the live sum of these counts.
- New "Payment accountability by staff member" breakdown across all methods, and a
read-only "Report" tab that opens automatically once an event is closed.
Reports page redesign:
- New shell: sidebar of universal filters (events, date range, past/inactive/closed
toggles), searchable/categorized report grid, and a popup viewer with
Print/Email/Excel/WhatsApp actions plus an in-app Reporting Guide.
- Visual pass: colored stat tiles and bar charts on most reports, matching mockups.
- PDF exports (download/Print/Email/WhatsApp) now share a branded design mirroring
the web report — colored header, stat tiles, bar chart, highlighted totals.
- Excel export now produces a styled .xlsx (via exceljs) instead of a plain CSV.
- Master Orders' "Donations made" table is now included in every export channel.
Bug fixes discovered while testing exports:
- Report emails now go through the shared, DB-configurable mail utility instead of
a one-off transporter that ignored Site Settings SMTP config.
- WhatsApp report sends now surface the actual WAWP API error and auto-recover a
disconnected session, instead of a bare axios status-code message.
Also: Admin-editable notification preference, richer Admin Registrations dashboard,
{{payment.link}} placeholder for Email/WhatsApp Attendees, and background
email/WhatsApp attendee sending.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
40 lines
1.1 KiB
JSON
40 lines
1.1 KiB
JSON
{
|
|
"name": "event-management-backend",
|
|
"version": "1.3.2",
|
|
"description": "Event Management System Backend",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"dev": "nodemon src/index.js",
|
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
"postinstall": "prisma generate",
|
|
"prisma:generate": "prisma generate",
|
|
"prisma:deploy": "prisma migrate deploy && prisma generate",
|
|
"prisma:status": "prisma migrate status",
|
|
"prisma:reset": "prisma migrate reset --force",
|
|
"migrate:env-to-db": "node scripts/migrate-env-to-db.js",
|
|
"migrate:env-to-db:dry": "node scripts/migrate-env-to-db.js --dry-run"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/client": "^5.4.2",
|
|
"axios": "^1.11.0",
|
|
"bcryptjs": "^2.4.3",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.3.1",
|
|
"exceljs": "^4.4.0",
|
|
"express": "^4.18.2",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"multer": "^2.0.2",
|
|
"node-fetch": "^2.7.0",
|
|
"nodemailer": "^7.0.5",
|
|
"pdfkit": "^0.17.1",
|
|
"qrcode": "^1.5.4",
|
|
"raw-body": "^3.0.0",
|
|
"uuid": "^9.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"nodemon": "^3.0.1",
|
|
"prisma": "^5.4.2"
|
|
}
|
|
}
|