using GB5Shared.ListQuery; namespace IDMSDAL.DTOs; // ── implementation_engagement — save / detail ────────────────────────────────── public class EngagementDTO { public int EngagementId { get; set; } public int TenantId { get; set; } public int ClientId { get; set; } public string EngagementCode { get; set; } = string.Empty; public string EngagementName { get; set; } = string.Empty; public short EngagementType { get; set; } // 1=Quick 2=Standard 3=Complex 4=Enterprise public string EngagementSource { get; set; } = "VendorLed"; public string DeliveryMode { get; set; } = "OnSite"; public string ActiveDomains { get; set; } = "[]"; // JSON array — serialize in BLL // PIE linkage public string? PieEngagementId { get; set; } public string? PieEstimationSnapshotRef { get; set; } // Profile linkage (QuickStart — Phase 2) public int QuickstartProfileId { get; set; } // -1 if none public string? QuickstartProfileVersion { get; set; } public string? DeviationAnswers { get; set; } // JSON public decimal? ProfileMatchConfidence { get; set; } // Commercial public string? BillingModel { get; set; } public decimal? ContractValue { get; set; } public string? ContractRef { get; set; } // Health & signals public string HealthStatus { get; set; } = "Green"; public int UpgradeSignalScore { get; set; } public DateTime? UpgradeSuggstedOn { get; set; } public DateTime? EscalatedOn { get; set; } public int EscalatedById { get; set; } // -1 if none public string? EscalationReason { get; set; } // Shadow consultant public int ShadowConsultantId { get; set; } // -1 if none public DateTime? ShadowAssignedOn { get; set; } public DateTime? ShadowLastReviewedOn { get; set; } // Portal (Phase 2) public DateTime? PortalActivatedOn { get; set; } public DateTime? SelfProvisionCompletedOn { get; set; } public int RemoteSessionCount { get; set; } // ROI (Phase 2) public bool RoiTrackingEnabled { get; set; } public DateTime? GoLiveOn { get; set; } public DateTime? PlannedGoLiveOn { get; set; } public DateTime? HypercareEndOn { get; set; } // Vault public short LegalVaultLevel { get; set; } = 1; // Standard T audit fields public short Version { get; set; } public byte Status { get; set; } = 1; // 1=Draft 2=Active 3=OnHold 4=Completed 5=Cancelled 6=GoLive public short SortOrder { get; set; } public byte SourceType { get; set; } = 5; public int EngagementCreatedById { get; set; } public DateTime EngagementCreatedOn { get; set; } public int EngagementModifiedById { get; set; } public DateTime EngagementModifiedOn { get; set; } // Child collections — populated on GET; sent on save public List Modules { get; set; } = new(); } // ── engagement list ─────────────────────────────────────────────────────────── public sealed class EngagementListDTO { public int EngagementId { get; set; } public string EngagementCode { get; set; } = string.Empty; public string EngagementName { get; set; } = string.Empty; public short EngagementType { get; set; } public short Status { get; set; } public string HealthStatus { get; set; } = string.Empty; public string DeliveryMode { get; set; } = string.Empty; public int TotalCount { get; set; } } public sealed class EngagementListCriteria : ICriteria { [CriteriaField("status")] public short? Status { get; set; } [CriteriaField("engtype")] public short? EngagementType { get; set; } [CriteriaField("source")] public string? Source { get; set; } [CriteriaField("health")] public string? HealthStatus { get; set; } [CriteriaField("searchtext")] public string? SearchText { get; set; } [CriteriaField("ouid")] public int? OUId { get; set; } [CriteriaField("sortby")] public string? SortBy { get; set; } [CriteriaField("sortdesc")] public bool SortDesc { get; set; } [CriteriaField("pagesize")] public int PageSize { get; set; } = 50; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; } public sealed record EngagementListQuery(EngagementListCriteria Criteria) : IListQuery; // ── engagement_module — child ───────────────────────────────────────────────── public class EngagementModuleDTO { public int EngagementModuleId { get; set; } public int EngagementId { get; set; } public int TenantId { get; set; } public short Slno { get; set; } = 1; public int ModuleId { get; set; } public string ModuleCode { get; set; } = string.Empty; public string ModuleName { get; set; } = string.Empty; public string? PieVariantsSelected { get; set; } // JSON public decimal? EstimatedHours { get; set; } public decimal ActualHours { get; set; } public decimal ReworkHours { get; set; } public bool IsPrimary { get; set; } public byte SeedingStatus { get; set; } = 1; // 1=Pending 2=InProgress 3=Complete 4=Failed public DateTime? SeededOn { get; set; } }