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 Sarand.Net.Standard.Base.Utils; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.Bus { //======================================================================= public abstract class SbmPortfolioItem : SbmHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Hidden, Pos, Id, // Parent. ItemIdParent, Parent_Code, Parent_Caption, HierCode, // Commodity. CommodityId, Commodity_Code, Commodity_DescBrief, Commodity_SalesPrice, Commodity_SalesPrice_Fmt, // Portfolio Item properties. ItemIdRef, Type, Type_Desc, Sequence, Code, Caption, DescBrief, DescDetail, ShortCut, Publish_Y, Publish_Tick, // Common properties. Notes, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, } //------------------------------------------------------------------- /// Properties other than common. public class DataProperties { public SysId AffiliateIdOwner { get; set; } = new SysId(); public SysId ItemIdParent { get; set; } = new SysId(); public ushort Seq { get; set; } = 0; public Sbm.PortfolioItemType Type { get; set; } = Sbm.PortfolioItemType.Unknown; public SysId ItemIdRef { get; set; } = new SysId(); public String Code { get; set; } = ""; public String ShortCut { get; set; } = ""; public String Caption { get; set; } = ""; public String DescBrief { get; set; } = ""; public String DescDetail { get; set; } = ""; public SysId CommodityId { 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 SysId AffiliateIdOwner { get { return data.AffiliateIdOwner; } set { CheckChanged(data.AffiliateIdOwner, value); data.AffiliateIdOwner = value; } } public SysId ItemIdParent { get { return data.ItemIdParent; } set { CheckChanged(data.ItemIdParent, value); data.ItemIdParent = value; } } public ushort Sequence { get { return data.Seq; } set { CheckChanged(data.Seq, value); data.Seq = value; } } public Sbm.PortfolioItemType Type { get { return data.Type; } set { CheckChanged((int)data.Type, (int)value); data.Type = value; } } public SysId ItemIdRef { get { return data.ItemIdRef; } set { CheckChanged(data.ItemIdRef, value); data.ItemIdRef = value; } } public String Code { get { return data.Code; } set { CheckChanged(data.Code, value); data.Code = value; } } public String ShortCut { get { return data.ShortCut; } set { CheckChanged(data.ShortCut, value); data.ShortCut = value; } } public String Caption { get { return data.Caption; } set { CheckChanged(data.Caption, value); data.Caption = value; } } public String DescBrief { get { return data.DescBrief; } set { CheckChanged(data.DescBrief, value); data.DescBrief = value; } } public String DescDetail { get { return data.DescDetail; } set { CheckChanged(data.DescDetail, value); data.DescDetail = value; } } public SysId CommodityId { get { return data.CommodityId; } set { CheckChanged(data.CommodityId, value); data.CommodityId = value; } } internal void PopulateFrom(Data data) { AffiliateIdOwner = data.AffiliateIdOwner; ItemIdParent = data.ItemIdParent; Sequence = data.Sequence; Type = data.Type; ItemIdRef = data.ItemIdRef; Code = data.Code; ShortCut = data.ShortCut; Caption = data.Caption; DescBrief = data.DescBrief; DescDetail = data.DescDetail; CommodityId = data.CommodityId; 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 AffiliateIdOwner { get; set; } = ValidValue.Valid; public ValidValue ItemIdParent { get; set; } = ValidValue.Valid; public ValidValue Sequence { get; set; } = ValidValue.Valid; public ValidValue Type { get; set; } = ValidValue.Valid; public ValidValue ItemIdRef { get; set; } = ValidValue.Valid; public ValidValue Code { get; set; } = ValidValue.Valid; public ValidValue ShortCut { get; set; } = ValidValue.Valid; public ValidValue Caption { get; set; } = ValidValue.Valid; public ValidValue DescBrief { get; set; } = ValidValue.Valid; public ValidValue DescDetail { get; set; } = ValidValue.Valid; public ValidValue CommodityId { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); public static readonly Byte Flag_PublicationProhibited = 0x01; //------------------------------------------------------------------- // Construction. protected SbmPortfolioItem(SysId id, SysId affiliateIdOwner, Sbm.PortfolioItemType portfolioItemType) : base(id) { base.SetData(data); AffiliateIdOwner = affiliateIdOwner; Type = portfolioItemType; Status = DefaultStatus; } //------------------------------------------------------------------- // PortfolioItem status. private static readonly List portfolioItemStatuses = new List() { SaStatus.Current, SaStatus.OnHold, //SaStatus.Inactive, //SaStatus.Cancelled, SaStatus.Disabled, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List ValidStatuses { get { return new List(portfolioItemStatuses); } } 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. public SbmItemId GetItemId() { return new SbmItemId(Sbm.ItemType.PortfolioItem, Id); } //------------------------------------------------------------------- // Properties. public Data GetData() { return data.Clone(); } public void SetData(Data data) { // Properties that cannot be changed if previously specified. if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id)) throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed"); // Populate individual properties to ensure that 'Changed' indicator is kept up to date. this.data.PopulateFrom(data); } //------------------------------------------------------------------- // Attributes. public SysId AffiliateIdOwner { get { return data.AffiliateIdOwner; } protected set { data.AffiliateIdOwner = value; } } public SysId ItemIdParent { get { return data.ItemIdParent; } set { data.ItemIdParent = value; } } public ushort Sequence { get { return data.Sequence; } set { data.Sequence = value; } } public Sbm.PortfolioItemType Type { get { return data.Type; } protected set { data.Type = value; } } public SysId ItemIdRef { get { return data.ItemIdRef; } set { data.ItemIdRef = value; } } public String Code { get { return data.Code; } set { data.Code = value; } } public String ShortCut { get { return data.ShortCut; } set { data.ShortCut = value; } } public String Caption { get { return data.Caption; } set { data.Caption = value; } } public String DescBrief { get { return data.DescBrief; } set { data.DescBrief = value; } } public String DescDetail { get { return data.DescDetail; } set { data.DescDetail = value; } } public SysId CommodityId { get { return data.CommodityId; } set { data.CommodityId = value; } } //------------------------------------------------------------------- // Flags. public bool PublicationProhibited { get { return GetFlag(Flag_PublicationProhibited); } set { SetFlag(Flag_PublicationProhibited, value); } } //------------------------------------------------------------------- // P a r a m s //------------------------------------------------------------------- /// Parameters - used to define the filters that should be applied to a List of Portfolio Items // List parameters. public enum StatusCat { Any, NotDeleted, } /// /// Item list parameters. /// public new class Params : SacsHierarchyItem.Params { // List filtering. public HashSet IdsIncluded { get; } = new HashSet(); public HashSet IdsExcluded { get; } = new HashSet(); // Hierarchy. public SysId ParentItemId { get; set; } public SysId AncestorItemId { get; set; } // Commodity. public HashSet CommodityIdsIncluded { get; } = new HashSet(); public HashSet CommodityIdsExcluded { get; } = new HashSet(); public String CommodityCodeFull { get; set; } public String CommodityCodePartial { get; set; } // Portfolio Item. public Sbm.PortfolioItemType PortfolioItemType { get; set; } public ushort Sequence { get; set; } public String CodeFull { get; set; } public String CodePartial { get; set; } public String ShortCut { get; set; } /// Portfolio Item status. public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted; } //------------------------------------------------------------------- } //======================================================================= // P o r t f o l i o I t e m L i s t //======================================================================= public static class SbmPortfolioItemList { } //======================================================================= }