mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 03:40:56 +00:00
98 lines
2.6 KiB
TypeScript
98 lines
2.6 KiB
TypeScript
import { ApiPropertyOptional } from '@nestjs/swagger';
|
|
import { Type } from 'class-transformer';
|
|
import { IsInt, IsNumber, IsOptional, Max, Min } from 'class-validator';
|
|
|
|
export class UpdateTrainSchedulingGlobalRulesDto {
|
|
@ApiPropertyOptional({ example: 53 })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
maxWagonsPerTrain?: number;
|
|
|
|
@ApiPropertyOptional({ example: 3, description: 'Days before departure the import booking-window day falls on' })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(0)
|
|
importWindowLeadDays?: number;
|
|
|
|
@ApiPropertyOptional({ example: 24, description: 'Hours before departure an export booking becomes acceptable' })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
exportBookingLeadHours?: number;
|
|
|
|
@ApiPropertyOptional({ example: 8, description: 'Local EAT hour the import window opens each day' })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(0)
|
|
@Max(23)
|
|
windowOpenHour?: number;
|
|
|
|
@ApiPropertyOptional({
|
|
example: 17,
|
|
description:
|
|
'Local EAT hour the booking desk shuts each day; a not-yet-full window resumes next morning at windowOpenHour. Equal to windowOpenHour = 24-hour desk',
|
|
})
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(0)
|
|
@Max(23)
|
|
windowCloseHour?: number;
|
|
|
|
// Stored in hours. The UI enters this in minutes/hours/days and converts to
|
|
// hours before sending, so the floor is 1 minute (0.0166h) — not 15 min.
|
|
@ApiPropertyOptional({ example: 3 })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsNumber()
|
|
@Min(0.0166)
|
|
@Max(12)
|
|
windowDurationHours?: number;
|
|
|
|
@ApiPropertyOptional({ example: 30 })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(0)
|
|
docReviewMinutes?: number;
|
|
|
|
@ApiPropertyOptional({ example: 60 })
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
paymentWindowMinutes?: number;
|
|
|
|
// Booking-close offsets: minutes before departure the window shuts. The UI
|
|
// enters days/hours/minutes and converts to minutes. 0 or null clears the
|
|
// offset (close at departure). Nullable so it can be explicitly cleared.
|
|
@ApiPropertyOptional({
|
|
example: 180,
|
|
nullable: true,
|
|
description:
|
|
'Minutes before departure the IMPORT booking window closes; 0/null = close at departure',
|
|
})
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(0)
|
|
importCloseOffsetMinutes?: number | null;
|
|
|
|
@ApiPropertyOptional({
|
|
example: 1440,
|
|
nullable: true,
|
|
description:
|
|
'Minutes before departure the EXPORT booking window closes; 0/null = close at departure',
|
|
})
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(0)
|
|
exportCloseOffsetMinutes?: number | null;
|
|
}
|