using GB5Shared.ListQuery; namespace IDMSDAL.DTOs; // ── rework_register — save / detail ────────────────────────────────────────── // L table — IDENTITY PK. Only CreatedById/CreatedOn audit fields. public class ReworkDTO { public int ReworkId { get; set; } // 0 until inserted public int EngagementId { get; set; } public int TenantId { get; set; } public int DeliveryItemId { get; set; } public string DomainCode { get; set; } = string.Empty; public short ReasonCode { get; set; } // 1=RequirementGap 2=ConfigError 3=DataIssue 4=TrainingGap // 5=VariantChange 6=ProfileDefaultWrong 7=RemoteDeliveryGap 8=Other public string? ReasonDetail { get; set; } public decimal ReworkHours { get; set; } public bool FlaggedForPie { get; set; } public bool PieProposalCreated { get; set; } public DateTime? ResolvedOn { get; set; } public int ResolvedById { get; set; } // -1 if unresolved // L table audit fields — CreatedById/CreatedOn only (no Modified fields) public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } // Workflow status — inert today (no workflow rule configured for Rework). // Present so BaseEntityAppService.SetDtoStatus has a valid target. [GB5Shared.EntityHandler.WorkflowStatusField] public byte Status { get; set; } = 1; // Display-only — joined on GET public string? ItemName { get; set; } } // ── rework list ─────────────────────────────────────────────────────────────── public sealed class ReworkListDTO { public int ReworkId { get; set; } public int DeliveryItemId { get; set; } public string DomainCode { get; set; } = string.Empty; public short ReasonCode { get; set; } public decimal ReworkHours { get; set; } public bool FlaggedForPie { get; set; } public DateTime? ResolvedOn { get; set; } public DateTime CreatedOn { get; set; } public int TotalCount { get; set; } } public sealed class ReworkListCriteria : ICriteria { [CriteriaField("engagementid")] public int? EngagementId { get; set; } [CriteriaField("domaincode")] public string? DomainCode { get; set; } [CriteriaField("flaggedforpie")] public bool? FlaggedForPie { 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; } = 100; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; } public sealed record ReworkListQuery(ReworkListCriteria Criteria) : IListQuery;