using Data.SeaHavenIndustries.Enums; using SeaHaven.Services.Helpers; namespace SeaHaven.Services.DTOs { public class WorkOrderBoardQueryDto { public DateOnly WeekStart { get; set; } public DateOnly? WeekEnd { get; set; } public List? Dispatchers { get; set; } public bool MyWorkOrders { get; set; } public List? Types { get; set; } /// When true, include past-due (isPastDue) rows. Combined with Types via OR. public bool Overdue { get; set; } public string? Search { get; set; } } public class WorkOrderBoardCountsDto { public int Returned { get; set; } public int Total { get; set; } } public class WorkOrderBoardRowDto { public int Id { get; set; } public string? WoNumber { get; set; } public int RescheduleCount { get; set; } public int CarriedOver { get; set; } public bool IsAddOn { get; set; } public WorkOrderType? WorkOrderType { get; set; } public bool IsPastDue { get; set; } public string? SiteCode { get; set; } public string? LocationName { get; set; } public string? PocName { get; set; } public string? PocPhone { get; set; } public string? PocNotes { get; set; } public LifecycleStatus? LifecycleStatus { get; set; } public string? LifecycleStatusLabel { get; set; } public string? LegacyStatus { get; set; } public string? DispatcherId { get; set; } public string? DispatcherName { get; set; } public string? Initials { get; set; } public string? Color { get; set; } public DateTime? DueDate { get; set; } public DateTime? ScheduledDate { get; set; } public DateOnly? TargetWeek { get; set; } public bool? ScheduleWeekOnly { get; set; } public string? DayGroup { get; set; } public int? VendorId { get; set; } public string? VendorName { get; set; } public string? TechName { get; set; } public string? TechPhone { get; set; } public DateTime? ApptDate { get; set; } public string? ApptTime { get; set; } public string? Pm { get; set; } public string? ServiceNotes { get; set; } public List? ExtraServices { get; set; } public DocStatus? DocStatus { get; set; } public DateTime? CompletedDate { get; set; } /// Board flag color (#RRGGBB). Null = no flag. Distinct from Color (dispatcher avatar). public string? FlagColor { get; set; } public int? PrimaryDispatchId { get; set; } public byte[]? RowVersion { get; set; } public byte[]? DispatchRowVersion { get; set; } /// /// Count of uplift requests with status Pending across all dispatches tied to this work order (SH-188). /// Authoritative completion-gate signal for the board/search/detail row contract. /// public int PendingUpliftCount { get; set; } } public class WorkOrderBoardPatchRequestDto { public string Field { get; set; } = ""; public string? Value { get; set; } public string? WorkOrderVersion { get; set; } public string? DispatchVersion { get; set; } public int? PrimaryDispatchId { get; set; } } public class WorkOrderBoardConflictDto { public string Message { get; set; } = "The record was modified by another user. Refresh and retry."; public WorkOrderBoardRowDto? CurrentState { get; set; } } public class WorkOrderBoardValidationErrorDto { public string Code { get; set; } = ""; public string Message { get; set; } = ""; } public class WorkOrderBoardResponseDto { public DateOnly WeekStart { get; set; } public DateOnly WeekEnd { get; set; } public WorkOrderBoardCountsDto Counts { get; set; } = new(); public List Unscheduled { get; set; } = new(); public List Scheduled { get; set; } = new(); } public class DispatcherLookupDto { public string Id { get; set; } = ""; public string Name { get; set; } = ""; public string? Initials { get; set; } public string? Color { get; set; } } }