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.Net.Standard.Base.ReferenceData { //======================================================================= public abstract class SaUnitMeasure : SacsHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Hidden, Pos, Id, // Unit of Measure. Category, UnitType, Code, Abbr, Single, Multiple, EquivalencyValue, UomIdEquivalency, EquivalencyAlgorythm, UomIdRef1, UomIdRef2, UomIdRef3, // Common properties. Notes, Status, Status_Desc, Status_Ind, CreateOn_Date, UpdateOn_Date, } //------------------------------------------------------------------- /// Properties other than common. public class DataProperties { public SaUomCategory Category { get; set; } = SaUomCategory.Unknown; public SaUomType UnitType { get; set; } = SaUomType.Unknown; public String Code { get; set; } = ""; public String Abbr { get; set; } = ""; public String Single { get; set; } = ""; public String Multiple { get; set; } = ""; public decimal EquivalencyValue { get; set; } = 0.0m; public int UomIdEquivalency { get; set; } = 0; public int EquivalencyAlgorythm { get; set; } = 0; public int UomIdRef1 { get; set; } = 0; public int UomIdRef2 { get; set; } = 0; public int UomIdRef3 { get; set; } = 0; } //------------------------------------------------------------------- // Data. public new class Data : SacsHierarchyItem.Data { // Data members. private readonly DataProperties data = new DataProperties(); // Construction. public Data () { Status = DefaultStatus; } // Properties. public SaUomCategory Category { get { return data.Category; } set { CheckChanged((short)data.Category, (short)value); data.Category = value; } } public SaUomType UnitType { get { return data.UnitType; } set { CheckChanged((short)data.UnitType, (short)value); data.UnitType = value; } } public String Code { get { return data.Code; } set { CheckChanged(data.Code, value); data.Code = value; } } public String Abbr { get { return data.Abbr; } set { CheckChanged(data.Abbr, value); data.Abbr = value; } } public String Single { get { return data.Single; } set { CheckChanged(data.Single, value); data.Single = value; } } public String Multiple { get { return data.Multiple; } set { CheckChanged(data.Multiple, value); data.Multiple = value; } } public decimal EquivalencyValue { get { return data.EquivalencyValue; } set { CheckChanged(data.EquivalencyValue, value); data.EquivalencyValue = value; } } public int UomIdEquivalency { get { return data.UomIdEquivalency; } set { CheckChanged(data.UomIdEquivalency, value); data.UomIdEquivalency = value; } } public int EquivalencyAlgorythm { get { return data.EquivalencyAlgorythm; } set { CheckChanged(data.EquivalencyAlgorythm, value); data.EquivalencyAlgorythm = value; } } public int UomIdRef1 { get { return data.UomIdRef1; } set { CheckChanged(data.UomIdRef1, value); data.UomIdRef1 = value; } } public int UomIdRef2 { get { return data.UomIdRef2; } set { CheckChanged(data.UomIdRef2, value); data.UomIdRef2 = value; } } public int UomIdRef3 { get { return data.UomIdRef3; } set { CheckChanged(data.UomIdRef3, value); data.UomIdRef3 = value; } } // Population. internal void PopulateFrom (Data data) { Category = data.Category; UnitType = data.UnitType; Code = data.Code; Abbr = data.Abbr; Single = data.Single; Multiple = data.Multiple; EquivalencyValue = data.EquivalencyValue; UomIdEquivalency = data.UomIdEquivalency; EquivalencyAlgorythm = data.EquivalencyAlgorythm; UomIdRef1 = data.UomIdRef1; UomIdRef2 = data.UomIdRef2; UomIdRef3 = data.UomIdRef3; base.PopulateFrom(data); } public Data Clone () { Data data = new Data(); data.PopulateFrom(this); return data; } } //------------------------------------------------------------------- // Error field - identify properties with validation error. public new class ErrField : SacsHierarchyItem.ErrField { // Identifies the field that has invalid data. public ValidValue Category { get; set; } = ValidValue.Valid; public ValidValue UnitType { get; set; } = ValidValue.Valid; public ValidValue Code { get; set; } = ValidValue.Valid; public ValidValue Abbr { get; set; } = ValidValue.Valid; public ValidValue Single { get; set; } = ValidValue.Valid; public ValidValue Multiple { get; set; } = ValidValue.Valid; public ValidValue EquivalencyValue { get; set; } = ValidValue.Valid; public ValidValue UomIdEquivalency { get; set; } = ValidValue.Valid; public ValidValue EquivalencyAlgorythm { get; set; } = ValidValue.Valid; public ValidValue UomIdRef1 { get; set; } = ValidValue.Valid; public ValidValue UomIdRef2 { get; set; } = ValidValue.Valid; public ValidValue UomIdRef3 { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); public static readonly Byte Flag_EquivalencyAccurate = 0x01; public static readonly Byte Flag_CategoryDefault = 0x02; //------------------------------------------------------------------- // Construction. protected SaUnitMeasure (SysId id) : base(id) { base.SetData(data); Status = DefaultStatus; } //------------------------------------------------------------------- // Statuses. private static readonly List validStatuses = new List() { SaStatus.Current }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List ValidStatuses { get { return new List(validStatuses); } } public static DataValue.TriStateType GetStatusTriState (SaStatus status) { switch (status) { case SaStatus.Current: return DataValue.TriStateType.Green; case SaStatus.Deleted: return DataValue.TriStateType.Purple; } return DataValue.TriStateType.Unknown; } //------------------------------------------------------------------- // Utilities. //------------------------------------------------------------------- // Data. 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"); if (!StringUtil.IsEmpty(Code) && !Code.EqualsCI(data.Code)) throw new NotSupportedException($"{SysUtil.Fn} Codecannot be changed"); // Populate individual properties to ensure that 'Changed' indicator is kept up to date. this.data.PopulateFrom(data); } //------------------------------------------------------------------- // Properties. public SaUomCategory Category { get { return data.Category; } set { data.Category = value; } } public SaUomType UnitType { get { return data.UnitType; } set { data.UnitType = value; } } public String Code { get { return data.Code; } set { data.Code = value; } } public String Abbr { get { return data.Abbr; } set { data.Abbr = value; } } public String Single { get { return data.Single; } set { data.Single = value; } } public String Multiple { get { return data.Multiple; } set { data.Multiple = value; } } public decimal EquivalencyValue { get { return data.EquivalencyValue; } set { data.EquivalencyValue = value; } } public int UomIdEquivalency { get { return data.UomIdEquivalency; } set { data.UomIdEquivalency = value; } } public int EquivalencyAlgorythm { get { return data.EquivalencyAlgorythm; } set { data.EquivalencyAlgorythm = value; } } public int UomIdRef1 { get { return data.UomIdRef1; } set { data.UomIdRef1 = value; } } public int UomIdRef2 { get { return data.UomIdRef2; } set { data.UomIdRef2 = value; } } public int UomIdRef3 { get { return data.UomIdRef3; } set { data.UomIdRef3 = value; } } //------------------------------------------------------------------- // Flags. public bool EquivalencyAccurate { get { return GetFlag(Flag_EquivalencyAccurate); } set { SetFlag(Flag_EquivalencyAccurate, value); } } public bool CategoryDefault { get { return GetFlag(Flag_CategoryDefault); } set { SetFlag(Flag_CategoryDefault, value); } } //------------------------------------------------------------------- // A s s o c i a t e d D a t a E l e m e n t s //------------------------------------------------------------------- public abstract bool HasDependentUnitsOfMeasure (); //------------------------------------------------------------------- // P a r a m s //------------------------------------------------------------------- // List parameters. public enum StatusCat { Any, ActiveOnly, } /// /// Item list parameters. /// public new class Params : SacsHierarchyItem.Params { // List filtering. public List IncludedIds { get; } = new List(); public List ExcludedIds { get; } = new List(); // UnitMeasure. public SaUomCategory Category { get; set; } public SaUomType UnitType { get; set; } public String Code { get; set; } public String CodePartial { get; set; } public String Desc { get; set; } public String DescPartial { get; set; } public String NotesPartial { get; set; } public StatusCat StatusCat { get; set; } = StatusCat.Any; } //------------------------------------------------------------------- } //======================================================================= // U n i t M e a s u r e D a t a L i s t //======================================================================= public static class SaUnitMeasureList { /// Retrieve unit measure with specified Id. public static SaUnitMeasure FindById (this List values, SysId measureId) { return values.Find(item => item.Id.Equals(measureId)); } } //======================================================================= }