using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.Bus { //======================================================================= public abstract class SbmSysParam : SbmHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { //Hidden. Pos, Id, // SysParam. Category, Name, Value, AffIdOwner, AffIdTarget, AssocId, // Common properties. Notes, Flag, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, } //------------------------------------------------------------------- /// Properties other than common. public class DataProperties { public Sbm.SysParamCategory Category { get; set; } = Sbm.SysParamCategory.Any; public String Name { get; set; } = ""; public String Value { get; set; } = ""; public SysId AffiliateIdOwner { get; set; } = new SysId(); public SysId AffiliateIdTarget { get; set; } = new SysId(); public SysId AssociationId { get; set; } = new SysId(); } // Data. public new class Data : SacsHierarchyItem.Data { // Data members. private readonly DataProperties data = new DataProperties(); // Construction. public Data() { Status = DefaultStatus; } public Sbm.SysParamCategory Category { get { return data.Category; } set { CheckChanged((short)data.Category, (short)value); data.Category = value; } } public String Name { get { return data.Name; } set { CheckChanged(data.Name, value); data.Name = value; } } public String Value { get { return data.Value; } set { CheckChanged(data.Value, value); data.Value = value; } } public SysId AffiliateIdOwner { get { return data.AffiliateIdOwner; } set { CheckChanged(data.AffiliateIdOwner, value); data.AffiliateIdOwner = value; } } public SysId AffiliateIdTarget { get { return data.AffiliateIdTarget; } set { CheckChanged(data.AffiliateIdTarget, value); data.AffiliateIdTarget = value; } } public SysId AssociationId { get { return data.AssociationId; } set { CheckChanged(data.AssociationId, value); data.AssociationId = value; } } internal void PopulateFrom(Data data) { Category = data.Category; Name = data.Name; Value = data.Value; AffiliateIdOwner = data.AffiliateIdOwner; AffiliateIdTarget = data.AffiliateIdTarget; AssociationId = data.AssociationId; base.PopulateFrom(data); } public Data Clone() { Data data = new Data(); data.PopulateFrom(this); return data; } } public new class ErrField : SacsHierarchyItem.ErrField { // Identifies the field that has invalid data. public ValidValue Category { get; set; } = ValidValue.Valid; public ValidValue Name { get; set; } = ValidValue.Valid; public ValidValue Value { get; set; } = ValidValue.Valid; public ValidValue AffiliateIdOwner { get; set; } = ValidValue.Valid; public ValidValue AffiliateIdTarget { get; set; } = ValidValue.Valid; public ValidValue AssociationId { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); //------------------------------------------------------------------- // Construction. protected SbmSysParam(ISbmUserContext userContext, SysId id, Sbm.SysParamCategory category, String name) : base(userContext, id) { base.SetData(data); Category = category; Name = name; Status = DefaultStatus; } //------------------------------------------------------------------- // SysParam status. private static readonly List sysParamStatuses = new List() { SaStatus.Current, SaStatus.OnHold, //SaStatus.Inactive, //SaStatus.Cancelled, SaStatus.Disabled, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List SysParamStatuses { get { return new List(sysParamStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { switch (status) { case SaStatus.Active: case SaStatus.Current: return DataValue.TriStateType.Green; case SaStatus.OnHold: return DataValue.TriStateType.Amber; case SaStatus.Inactive: case SaStatus.Cancelled: case SaStatus.Disabled: return DataValue.TriStateType.Red; case SaStatus.Deleted: return DataValue.TriStateType.Purple; } return DataValue.TriStateType.Unknown; } //------------------------------------------------------------------- // Utilities. //------------------------------------------------------------------- // Properties. public Data GetData() { return data.Clone(); } public void SetData(Data data) { String fn = GetType().Name + ".SetData"; // Properties that cannot be changed if previously specified. if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id)) throw new NotSupportedException(fn + " Id cannot be changed"); // Populate individual properties to ensure that 'Changed' indicator is kept up to date. this.data.PopulateFrom(data); } //------------------------------------------------------------------- // Attributes. public Sbm.SysParamCategory Category { get { return data.Category; } set { data.Category = value; } } public String Name { get { return data.Name; } set { data.Name = value; } } public String Value { get { return data.Value; } set { data.Value = value; } } public SysId AffiliateIdOwner { get { return data.AffiliateIdOwner; } set { data.AffiliateIdOwner = value; } } public SysId AffiliateIdTarget { get { return data.AffiliateIdTarget; } set { data.AffiliateIdTarget = value; } } public SysId AssociationId { get { return data.AssociationId; } set { data.AssociationId = value; } } //------------------------------------------------------------------- // A s s o c i a t e d D a t a E l e m e n t s //------------------------------------------------------------------- //------------------------------------------------------------------- // P a r a m s //------------------------------------------------------------------- /// Parameters - used to define the filters that should be applied to a List of System Params // List parameters. public enum StatusCat { Any, } /// /// Item list parameters. /// public new class Params : SacsHierarchyItem.Params { // List filtering. public List IncludedIds { get; } = new List(); public List ExcludedIds { get; } = new List(); // SysParam. public Sbm.SysParamCategory Category { get; set; } = Sbm.SysParamCategory.Any; public String Name { get; set; } public String NamePartial { get; set; } public SysId AffIdOwner { get; set; } public SysId AffIdTarget { get; set; } public SysId AssocId { get; set; } public StatusCat StatusCat { get; set; } = StatusCat.Any; // Assignment. } //------------------------------------------------------------------- } //======================================================================= // S y s P a r a m D a t a L i s t //======================================================================= public static class SbmSysParamList { /// Check whether currency exists/locate in list with specified Id. public static bool Find(this List values, Sbm.SysParamCategory category, String name, SysId idAffOwner, SysId idAffTarget, SysId idAssoc) { return true; } } //======================================================================= }