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; }
}