using GB5Shared.ListQuery; namespace PIEDAL.DTO.Variant; // ── MPIEVARIANT — save / edit ───────────────────────────────────────────────── public class PIEVariantDTO { public Guid VariantId { get; set; } public Guid ModuleId { get; set; } /// Display-only — joined on GET public string? ModuleName { get; set; } public string VariantCode { get; set; } = string.Empty; public string VariantName { get; set; } = string.Empty; public string? Description { get; set; } public string? PlainLanguageDesc { get; set; } /// ISDEFAULT: 0=No, 1=Yes public short IsDefault { get; set; } public int DisplayOrder { get; set; } /// STATUS: 1=Active, 0=Inactive [GB5Shared.EntityHandler.WorkflowStatusField] public short IsActive { get; set; } = 1; public string? CmsContentRef { get; set; } public DateTime? CreatedAt { get; set; } public int CreatedBy { get; set; } public DateTime? UpdatedAt { get; set; } public int UpdatedBy { get; set; } public int TenantId { get; set; } // Child implications — populated on GET, sent on save public List Implications { get; set; } = new(); } // ── MPIEVARIANTIMPLICATION — child ──────────────────────────────────────────── public class PIEVariantImplicationDTO { public Guid ImplicationId { get; set; } public Guid VariantId { get; set; } /// /// 1=AddConfigItem 2=RemoveConfigItem 3=AddTrainingTopic /// 4=AddUATScenario 5=AddMigrationObject 6=UpdateEffortDelta /// public short ImplicationType { get; set; } /// Required for types 1–5; null for type 6 public Guid? RefId { get; set; } /// Display-only — code of the referenced entity public string? RefCode { get; set; } public decimal EffortDeltaHours { get; set; } public string? Description { get; set; } public string? RiskNote { get; set; } public int TenantId { get; set; } } // ── Variant list infrastructure ─────────────────────────────────────────────── public sealed class PIEVariantListDTO { public Guid VariantId { get; set; } public Guid ModuleId { get; set; } public string VariantCode { get; set; } = string.Empty; public string VariantName { get; set; } = string.Empty; public short IsDefault { get; set; } public short IsActive { get; set; } public int DisplayOrder { get; set; } public int TotalCount { get; set; } } public sealed class PIEVariantListCriteria : ICriteria { [CriteriaField("moduleid")] public Guid? ModuleId { get; set; } [CriteriaField("isdefault")] public short? IsDefault { get; set; } [CriteriaField("isactive")] public short? IsActive { 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 PIEVariantListQuery(PIEVariantListCriteria Criteria) : IListQuery; // ── Variant select list (dropdown) ──────────────────────────────────────────── public sealed class PIEVariantSelectListDTO { public Guid VariantId { get; set; } public string VariantCode { get; set; } = string.Empty; public string VariantName { get; set; } = string.Empty; public Guid ModuleId { get; set; } public short IsDefault { get; set; } }