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 SbmVehicle : SbmHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Pos, Id, // Vehicle - vehicleClass props. VehicleClass_Id, VehicleClass_MakeCode, VehicleClass_MakeDesc, VehicleClass_Model, VehicleClass_Derivative, VehicleClass_DescBrief, VehicleClass_Type, VehicleClass_TypeDesc, VehicleClass_CategoryCode, VehicleClass_CategoryDesc, VehicleClass_FuelTypeDesc, VehicleClass_OdometerUnitsDesc, VehicleClass_Seats, VehicleClass_InsuranceCode, VehicleClass_InsuranceDesc, VehicleClass_Notes, // Vehicle own props. RegNumber, RegNumberPrev, Vin, CapCode, KeyNumber, KeyLocation, EngineNumber, BuildOn, FirstRegisterOn, RegisterOn, PurchaseOdo, TachoCode, TachoId, LastServiceOdo, LastServiceOn, NextServiceOdo, NextServiceOn, MotOn, MotNo, NextTaxOn, LatestOdo, LatestOdoOn, HpiAlert, EventCount, // Derived values. FeatureCount, HpiCheckCount, // Common properties. Notes, Flag, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, } //------------------------------------------------------------------- /// Properties other than common. public class DataProperties { public String AssetSerial { get; set; } = ""; public SysId VehicleClassId { get; set; } = new SysId(); public String RegNumber { get; set; } = ""; public String Vin { get; set; } = ""; public String CapCode { get; set; } = ""; public String KeyNumber { get; set; } = ""; public String KeyLocation { get; set; } = ""; public String EngineNumber { get; set; } = ""; public short EngineCapacity { get; set; } = 0; public short Seats { get; set; } = 0; public short Weight { get; set; } = 0; public short ManufactureYear { get; set; } = 0; public DateTime BuildOn { get; set; } = DateTime.MinValue; public DateTime FirstRegisterOn { get; set; } = DateTime.MinValue; public DateTime RegisterOn { get; set; } = DateTime.MinValue; public String RegNumberPrev { get; set; } = ""; public decimal PurchaseOdo { get; set; } = 0.0m; public String TachoCode { get; set; } = ""; public String TachoId { get; set; } = ""; public decimal LastServiceOdo { get; set; } = 0.0m; public DateTime LastServiceOn { get; set; } = DateTime.MinValue; public decimal NextServiceOdo { get; set; } = 0.0m; public DateTime NextServiceOn { get; set; } = DateTime.MinValue; public DateTime MotOn { get; set; } = DateTime.MinValue; public String MotNo { get; set; } = ""; public DateTime NextTaxOn { get; set; } = DateTime.MinValue; public decimal LatestOdo { get; set; } = 0.0m; public DateTime LatestOdoOn { get; set; } = DateTime.MinValue; } // Data. public new class Data : SacsHierarchyItem.Data { // Data members. private readonly DataProperties data = new DataProperties(); // Construction. public Data() { Status = DefaultStatus; } public String AssetSerial { get { return data.AssetSerial; } set { CheckChanged(data.AssetSerial, value); data.AssetSerial = value; } } public SysId VehicleClassId { get { return data.VehicleClassId; } set { CheckChanged(data.VehicleClassId, value); data.VehicleClassId = value; } } public String RegNumber { get { return data.RegNumber; } set { CheckChanged(data.RegNumber, value); data.RegNumber = value; } } public String Vin { get { return data.Vin; } set { CheckChanged(data.Vin, value); data.Vin = value; } } public String CapCode { get { return data.CapCode; } set { CheckChanged(data.CapCode, value); data.CapCode = value; } } public String KeyNumber { get { return data.KeyNumber; } set { CheckChanged(data.KeyNumber, value); data.KeyNumber = value; } } public String KeyLocation { get { return data.KeyLocation; } set { CheckChanged(data.KeyLocation, value); data.KeyLocation = value; } } public String EngineNumber { get { return data.EngineNumber; } set { CheckChanged(data.EngineNumber, value); data.EngineNumber = value; } } public short EngineCapacity { get { return data.EngineCapacity; } set { CheckChanged(data.EngineCapacity, value); data.EngineCapacity = value; } } public short Seats { get { return data.Seats; } set { CheckChanged(data.Seats, value); data.Seats = value; } } public short Weight { get { return data.Weight; } set { CheckChanged(data.Weight, value); data.Weight = value; } } public short ManufactureYear { get { return data.ManufactureYear; } set { CheckChanged(data.ManufactureYear, value); data.ManufactureYear = value; } } public DateTime BuildOn { get { return data.BuildOn; } set { CheckChanged(data.BuildOn, value); data.BuildOn = value; } } public DateTime FirstRegisterOn { get { return data.FirstRegisterOn; } set { CheckChanged(data.FirstRegisterOn, value); data.FirstRegisterOn = value; } } public DateTime RegisterOn { get { return data.RegisterOn; } set { CheckChanged(data.RegisterOn, value); data.RegisterOn = value; } } public String RegNumberPrev { get { return data.RegNumberPrev; } set { CheckChanged(data.RegNumberPrev, value); data.RegNumberPrev = value; } } public decimal PurchaseOdo { get { return data.PurchaseOdo; } set { CheckChanged(data.PurchaseOdo, value); data.PurchaseOdo = value; } } public String TachoCode { get { return data.TachoCode; } set { CheckChanged(data.TachoCode, value); data.TachoCode = value; } } public String TachoId { get { return data.TachoId; } set { CheckChanged(data.TachoId, value); data.TachoId = value; } } public decimal LastServiceOdo { get { return data.LastServiceOdo; } set { CheckChanged(data.LastServiceOdo, value); data.LastServiceOdo = value; } } public DateTime LastServiceOn { get { return data.LastServiceOn; } set { CheckChanged(data.LastServiceOn, value); data.LastServiceOn = value; } } public decimal NextServiceOdo { get { return data.NextServiceOdo; } set { CheckChanged(data.NextServiceOdo, value); data.NextServiceOdo = value; } } public DateTime NextServiceOn { get { return data.NextServiceOn; } set { CheckChanged(data.NextServiceOn, value); data.NextServiceOn = value; } } public DateTime MotOn { get { return data.MotOn; } set { CheckChanged(data.MotOn, value); data.MotOn = value; } } public String MotNo { get { return data.MotNo; } set { CheckChanged(data.MotNo, value); data.MotNo = value; } } public DateTime NextTaxOn { get { return data.NextTaxOn; } set { CheckChanged(data.NextTaxOn, value); data.NextTaxOn = value; } } public decimal LatestOdo { get { return data.LatestOdo; } set { CheckChanged(data.LatestOdo, value); data.LatestOdo = value; } } public DateTime LatestOdoOn { get { return data.LatestOdoOn; } set { CheckChanged(data.LatestOdoOn, value); data.LatestOdoOn = value; } } internal void PopulateFrom(Data data) { AssetSerial = data.AssetSerial; VehicleClassId = data.VehicleClassId; RegNumber = data.RegNumber; Vin = data.Vin; CapCode = data.CapCode; KeyNumber = data.KeyNumber; KeyLocation = data.KeyLocation; EngineNumber = data.EngineNumber; EngineCapacity = data.EngineCapacity; Seats = data.Seats; Weight = data.Weight; ManufactureYear = data.ManufactureYear; BuildOn = data.BuildOn; FirstRegisterOn = data.FirstRegisterOn; RegisterOn = data.RegisterOn; RegNumberPrev = data.RegNumberPrev; PurchaseOdo = data.PurchaseOdo; TachoCode = data.TachoCode; TachoId = data.TachoId; LastServiceOdo = data.LastServiceOdo; LastServiceOn = data.LastServiceOn; NextServiceOdo = data.NextServiceOdo; NextServiceOn = data.NextServiceOn; MotOn = data.MotOn; MotNo = data.MotNo; NextTaxOn = data.NextTaxOn; LatestOdo = data.LatestOdo; LatestOdoOn = data.LatestOdoOn; 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 AssetSerial { get; set; } = ValidValue.Valid; public ValidValue VehicleClassId { get; set; } = ValidValue.Valid; public ValidValue RegNumber { get; set; } = ValidValue.Valid; public ValidValue Vin { get; set; } = ValidValue.Valid; public ValidValue CapCode { get; set; } = ValidValue.Valid; public ValidValue KeyNumber { get; set; } = ValidValue.Valid; public ValidValue KeyLocation { get; set; } = ValidValue.Valid; public ValidValue EngineNumber { get; set; } = ValidValue.Valid; public ValidValue EngineCapacity { get; set; } = ValidValue.Valid; public ValidValue Seats { get; set; } = ValidValue.Valid; public ValidValue Weight { get; set; } = ValidValue.Valid; public ValidValue ManufactureYear { get; set; } = ValidValue.Valid; public ValidValue BuildOn { get; set; } = ValidValue.Valid; public ValidValue FirstRegisterOn { get; set; } = ValidValue.Valid; public ValidValue RegisterOn { get; set; } = ValidValue.Valid; public ValidValue RegNumberPrev { get; set; } = ValidValue.Valid; public ValidValue PurchaseOdo { get; set; } = ValidValue.Valid; public ValidValue TachoCode { get; set; } = ValidValue.Valid; public ValidValue TachoId { get; set; } = ValidValue.Valid; public ValidValue LastServiceOdo { get; set; } = ValidValue.Valid; public ValidValue LastServiceOn { get; set; } = ValidValue.Valid; public ValidValue NextServiceOdo { get; set; } = ValidValue.Valid; public ValidValue NextServiceOn { get; set; } = ValidValue.Valid; public ValidValue MotOn { get; set; } = ValidValue.Valid; public ValidValue MotNo { get; set; } = ValidValue.Valid; public ValidValue NextTaxOn { get; set; } = ValidValue.Valid; public ValidValue LatestOdo { get; set; } = ValidValue.Valid; public ValidValue LatestOdoOn { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); public static readonly Byte Flag_HpiAlert = 0x01; //------------------------------------------------------------------- // Construction. protected SbmVehicle(ISbmUserOrganisationContext userContext, SysId id) : base(userContext, id) { base.SetData(data); //Database = database; Status = DefaultStatus; } //------------------------------------------------------------------- // Vehicle status. private static readonly List vehicleStatuses = new List() { SaStatus.Active, SaStatus.Cancelled, }; public static SaStatus DefaultStatus { get { return SaStatus.Current; } } public static List ValidStatuses { get { return new List(vehicleStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { switch (status) { case SaStatus.Active: return DataValue.TriStateType.Green; case SaStatus.Awaiting: return DataValue.TriStateType.Amber; case SaStatus.Disabled: return DataValue.TriStateType.Red; case SaStatus.Cancelled: 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) { // 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 String AssetSerial { get { return data.AssetSerial; } set { data.AssetSerial = value; } } public SysId VehicleClassId { get { return data.VehicleClassId; } set { data.VehicleClassId = value; } } public String RegNumber { get { return data.RegNumber; } set { data.RegNumber = value; } } public String Vin { get { return data.Vin; } set { data.Vin = value; } } public String CapCode { get { return data.CapCode; } set { data.CapCode = value; } } public String KeyNumber { get { return data.KeyNumber; } set { data.KeyNumber = value; } } public String KeyLocation { get { return data.KeyLocation; } set { data.KeyLocation = value; } } public String EngineNumber { get { return data.EngineNumber; } set { data.EngineNumber = value; } } public short EngineCapacity { get { return data.EngineCapacity; } set { data.EngineCapacity = value; } } public short Seats { get { return data.Seats; } set { data.Seats = value; } } public short Weight { get { return data.Weight; } set { data.Weight = value; } } public short ManufactureYear { get { return data.ManufactureYear; } set { data.ManufactureYear = value; } } public DateTime BuildOn { get { return data.BuildOn; } set { data.BuildOn = value; } } public DateTime FirstRegisterOn { get { return data.FirstRegisterOn; } set { data.FirstRegisterOn = value; } } public DateTime RegisterOn { get { return data.RegisterOn; } set { data.RegisterOn = value; } } public String RegNumberPrev { get { return data.RegNumberPrev; } set { data.RegNumberPrev = value; } } public decimal PurchaseOdo { get { return data.PurchaseOdo; } set { data.PurchaseOdo = value; } } public String TachoCode { get { return data.TachoCode; } set { data.TachoCode = value; } } public String TachoId { get { return data.TachoId; } set { data.TachoId = value; } } public decimal LastServiceOdo { get { return data.LastServiceOdo; } set { data.LastServiceOdo = value; } } public DateTime LastServiceOn { get { return data.LastServiceOn; } set { data.LastServiceOn = value; } } public decimal NextServiceOdo { get { return data.NextServiceOdo; } set { data.NextServiceOdo = value; } } public DateTime NextServiceOn { get { return data.NextServiceOn; } set { data.NextServiceOn = value; } } public DateTime MotOn { get { return data.MotOn; } set { data.MotOn = value; } } public String MotNo { get { return data.MotNo; } set { data.MotNo = value; } } public DateTime NextTaxOn { get { return data.NextTaxOn; } set { data.NextTaxOn = value; } } public decimal LatestOdo { get { return data.LatestOdo; } set { data.LatestOdo = value; } } public DateTime LatestOdoOn { get { return data.LatestOdoOn; } set { data.LatestOdoOn = value; } } //------------------------------------------------------------------- // Flags. public bool HpiAlert { get { return GetFlag(Flag_HpiAlert); } set { SetFlag(Flag_HpiAlert, value); } } //------------------------------------------------------------------- // O d o m e t e r R e a d i n g //------------------------------------------------------------------- public abstract bool SetOdometerReading(decimal odometer); //------------------------------------------------------------------- // 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 HasAssets(); public abstract bool HasProcesses(); public abstract bool HasEvents(); public abstract long GetFeatureCount(); public abstract bool HasFeatures(); public abstract bool HasInterfaceDataItems(); public abstract bool HpiCheckCount(); public abstract bool HasItemData(); public abstract bool ClearDependentData(); //------------------------------------------------------------------- // P a r a m s //------------------------------------------------------------------- /// Parameters - used to define the filters that should be applied to a List of Vehicles // List parameters. public enum StatusCat { Any, } /// /// Item list parameters. /// public new class Params : SacsHierarchyItem.Params { // List filtering. public List IdsIncluded { get; } = new List(); public List IdsExcluded { get; } = new List(); // Vehicle. public SysId VehicleClassId { get; set; } public SysId AssetCatIdInclude { get; set; } public SysId AssetCatIdExclude { get; set; } public SysId AssetProcessIdNext { get; set; } public String RegNumber { get; set; } public String RegNumberPartial { get; set; } public String VinPartial { get; set; } public String MakeCode { get; set; } public String ClassDescPartial { get; set; } public String RestrictToActive { get; set; } /// Vehicle status. public StatusCat StatusCat { get; set; } = StatusCat.Any; // Utilities. public List GetDisplayValues() { List values = new List(); return values; } } //------------------------------------------------------------------- } //======================================================================= // V e h i c l e L i s t //======================================================================= public static class SbmVehicleList { /// Check whether currency exists/locate in list with specified Id. public static bool Find(this List values, SbmVehicle vehicle) { if (vehicle == null) return false; return (values.Find(item => item == vehicle) != null); } public static bool FindById(this List values, SysId id) { if (!SysId.IsValid(id)) return false; return values.Exists(item => item.Id.Equals(id)); } } //======================================================================= }