mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-03 16:43:28 +00:00
Brings in dev's Phase 5 (PR #17) + vendor PRs (#25/#28/#29) atop the Phase 6/7 + flagColor base (PR #22). Preserves dev Phase 1-5 behavior and PR #22 Phase 6/7 + flagColor behavior. Conflict resolutions (16 files): - Migrations Phase4_SearchIndexes/.Designer + Phase5_DomainEvents/.Designer: take dev (Phase4 incl. SQL Server SiteCode/InternalWONumber index-compat shrink fix; Phase5 identical). ModelSnapshot union: Vendor CompanyId index + Phase7 ServiceNotes/ExternalWorkOrderId index. - ApplicationDbContext: keep dev SiteCode/InternalWONumber MaxLength (Phase1-5 + unguarded model test) + HEAD CompletionDocTemplate/ExternalWorkOrderId. - WorkOrderAuditService: unify on dev async staging API; convert Phase6 CompletionService 2 call sites to await StageFieldChangedAsync (drops HEAD sync duplicate; only callers, no test refs). - Hosted services: take HEAD (retry-on-failure, coherent with Phase7 WorkOrderJobRunStateAccessor/OpsHealth). Program.cs keeps dev vendor DI (ClamAV/VendorDocumentScanWorker/ArgumentExceptionFilter) + HEAD Phase7. - WorkOrderController: keep HEAD Phase6/7 service params + dev doc comment. - VendorController/WorkOrderBoardCreateService/QueryFilters/appsettings: union / dev-correct. - WorkOrderBoardUpdateServiceTests: union of HEAD (Phase6/7+flagColor) and dev (Phase1-5) test methods. Verified WorkOrderType.Other (enum 99) is a legit category, not an overdue sentinel; overdue uses dedicated OperationalFlags.PastDue + IsPastDue, and 'Overdue' is rejected as a WorkOrderType (no PR #23 import needed). Removed dev duplicate Api.Options.WorkOrderJobRunState (HEAD defines it in Services.Implementation alongside the Accessor; Services cannot reference Api).
84 lines
3.8 KiB
C#
84 lines
3.8 KiB
C#
using Data.SeaHavenIndustries.Enums;
|
|
using SeaHaven.Services.Helpers;
|
|
|
|
namespace SeaHaven.Services.DTOs
|
|
{
|
|
/// <summary>
|
|
/// Payload for creating a board work order (SHOC create wizard).
|
|
/// FE follow-up: extend WorkOrderBoardCreatePayload + mapper with PrimaryService,
|
|
/// ExtraServices, ServiceNotes, PocName, PocPhone, VendorNotes, TechPhone; stop embedding
|
|
/// POC/vendor/service notes in description (pocNotes already exists). Prefer structured
|
|
/// fields; keep Trade+Description temporarily for legacy clients.
|
|
/// </summary>
|
|
public class WorkOrderBoardCreateRequestDto
|
|
{
|
|
public string? WoNumber { get; set; }
|
|
public WorkOrderType WorkOrderType { get; set; }
|
|
public string? SiteCode { get; set; }
|
|
public string? Description { get; set; }
|
|
/// <summary>Legacy alias for primary service; prefer <see cref="PrimaryService"/>.</summary>
|
|
public string? Trade { get; set; }
|
|
/// <summary>Primary service label; persisted as Trade / board pm.</summary>
|
|
public string? PrimaryService { get; set; }
|
|
public List<string>? ExtraServices { get; set; }
|
|
public string? ServiceNotes { get; set; }
|
|
public int? LocationId { get; set; }
|
|
public DateTime? DueDate { get; set; }
|
|
public string? AssignTo { get; set; }
|
|
public DateTime? ScheduledDate { get; set; }
|
|
public DateOnly? TargetWeek { get; set; }
|
|
public bool? ScheduleWeekOnly { get; set; }
|
|
public DocStatus? DocStatus { get; set; }
|
|
public int? VendorId { get; set; }
|
|
public DateTime? ApptDate { get; set; }
|
|
public string? ApptTime { get; set; }
|
|
public int? PocContactId { get; set; }
|
|
public string? PocName { get; set; }
|
|
public string? PocPhone { get; set; }
|
|
public string? PocNotes { get; set; }
|
|
public string? TechPhone { get; set; }
|
|
public string? VendorNotes { get; set; }
|
|
}
|
|
|
|
/// <summary>Advanced search / filter query for the board.</summary>
|
|
public class WorkOrderAdvancedSearchQueryDto
|
|
{
|
|
public int Page { get; set; } = 0;
|
|
public int PageSize { get; set; } = 100;
|
|
public string? Search { get; set; }
|
|
public WorkOrderAdvancedSearchDatePreset? DatePreset { get; set; }
|
|
public DateOnly? DateFrom { get; set; }
|
|
public DateOnly? DateTo { get; set; }
|
|
public List<string>? Sites { get; set; }
|
|
public List<WorkOrderType>? Types { get; set; }
|
|
public List<string>? Dispatchers { get; set; }
|
|
public List<LifecycleStatus>? Statuses { get; set; }
|
|
public List<string>? PmTypes { get; set; }
|
|
public List<int>? VendorIds { get; set; }
|
|
public List<DocStatus>? DocStatuses { get; set; }
|
|
public bool MyWorkOrders { get; set; }
|
|
public string? SortBy { get; set; }
|
|
public string? SortDir { get; set; }
|
|
}
|
|
|
|
/// <summary>Advanced search / filter query for the board.</summary>
|
|
public class WorkOrderAdvancedSearchQueryDto
|
|
{
|
|
public int Page { get; set; } = 1;
|
|
public int PageSize { get; set; } = 50;
|
|
public string? Search { get; set; }
|
|
public WorkOrderAdvancedSearchDatePreset? DatePreset { get; set; }
|
|
public DateOnly? DateFrom { get; set; }
|
|
public DateOnly? DateTo { get; set; }
|
|
public List<string>? Sites { get; set; }
|
|
public List<WorkOrderType>? Types { get; set; }
|
|
public List<string>? Dispatchers { get; set; }
|
|
public List<LifecycleStatus>? Statuses { get; set; }
|
|
public List<string>? PmTypes { get; set; }
|
|
public List<int>? VendorIds { get; set; }
|
|
public List<DocStatus>? DocStatuses { get; set; }
|
|
public bool MyWorkOrders { get; set; }
|
|
public string? SortBy { get; set; }
|
|
public string? SortDir { get; set; }
|
|
}
|
|
}
|