using GB5Shared.ListQuery; namespace IDMSDAL.DTOs; // ── delivery_item — save / detail ───────────────────────────────────────────── public class DeliveryItemDTO { public int DeliveryItemId { get; set; } public int EngagementId { get; set; } public int TenantId { get; set; } public string DomainCode { get; set; } = string.Empty; // D01..D12 public string ItemType { get; set; } = string.Empty; public string? ItemSubtype { get; set; } public string ItemName { get; set; } = string.Empty; public string ItemMetadata { get; set; } = "{}"; // JSON public byte Status { get; set; } = 1; // 1=Pending 2=InProgress 3=Completed 4=Blocked 5=NA 6=Deferred public int AssignedToId { get; set; } // -1 if unassigned public DateTime? DueOn { get; set; } public DateTime? CompletedOn { get; set; } public int CompletedById { get; set; } // -1 if not completed public decimal? EstimatedHours { get; set; } public decimal? ActualHours { get; set; } public bool IsImmutable { get; set; } public string? SignOffHash { get; set; } // SHA-256 hex — set on sign-off public bool IsRework { get; set; } public short? ReworkReasonCode { get; set; } public string? ReworkReasonDetail { get; set; } public string? PieContentRef { get; set; } public string? KmsContentRef { get; set; } public int DisplayOrder { get; set; } public bool IsMandatory { get; set; } = true; public string? RemoteSessionRef { get; set; } public bool ClientSelfService { get; set; } // Standard T audit fields public short Version { get; set; } public short SortOrder { get; set; } public byte SourceType { get; set; } = 5; public int DeliveryItemCreatedById { get; set; } public DateTime DeliveryItemCreatedOn { get; set; } public int DeliveryItemModifiedById { get; set; } public DateTime DeliveryItemModifiedOn { get; set; } } // ── delivery item list ──────────────────────────────────────────────────────── public sealed class DeliveryItemListDTO { public int DeliveryItemId { get; set; } public string DomainCode { get; set; } = string.Empty; public string ItemType { get; set; } = string.Empty; public string ItemName { get; set; } = string.Empty; public byte Status { get; set; } public int AssignedToId { get; set; } public DateTime? DueOn { get; set; } public bool IsImmutable { get; set; } public bool IsRework { get; set; } public int TotalCount { get; set; } } public sealed class DeliveryItemListCriteria : ICriteria { [CriteriaField("engagementid")] public int? EngagementId { get; set; } [CriteriaField("domaincode")] public string? DomainCode { get; set; } [CriteriaField("status")] public short? Status { get; set; } [CriteriaField("isrework")] public bool? IsRework { 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 DeliveryItemListQuery(DeliveryItemListCriteria Criteria) : IListQuery;