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 SbmAsset : SbmHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Hidden, Pos, Id, // Asset. AssetCategoryId, Category_Type_Desc, Category_Code, Category_DescBrief, SerialNumber, DescBrief, // ItemType col-section ItemType, ItemTypeDesc, ItemId, // Vehicle col-section Vehicle_RegNumber, Vehicle_Vin, VehicleClass_MakeDesc, VehicleClass_Model, VehicleClass_Derivative, VehicleClass_DescBrief, Vehicle_KeyLocation, Vehicle_Flags, Vehicle_HpiAlert, PurchaseOn, AmountPurchase, AmountPurchaseGross, SellCategoryDesc, AmountSell, AmountSellGross, SoldOn, AmountSold, DisposeCode, DisposeOn, DueBackOn, // UOM col-section. AmountRentalCost, UomRentalCost_Id, UomRentalCost_Desc, AmountRentalPrice, UomRentalPrice_Id, UomRentalPrice_Desc, ProcessIdNext, NextProcess_DescBrief, NextProcess_Expected, // Common properties. Notes, Flag, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, Warnings, } //------------------------------------------------------------------- /// Properties other than common. public class DataProperties { public SysId AssetCategoryId { get; set; } = new SysId(); public String SerialNumber { get; set; } = ""; public String RefExt { get; set; } = ""; public String DescBrief { get; set; } = ""; public ItemId ItemId { get; set; } = new ItemId(); public DateTime PurchaseOn { get; set; } = DateTime.MinValue; public SysId AssocIdSupplier { get; set; } = new SysId(); public String PurchaseInvoiceRef { get; set; } = ""; public short PaymentTerms { get; set; } = 0; public decimal AmountPurchase { get; set; } = 0.0m; public SysId TaxCodeIdPurchase { get; set; } = new SysId(); public decimal AmountPurchaseGross { get; set; } = 0.0m; public decimal AmountSettlementGross { get; set; } = 0.0m; public decimal AmountEnhancementGross { get; set; } = 0.0m; public SysId AssocIdCustomer { get; set; } = new SysId(); public String SellCategoryCode { get; set; } = ""; public decimal AmountSell { get; set; } = 0.0m; public SysId TaxCodeIdSell { get; set; } = new SysId(); public decimal AmountSellGross { get; set; } = 0.0m; public SysId TaxCodeIdProfit { get; set; } = new SysId(); public DateTime SoldOn { get; set; } = DateTime.MinValue; public decimal AmountSold { get; set; } = 0.0m; public decimal AmountSoldGross { get; set; } = 0.0m; public String DisposeCode { get; set; } = ""; public DateTime DisposeOn { get; set; } = DateTime.MinValue; public DateTime DueBackOn { get; set; } = DateTime.MinValue; public decimal AmountRentalCost { get; set; } = 0.0m; public SysId UomIdRentalCost { get; set; } = new SysId(); public SysId TaxCodeIdRentalCost { get; set; } = new SysId(); public decimal AmountRentalPrice { get; set; } = 0.0m; public SysId UomIdRentalPrice { get; set; } = new SysId(); public SysId TaxCodeIdRentalPrice { get; set; } = new SysId(); public SysId ProcessIdNext { 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 AssetCategoryId { get { return data.AssetCategoryId; } set { CheckChanged(data.AssetCategoryId, value); data.AssetCategoryId = value; } } public String SerialNumber { get { return data.SerialNumber; } set { CheckChanged(data.SerialNumber, value); data.SerialNumber = value; } } public String RefExt { get { return data.RefExt; } set { CheckChanged(data.RefExt, value); data.RefExt = value; } } public String DescBrief { get { return data.DescBrief; } set { CheckChanged(data.DescBrief, value); data.DescBrief = value; } } public ItemId ItemId { get { return data.ItemId; } set { CheckChanged(data.ItemId, value); data.ItemId = value; } } public DateTime PurchaseOn { get { return data.PurchaseOn; } set { CheckChanged(data.PurchaseOn, value); data.PurchaseOn = value; } } public SysId AssocIdSupplier { get { return data.AssocIdSupplier; } set { CheckChanged(data.AssocIdSupplier, value); data.AssocIdSupplier = value; } } public String PurchaseInvoiceRef { get { return data.PurchaseInvoiceRef; } set { CheckChanged(data.PurchaseInvoiceRef, value); data.PurchaseInvoiceRef = value; } } public short PaymentTerms { get { return data.PaymentTerms; } set { CheckChanged(data.PaymentTerms, value); data.PaymentTerms = value; } } public decimal AmountPurchase { get { return data.AmountPurchase; } set { CheckChanged(data.AmountPurchase, value); data.AmountPurchase = value; } } public SysId TaxCodeIdPurchase { get { return data.TaxCodeIdPurchase; } set { CheckChanged(data.TaxCodeIdPurchase, value); data.TaxCodeIdPurchase = value; } } public decimal AmountPurchaseGross { get { return data.AmountPurchaseGross; } set { CheckChanged(data.AmountPurchaseGross, value); data.AmountPurchaseGross = value; } } public decimal AmountSettlementGross { get { return data.AmountSettlementGross; } set { CheckChanged(data.AmountSettlementGross, value); data.AmountSettlementGross = value; } } public decimal AmountEnhancementGross { get { return data.AmountEnhancementGross; } set { CheckChanged(data.AmountEnhancementGross, value); data.AmountEnhancementGross = value; } } public SysId AssocIdCustomer { get { return data.AssocIdCustomer; } set { CheckChanged(data.AssocIdCustomer, value); data.AssocIdCustomer = value; } } public String SellCategoryCode { get { return data.SellCategoryCode; } set { CheckChanged(data.SellCategoryCode, value); data.SellCategoryCode = value; } } public decimal AmountSell { get { return data.AmountSell; } set { CheckChanged(data.AmountSell, value); data.AmountSell = value; } } public SysId TaxCodeIdSell { get { return data.TaxCodeIdSell; } set { CheckChanged(data.TaxCodeIdSell, value); data.TaxCodeIdSell = value; } } public decimal AmountSellGross { get { return data.AmountSellGross; } set { CheckChanged(data.AmountSellGross, value); data.AmountSellGross = value; } } public SysId TaxCodeIdProfit { get { return data.TaxCodeIdProfit; } set { CheckChanged(data.TaxCodeIdProfit, value); data.TaxCodeIdProfit = value; } } public DateTime SoldOn { get { return data.SoldOn; } set { CheckChanged(data.SoldOn, value); data.SoldOn = value; } } public decimal AmountSold { get { return data.AmountSold; } set { CheckChanged(data.AmountSold, value); data.AmountSold = value; } } public decimal AmountSoldGross { get { return data.AmountSoldGross; } set { CheckChanged(data.AmountSoldGross, value); data.AmountSoldGross = value; } } public String DisposeCode { get { return data.DisposeCode; } set { CheckChanged(data.DisposeCode, value); data.DisposeCode = value; } } public DateTime DisposeOn { get { return data.DisposeOn; } set { CheckChanged(data.DisposeOn, value); data.DisposeOn = value; } } public DateTime DueBackOn { get { return data.DueBackOn; } set { CheckChanged(data.DueBackOn, value); data.DueBackOn = value; } } public decimal AmountRentalCost { get { return data.AmountRentalCost; } set { CheckChanged(data.AmountRentalCost, value); data.AmountRentalCost = value; } } public SysId UomIdRentalCost { get { return data.UomIdRentalCost; } set { CheckChanged(data.UomIdRentalCost, value); data.UomIdRentalCost = value; } } public SysId TaxCodeIdRentalCost { get { return data.TaxCodeIdRentalCost; } set { CheckChanged(data.TaxCodeIdRentalCost, value); data.TaxCodeIdRentalCost = value; } } public decimal AmountRentalPrice { get { return data.AmountRentalPrice; } set { CheckChanged(data.AmountRentalPrice, value); data.AmountRentalPrice = value; } } public SysId UomIdRentalPrice { get { return data.UomIdRentalPrice; } set { CheckChanged(data.UomIdRentalPrice, value); data.UomIdRentalPrice = value; } } public SysId TaxCodeIdRentalPrice { get { return data.TaxCodeIdRentalPrice; } set { CheckChanged(data.TaxCodeIdRentalPrice, value); data.TaxCodeIdRentalPrice = value; } } public SysId ProcessIdNext { get { return data.ProcessIdNext; } set { CheckChanged(data.ProcessIdNext, value); data.ProcessIdNext = value; } } internal void PopulateFrom(Data data) { AssetCategoryId = data.AssetCategoryId; SerialNumber = data.SerialNumber; RefExt = data.RefExt; DescBrief = data.DescBrief; ItemId = data.ItemId; PurchaseOn = data.PurchaseOn; AssocIdSupplier = data.AssocIdSupplier; PurchaseInvoiceRef = data.PurchaseInvoiceRef; PaymentTerms = data.PaymentTerms; AmountPurchase = data.AmountPurchase; TaxCodeIdPurchase = data.TaxCodeIdPurchase; AmountPurchaseGross = data.AmountPurchaseGross; AmountSettlementGross = data.AmountSettlementGross; AmountEnhancementGross = data.AmountEnhancementGross; AssocIdCustomer = data.AssocIdCustomer; SellCategoryCode = data.SellCategoryCode; AmountSell = data.AmountSell; TaxCodeIdSell = data.TaxCodeIdSell; AmountSellGross = data.AmountSellGross; TaxCodeIdProfit = data.TaxCodeIdProfit; SoldOn = data.SoldOn; AmountSold = data.AmountSold; AmountSoldGross = data.AmountSoldGross; DisposeCode = data.DisposeCode; DisposeOn = data.DisposeOn; DueBackOn = data.DueBackOn; AmountRentalCost = data.AmountRentalCost; UomIdRentalCost = data.UomIdRentalCost; TaxCodeIdRentalCost = data.TaxCodeIdRentalCost; AmountRentalPrice = data.AmountRentalPrice; UomIdRentalPrice = data.UomIdRentalPrice; TaxCodeIdRentalPrice = data.TaxCodeIdRentalPrice; ProcessIdNext = data.ProcessIdNext; 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 AssetCategoryId { get; set; } = ValidValue.Valid; public ValidValue SerialNumber { get; set; } = ValidValue.Valid; public ValidValue RefExt { get; set; } = ValidValue.Valid; public ValidValue DescBrief { get; set; } = ValidValue.Valid; public ValidValue ItemType { get; set; } = ValidValue.Valid; public ValidValue ItemId { get; set; } = ValidValue.Valid; public ValidValue PurchaseOn { get; set; } = ValidValue.Valid; public ValidValue AssocIdSupplier { get; set; } = ValidValue.Valid; public ValidValue PurchaseInvoiceRef { get; set; } = ValidValue.Valid; public ValidValue PaymentTerms { get; set; } = ValidValue.Valid; public ValidValue AmountPurchase { get; set; } = ValidValue.Valid; public ValidValue TaxCodeIdPurchase { get; set; } = ValidValue.Valid; public ValidValue AmountPurchaseGross { get; set; } = ValidValue.Valid; public ValidValue AmountSettlementGross { get; set; } = ValidValue.Valid; public ValidValue AmountEnhancementGross { get; set; } = ValidValue.Valid; public ValidValue AssocIdCustomer { get; set; } = ValidValue.Valid; public ValidValue SellCategoryCode { get; set; } = ValidValue.Valid; public ValidValue AmountSell { get; set; } = ValidValue.Valid; public ValidValue TaxCodeIdSell { get; set; } = ValidValue.Valid; public ValidValue AmountSellGross { get; set; } = ValidValue.Valid; public ValidValue TaxCodeIdProfit { get; set; } = ValidValue.Valid; public ValidValue SoldOn { get; set; } = ValidValue.Valid; public ValidValue AmountSold { get; set; } = ValidValue.Valid; public ValidValue AmountSoldGross { get; set; } = ValidValue.Valid; public ValidValue DisposeCode { get; set; } = ValidValue.Valid; public ValidValue DisposeOn { get; set; } = ValidValue.Valid; public ValidValue DueBackOn { get; set; } = ValidValue.Valid; public ValidValue AmountRentalCost { get; set; } = ValidValue.Valid; public ValidValue UomIdRentalCost { get; set; } = ValidValue.Valid; public ValidValue TaxCodeIdRentalCost { get; set; } = ValidValue.Valid; public ValidValue AmountRentalPrice { get; set; } = ValidValue.Valid; public ValidValue UomIdRentalPrice { get; set; } = ValidValue.Valid; public ValidValue TaxCodeIdRentalPrice { get; set; } = ValidValue.Valid; public ValidValue ProcessIdNext { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); //------------------------------------------------------------------- // Construction. protected SbmAsset(ISbmUserContext userContext, SysId id, SysId assetCatId) : base(userContext, id) { base.SetData(data); Id = id; AssetCategoryId = assetCatId; Status = DefaultStatus; } //------------------------------------------------------------------- // Asset status. private static readonly List assetStatuses = new List() { /*SaStatus.Provisional,*/ SaStatus.Active, /*SaStatus.Actioned,*/ SaStatus.Cancelled, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List AssetStatuses { get { return new List(assetStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { switch (status) { case SaStatus.Active: return DataValue.TriStateType.Green; case SaStatus.Cancelled: return DataValue.TriStateType.Red; case SaStatus.Disabled: return DataValue.TriStateType.Red; case SaStatus.Deleted: return DataValue.TriStateType.Purple; } return DataValue.TriStateType.Unknown; } //------------------------------------------------------------------- // 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 SysId AssetCategoryId { get { return data.AssetCategoryId; } set { data.AssetCategoryId = value; } } public String SerialNumber { get { return data.SerialNumber; } set { data.SerialNumber = value; } } public String RefExt { get { return data.RefExt; } set { data.RefExt = value; } } public String DescBrief { get { return data.DescBrief; } set { data.DescBrief = value; } } public ItemId ItemId { get { return data.ItemId; } set { data.ItemId = value; } } public DateTime PurchaseOn { get { return data.PurchaseOn; } set { data.PurchaseOn = value; } } public SysId AssocIdSupplier { get { return data.AssocIdSupplier; } set { data.AssocIdSupplier = value; } } public String PurchaseInvoiceRef { get { return data.PurchaseInvoiceRef; } set { data.PurchaseInvoiceRef = value; } } public short PaymentTerms { get { return data.PaymentTerms; } set { data.PaymentTerms = value; } } public decimal AmountPurchase { get { return data.AmountPurchase; } set { data.AmountPurchase = value; } } public SysId TaxCodeIdPurchase { get { return data.TaxCodeIdPurchase; } set { data.TaxCodeIdPurchase = value; } } public decimal AmountPurchaseGross { get { return data.AmountPurchaseGross; } set { data.AmountPurchaseGross = value; } } public decimal AmountSettlementGross { get { return data.AmountSettlementGross; } set { data.AmountSettlementGross = value; } } public decimal AmountEnhancementGross { get { return data.AmountEnhancementGross; } set { data.AmountEnhancementGross = value; } } public SysId AssocIdCustomer { get { return data.AssocIdCustomer; } set { data.AssocIdCustomer = value; } } public String SellCategoryCode { get { return data.SellCategoryCode; } set { data.SellCategoryCode = value; } } public decimal AmountSell { get { return data.AmountSell; } set { data.AmountSell = value; } } public SysId TaxCodeIdSell { get { return data.TaxCodeIdSell; } set { data.TaxCodeIdSell = value; } } public decimal AmountSellGross { get { return data.AmountSellGross; } set { data.AmountSellGross = value; } } public SysId TaxCodeIdProfit { get { return data.TaxCodeIdProfit; } set { data.TaxCodeIdProfit = value; } } public DateTime SoldOn { get { return data.SoldOn; } set { data.SoldOn = value; } } public decimal AmountSold { get { return data.AmountSold; } set { data.AmountSold = value; } } public decimal AmountSoldGross { get { return data.AmountSoldGross; } set { data.AmountSoldGross = value; } } public String DisposeCode { get { return data.DisposeCode; } set { data.DisposeCode = value; } } public DateTime DisposeOn { get { return data.DisposeOn; } set { data.DisposeOn = value; } } public DateTime DueBackOn { get { return data.DueBackOn; } set { data.DueBackOn = value; } } public decimal AmountRentalCost { get { return data.AmountRentalCost; } set { data.AmountRentalCost = value; } } public SysId UomIdRentalCost { get { return data.UomIdRentalCost; } set { data.UomIdRentalCost = value; } } public SysId TaxCodeIdRentalCost { get { return data.TaxCodeIdRentalCost; } set { data.TaxCodeIdRentalCost = value; } } public decimal AmountRentalPrice { get { return data.AmountRentalPrice; } set { data.AmountRentalPrice = value; } } public SysId UomIdRentalPrice { get { return data.UomIdRentalPrice; } set { data.UomIdRentalPrice = value; } } public SysId TaxCodeIdRentalPrice { get { return data.TaxCodeIdRentalPrice; } set { data.TaxCodeIdRentalPrice = value; } } public SysId ProcessIdNext { get { return data.ProcessIdNext; } set { data.ProcessIdNext = 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 HasProcesses(); public abstract bool HasRequirements(); public abstract bool HasInterfaceDataItems(); public abstract bool HasAssociatedDetails(); //--------------------------------------------------------------- public abstract bool ClearDependentData(); //--------------------------------------------------------------- // Asset Processes. public abstract List GetProcesses(bool bActiveOnly); public abstract bool SetProcesses(List itemProcessesNew); public abstract bool CommitProcesses(); public abstract bool PopulateDefaultProcesses(); //--------------------------------------------------------------- // Asset Payments. public abstract bool HasPrices(); public abstract List GetPrices(); public abstract bool SetPrices(List itemPricesNew); public abstract bool CommitPrices(); //------------------------------------------------------------------- // P a r a m s //------------------------------------------------------------------- /// Parameters - used to define the filters that should be applied to a List of Assets // 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(); // Asset. public SysId AssetCatId { get; set; } public Sbm.ItemType ItemType { get; set; } public String SerialNumber { get; set; } public String SerialNumberPartial { get; set; } public String DescBriefPartial { get; set; } public ItemId ItemId { get; set; } public SysId ProcessIdNext { get; set; } public SysId ProcessIdActive { get; set; } public bool RestrictToActive { get; set; } /// Asset status. public StatusCat StatusCat { get; set; } = StatusCat.Any; // Utilities. public List GetDisplayValues() { List value = new List(); if (IncludedIds.Count > 0) value.Add("Assets included", IncludedIds.ToString()); if (ExcludedIds.Count > 0) value.Add("Assets excluded", ExcludedIds.ToString()); if (SysId.IsValid(AssetCatId)) value.Add("Asset category Id", AssetCatId.ToString()); if (ItemType > 0) value.Add("Item type", ItemType.ToString()); if (ItemId.IsValid(ItemId)) value.Add("Item Id", ItemId.ToString()); if (!StringUtil.IsEmpty(SerialNumber)) value.Add("SerialNumber", SerialNumber); if (!StringUtil.IsEmpty(SerialNumberPartial)) value.Add("SerialNumber starts", SerialNumberPartial); if (!StringUtil.IsEmpty(DescBriefPartial)) value.Add("Description starts", DescBriefPartial); if (SysId.IsValid(ProcessIdNext)) value.Add("Next process #", ProcessIdNext.ToString()); if (SysId.IsValid(ProcessIdActive)) value.Add("Active process #", ProcessIdActive.ToString()); if (!RestrictToActive) value.Add("Status", "Active"); return value; } } //------------------------------------------------------------------- } //======================================================================= // A s s e t D a t a L i s t //======================================================================= public static class SbmAssetList { /// Check whether currency exists/locate in list with specified Id. public static bool Find(this List values, SbmAddress address) { if (address == null) return false; return (values.Find(item => item == address) != null); } public static bool FindById(this List values, SysId addressId) { if (!SysId.IsValid(addressId)) return false; return values.Exists(item => item.Id.Equals(addressId)); } } //======================================================================= }