mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 07:13:12 +00:00
191 lines
7.8 KiB
C#
191 lines
7.8 KiB
C#
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<string>? Dispatchers { get; set; }
|
||
public bool MyWorkOrders { get; set; }
|
||
public List<WorkOrderType>? Types { get; set; }
|
||
/// <summary>When true, keep only past-due (isPastDue) rows. Combined with Types via AND.</summary>
|
||
public bool Overdue { get; set; }
|
||
public string? Search { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// Scheduled-in-week counts for GET /board. <see cref="Total"/> is the week
|
||
/// match before the bar search filter; <see cref="Returned"/> is after it.
|
||
/// Undated work orders are not included.
|
||
/// </summary>
|
||
public class WorkOrderBoardCountsDto
|
||
{
|
||
public int Returned { get; set; }
|
||
public int Total { get; set; }
|
||
}
|
||
|
||
public class WorkOrderUpliftSummaryDto
|
||
{
|
||
public bool HasUplift { get; set; }
|
||
public int PendingCount { get; set; }
|
||
public string? PrimaryStatus { get; set; }
|
||
public decimal? Amount { get; set; }
|
||
}
|
||
|
||
public class WorkOrderFrozenSiteDto
|
||
{
|
||
public string? Code { get; set; }
|
||
public string? Label { get; set; }
|
||
public string? Address { get; set; }
|
||
public string? City { get; set; }
|
||
public string? State { get; set; }
|
||
public string? Zip { get; set; }
|
||
public string? Phone { get; set; }
|
||
public string? Email { get; set; }
|
||
public string? Maps { get; set; }
|
||
}
|
||
|
||
public class WorkOrderFrozenCompanyDto
|
||
{
|
||
public string? Name { get; set; }
|
||
public string? ContactName { get; set; }
|
||
public bool? TechnicianAssigned { get; set; }
|
||
public string? Address { get; set; }
|
||
public string? City { get; set; }
|
||
public string? State { get; set; }
|
||
public string? Zip { get; set; }
|
||
public string? Phone { get; set; }
|
||
public string? Email { get; set; }
|
||
public string? Maps { get; set; }
|
||
}
|
||
|
||
public class WorkOrderFrozenPocDto
|
||
{
|
||
public List<WorkOrderFrozenPocContactDto> Contacts { get; set; } = new();
|
||
public string? Notes { get; set; }
|
||
}
|
||
|
||
public class WorkOrderFrozenPocContactDto
|
||
{
|
||
public string? Name { get; set; }
|
||
public string? Phone { 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 bool AvetaRequired { get; set; }
|
||
public bool HasAvetaDocument { get; set; }
|
||
public DateOnly? OriginalDate { get; set; }
|
||
public DateOnly? OriginalWeek { get; set; }
|
||
public WorkOrderType? WorkOrderType { get; set; }
|
||
public int? ServiceId { get; set; }
|
||
public string? ServiceNameSnapshot { 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; }
|
||
/// <summary>SH-190: a manual WO-level POC override is present (locked away from the Site).</summary>
|
||
public bool PocCustomized { get; set; }
|
||
public List<WorkOrderAdditionalContactDto>? AdditionalContacts { get; set; }
|
||
public WorkOrderFrozenSiteDto? FrozenSite { get; set; }
|
||
public WorkOrderFrozenCompanyDto? FrozenCompany { get; set; }
|
||
public WorkOrderFrozenPocDto? FrozenPoc { 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 bool? TechnicianAssigned { get; set; }
|
||
/// <summary>
|
||
/// Primary dispatch status. Inactive statuses are not a live company assignment.
|
||
/// </summary>
|
||
public string? PrimaryDispatchStatus { 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<string>? ExtraServices { get; set; }
|
||
public DocStatus? DocStatus { get; set; }
|
||
/// <summary>Live photo/video/document count for the board CompDoc cell (excludes soft-deleted).</summary>
|
||
public int MediaCount { get; set; }
|
||
public DateTime? CompletedDate { get; set; }
|
||
/// <summary>Board flag color (#RRGGBB). Null = no flag. Distinct from Color (dispatcher avatar).</summary>
|
||
public string? FlagColor { get; set; }
|
||
/// <summary>Severity 1–5 for Emergency/Reactive. Null when unset or not applicable.</summary>
|
||
public int? Severity { get; set; }
|
||
public int? PrimaryDispatchId { get; set; }
|
||
public byte[]? RowVersion { get; set; }
|
||
public byte[]? DispatchRowVersion { get; set; }
|
||
/// <summary>
|
||
/// 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.
|
||
/// </summary>
|
||
public int PendingUpliftCount { get; set; }
|
||
/// <summary>SH-196: board/search uplift column contract.</summary>
|
||
public WorkOrderUpliftSummaryDto? UpliftSummary { get; set; }
|
||
}
|
||
|
||
public class WorkOrderBoardPatchRequestDto
|
||
{
|
||
public string Field { get; set; } = "";
|
||
public string? Value { get; set; }
|
||
/// <summary>Explicit technician-selection state, accepted only with a vendorId patch.</summary>
|
||
public bool? TechnicianAssigned { 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();
|
||
/// <summary>
|
||
/// Always empty on the weekly board. Undated rows are served by GET /board/search.
|
||
/// Kept so existing clients can keep reading the field.
|
||
/// </summary>
|
||
public List<WorkOrderBoardRowDto> Unscheduled { get; set; } = new();
|
||
public List<WorkOrderBoardRowDto> 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; }
|
||
}
|
||
}
|