namespace Data.SeaHavenIndustries { public class VendorDispatchSummaryData { public int Id { get; set; } public string? DispatchNumber { get; set; } public string? PONumber { get; set; } public string? Status { get; set; } public decimal? NTEAmount { get; set; } public DateTime? ScheduledDate { get; set; } public DateTime? CompletedDate { get; set; } public DateTime? DispatchedAt { get; set; } public DateTime? AcknowledgedAt { get; set; } public string? WorkOrderTitle { get; set; } public string? InternalWONumber { get; set; } public string? LocationName { get; set; } public string? LocationCity { get; set; } public string? LocationState { get; set; } } public class PortalChecklistItemData { public int Id { get; set; } public string? ItemText { get; set; } public bool IsCompleted { get; set; } public string? CompletedBy { get; set; } public DateTime? CompletedAt { get; set; } } public class PortalSignoffData { public int Id { get; set; } public string? SignoffType { get; set; } public string? Name { get; set; } public string? SignatureMethod { get; set; } public DateTime? SignedAt { get; set; } } public class PortalUpliftData { public int Id { get; set; } public decimal? CurrentNTE { get; set; } public decimal RequestedNTE { get; set; } public string? VendorReason { get; set; } public string? Status { get; set; } public int RequiredTier { get; set; } public string? RequestedByVendorName { get; set; } // True when the vendor raised the request in the portal; false when it was raised // from the work order. Only vendor-raised requests are revisable or withdrawable. public bool RaisedByVendor { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? DecidedAt { get; set; } public string? DecisionNote { get; set; } public string? DecidedByFirstName { get; set; } public string? DecidedByLastName { get; set; } // SH-101 additions public int? EvidenceDocumentId { get; set; } public string? EvidenceFileName { get; set; } public string? EvidenceContentType { get; set; } public long? EvidenceSizeBytes { get; set; } public DateTime? ExpiresAt { get; set; } public string? NotificationStatus { get; set; } public string? NotificationError { get; set; } public bool EvidenceScanPassed { get; set; } } public class PortalCommentData { public int Id { get; set; } public string? Commenttext { get; set; } public string? Commenter { get; set; } public string? CommentType { get; set; } public DateTime? CreatedDate { get; set; } public string? UserId { get; set; } public string? UserFirstName { get; set; } public string? UserLastName { get; set; } } public class UpliftListItemData { public int Id { get; set; } public int DispatchId { get; set; } public string? DispatchNumber { get; set; } public string? PONumber { get; set; } public int? WorkOrderId { get; set; } public string? VendorCompanyName { get; set; } // Approval queue read contract: flattened work-order context. public string? WorkOrderNumber { get; set; } public string? WorkOrderSiteCode { get; set; } public string? WorkOrderService { get; set; } // SH-209: detail modal context, resolved from the same effective work order // and the requesting dispatch's vendor. public DateTime? WorkOrderScheduledDate { get; set; } public string? WorkOrderDispatcherFirstName { get; set; } public string? WorkOrderDispatcherLastName { get; set; } public string? TechnicianName { get; set; } public bool WorkOrderClosed { get; set; } public int AttachmentCount { get; set; } public string? RequestedByVendorName { get; set; } public string? RequestedByFirstName { get; set; } public string? RequestedByLastName { get; set; } public string? DecidedByFirstName { get; set; } public string? DecidedByLastName { get; set; } public decimal? CurrentNTE { get; set; } public decimal RequestedNTE { get; set; } /// The requested NTE increase; see UpliftAmount in SeaHaven.DataServices. public decimal Amount { get; set; } public string? VendorReason { get; set; } public int RequiredTier { get; set; } public string? Status { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? DecidedAt { get; set; } public string? DecisionNote { get; set; } // SH-101 additions public int? EvidenceDocumentId { get; set; } public string? EvidenceFileName { get; set; } public string? EvidenceContentType { get; set; } public long? EvidenceSizeBytes { get; set; } public DateTime? ExpiresAt { get; set; } public string? NotificationStatus { get; set; } public string? NotificationError { get; set; } } public class UpliftForWorkOrderData : UpliftForDispatchData { public string? CreatedByUserId { get; set; } } public class UpliftForDispatchData { public int Id { get; set; } public int DispatchId { get; set; } public decimal? CurrentNTE { get; set; } public decimal RequestedNTE { get; set; } /// The requested NTE increase; see UpliftAmount in SeaHaven.DataServices. public decimal Amount { get; set; } public string? VendorReason { get; set; } public string? Status { get; set; } public int RequiredTier { get; set; } public string? RequestedByVendorName { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? DecidedAt { get; set; } public string? DecisionNote { get; set; } public string? DecidedByFirstName { get; set; } public string? DecidedByLastName { get; set; } // SH-101 additions public int? EvidenceDocumentId { get; set; } public DateTime? ExpiresAt { get; set; } public string? NotificationStatus { get; set; } public string? NotificationError { get; set; } public string? EvidenceFileName { get; set; } public string? EvidenceContentType { get; set; } public long? EvidenceSizeBytes { get; set; } public bool EvidenceScanPassed { get; set; } } // Approval queue read contract: per-work-order exposure totals. Approved exposure is // the sum of uplift amounts that were auto-approved or admin-approved on the work // order; pending, rejected, cancelled/withdrawn, and revoked requests are excluded. public class WorkOrderUpliftExposureData { public int WorkOrderId { get; set; } public decimal AutoApprovedTotal { get; set; } public decimal AdminApprovedTotal { get; set; } } // SH-101: internal evidence-download projection. Server-side join enforces that the // returned document is the one linked to this specific uplift request and dispatch. public class UpliftEvidenceDownloadData { public int Id { get; set; } public int DispatchId { get; set; } public int VendorId { get; set; } public int RequiredTier { get; set; } public int? EvidenceDocumentId { get; set; } public string? StoredFileName { get; set; } public string? OriginalFileName { get; set; } public string? ContentType { get; set; } public string? Purpose { get; set; } public string? ScanStatus { get; set; } } }