Event finance - Finance tab on the event page: P&L summary with a revenue-to-result waterfall, costs and other income in one ledger, and the partner split with payouts. Lifecycle stepper (Selling, Adding costs, Ready to close, Finalized) with what is left to do; closing the books goes through a checklist dialog that freezes the numbers. - Expense modal shows only the fields each calculation type needs, a live preview with the event's real counts, and a category suggested from the description. Date inputs follow the UI language. - Global Finance page: profit per event with outliers clipped and labelled, and a "Ready to close" list of past events whose books are still open. - Calculation service (integer PYG, basis points) with pinned regression scenarios; PYG formatting centralised in lib/money with locale-aware separators. Event team permissions - Per-event members with role presets and requireEventPermission; the header stat "Confirmed" is relabelled "Not checked in yet", which is what it counts. Public sales state - One sales state (online, door, sold out, ended, external, cancelled) for the event page, listings and JSON-LD, with the door price and tenders shown only while people can still pay at the door. Frontend unit tests run with vitest (npm test in frontend/). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
780 B
TypeScript
24 lines
780 B
TypeScript
'use client';
|
|
|
|
import { useParams } from 'next/navigation';
|
|
import { PrivacyProvider } from '@/context/PrivacyContext';
|
|
import { EventDetailView } from '@/app/admin/events/[id]/_components/EventDetailView';
|
|
|
|
/**
|
|
* The single event page for team members (staff / collaborators / co-managers
|
|
* added in the event's Team tab). Same view as the admin page; tabs and data
|
|
* follow the member's permissions on this event only.
|
|
*/
|
|
export default function MemberEventPage() {
|
|
const params = useParams();
|
|
return (
|
|
<PrivacyProvider>
|
|
<div className="section-padding min-h-[70vh]">
|
|
<div className="container-page">
|
|
<EventDetailView eventId={params.id as string} backHref="/dashboard?tab=events" />
|
|
</div>
|
|
</div>
|
|
</PrivacyProvider>
|
|
);
|
|
}
|