Add partySize field to VIP model (default 1) to track total people traveling with each VIP including entourage/handlers/spouses. Vehicle capacity checks now sum party sizes instead of just counting VIPs. Add masterEventId self-reference to ScheduleEvent for linking transport legs to shared itinerary items (events, meetings, meals). When creating a transport event, users can link it to a shared activity and VIPs auto-populate from the linked event. Changes: - Schema: partySize on VIP, masterEventId on ScheduleEvent - Backend: party-size-aware capacity checks, master/child event includes - VIP Form: party size input with helper text - Event Form: party-size capacity display, master event selector - Event List: party size in capacity and VIP names, master event badges - Command Center: all VIP names shown with party size indicators Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
47 lines
683 B
TypeScript
47 lines
683 B
TypeScript
import {
|
|
IsString,
|
|
IsEnum,
|
|
IsOptional,
|
|
IsBoolean,
|
|
IsDateString,
|
|
IsInt,
|
|
Min,
|
|
} from 'class-validator';
|
|
import { Department, ArrivalMode } from '@prisma/client';
|
|
|
|
export class CreateVipDto {
|
|
@IsString()
|
|
name: string;
|
|
|
|
@IsString()
|
|
@IsOptional()
|
|
organization?: string;
|
|
|
|
@IsEnum(Department)
|
|
department: Department;
|
|
|
|
@IsEnum(ArrivalMode)
|
|
arrivalMode: ArrivalMode;
|
|
|
|
@IsDateString()
|
|
@IsOptional()
|
|
expectedArrival?: string;
|
|
|
|
@IsBoolean()
|
|
@IsOptional()
|
|
airportPickup?: boolean;
|
|
|
|
@IsBoolean()
|
|
@IsOptional()
|
|
venueTransport?: boolean;
|
|
|
|
@IsInt()
|
|
@IsOptional()
|
|
@Min(1)
|
|
partySize?: number;
|
|
|
|
@IsString()
|
|
@IsOptional()
|
|
notes?: string;
|
|
}
|