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; using System.Linq; namespace Sarand.BusinessMgr.Net.Standard.Base.Bus { //======================================================================= public abstract class SbmVehicleClass : SbmHierarchyItem { //------------------------------------------------------------------- // Columns. public enum Column { Hidden, Pos, Id, // VehicleClass. MakeCode, MakeDesc, Model, Derivative, DescBrief, VehicleType, VehicleTypeDesc, VehicleCategoryCode, VehicleCategoryDesc, FuelTypeDesc, OdometerUnitsDesc, Seats, InsuranceCode, InsuranceDesc, FirstServiceOdo, ServiceOdo, ServiceWeeks, Weight, AmountRentalCost, RentalCostUomDesc, AmountRentalPrice, RentalPriceUomDesc, VehicleCount, // Common properties. Notes, Flag, Status, Status_Ind, Status_Desc, CreateOn_Date, UpdateOn_Date, } //------------------------------------------------------------------- /// Properties other than common. public class DataProperties { public String MakeCode { get; set; } = ""; public String Model { get; set; } = ""; public String Derivative { get; set; } = ""; public String DescBrief { get; set; } = ""; public Sbm.VehicleType VehicleType { get; set; } = Sbm.VehicleType.Unknown; public String VehicleCategoryCode { get; set; } = ""; public Sbm.VehicleFuelType FuelType { get; set; } = Sbm.VehicleFuelType.Unknown; public Sbm.VehicleOdometerUnits OdometerUnits { get; set; } = Sbm.VehicleOdometerUnits.Unknown; public short Seats { get; set; } = 0; public decimal Weight { get; set; } = 0.0m; public String InsuranceCode { get; set; } = ""; public decimal FirstServiceOdo { get; set; } = 0.0m; public decimal ServiceOdo { get; set; } = 0.0m; public short ServiceWeeks { get; set; } = 0; public decimal AmountRentalCost { get; set; } = 0.0m; public SysId UomIdRentalCost { get; set; } = new SysId(); public decimal AmountRentalPrice { get; set; } = 0.0m; public SysId UomIdRentalPrice { 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 String MakeCode { get { return data.MakeCode; } set { CheckChanged(data.MakeCode, value); data.MakeCode = value; } } public String Model { get { return data.Model; } set { CheckChanged(data.Model, value); data.Model = value; } } public String Derivative { get { return data.Derivative; } set { CheckChanged(data.Derivative, value); data.Derivative = value; } } public String DescBrief { get { return data.DescBrief; } set { CheckChanged(data.DescBrief, value); data.DescBrief = value; } } public Sbm.VehicleType VehicleType { get { return data.VehicleType; } set { CheckChanged((int)data.VehicleType, (int)value); data.VehicleType = value; } } public String VehicleCategoryCode { get { return data.VehicleCategoryCode; } set { CheckChanged(data.VehicleCategoryCode, value); data.VehicleCategoryCode = value; } } public Sbm.VehicleFuelType FuelType { get { return data.FuelType; } set { CheckChanged((int)data.FuelType, (int)value); data.FuelType = value; } } public Sbm.VehicleOdometerUnits OdometerUnits { get { return data.OdometerUnits; } set { CheckChanged((int)data.OdometerUnits, (int)value); data.OdometerUnits = value; } } public short Seats { get { return data.Seats; } set { CheckChanged(data.Seats, value); data.Seats = value; } } public decimal Weight { get { return data.Weight; } set { CheckChanged(data.Weight, value); data.Weight = value; } } public String InsuranceCode { get { return data.InsuranceCode; } set { CheckChanged(data.InsuranceCode, value); data.InsuranceCode = value; } } public decimal FirstServiceOdo { get { return data.FirstServiceOdo; } set { CheckChanged(data.FirstServiceOdo, value); data.FirstServiceOdo = value; } } public decimal ServiceOdo { get { return data.ServiceOdo; } set { CheckChanged(data.ServiceOdo, value); data.ServiceOdo = value; } } public short ServiceWeeks { get { return data.ServiceWeeks; } set { CheckChanged(data.ServiceWeeks, value); data.ServiceWeeks = 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 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; } } internal void PopulateFrom(Data data) { MakeCode = data.MakeCode; Model = data.Model; Derivative = data.Derivative; DescBrief = data.DescBrief; VehicleType = data.VehicleType; VehicleCategoryCode = data.VehicleCategoryCode; FuelType = data.FuelType; OdometerUnits = data.OdometerUnits; Seats = data.Seats; Weight = data.Weight; InsuranceCode = data.InsuranceCode; FirstServiceOdo = data.FirstServiceOdo; ServiceOdo = data.ServiceOdo; ServiceWeeks = data.ServiceWeeks; AmountRentalCost = data.AmountRentalCost; UomIdRentalCost = data.UomIdRentalCost; AmountRentalPrice = data.AmountRentalPrice; UomIdRentalPrice = data.UomIdRentalPrice; 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 MakeCode { get; set; } = ValidValue.Valid; public ValidValue Model { get; set; } = ValidValue.Valid; public ValidValue Derivative { get; set; } = ValidValue.Valid; public ValidValue DescBrief { get; set; } = ValidValue.Valid; public ValidValue VehicleType { get; set; } = ValidValue.Valid; public ValidValue VehicleCategoryCode { get; set; } = ValidValue.Valid; public ValidValue FuelType { get; set; } = ValidValue.Valid; public ValidValue OdometerUnits { get; set; } = ValidValue.Valid; public ValidValue Seats { get; set; } = ValidValue.Valid; public ValidValue Weight { get; set; } = ValidValue.Valid; public ValidValue InsuranceCode { get; set; } = ValidValue.Valid; public ValidValue FirstServiceOdo { get; set; } = ValidValue.Valid; public ValidValue ServiceOdo { get; set; } = ValidValue.Valid; public ValidValue ServiceWeeks { get; set; } = ValidValue.Valid; public ValidValue AmountRentalCost { get; set; } = ValidValue.Valid; public ValidValue UomIdRentalCost { get; set; } = ValidValue.Valid; public ValidValue AmountRentalPrice { get; set; } = ValidValue.Valid; public ValidValue UomIdRentalPrice { get; set; } = ValidValue.Valid; } //------------------------------------------------------------------- // Data members. private readonly Data data = new Data(); public static readonly Byte Flag_DescBriefFixed = 0x01; //------------------------------------------------------------------- // Construction. protected SbmVehicleClass(ISbmUserOrganisationContext userContext, SysId id) : base(userContext, id) { base.SetData(data); Status = DefaultStatus; } //------------------------------------------------------------------- // VehicleClass status. private static readonly List vehicleClassStatuses = new List() { SaStatus.Active, SaStatus.Inactive, SaStatus.Deleted, }; public static SaStatus DefaultStatus { get { return SaStatus.Active; } } public static List ValidStatuses { get { return new List(vehicleClassStatuses); } } public static DataValue.TriStateType GetStatusTriState(SaStatus status) { switch (status) { case SaStatus.Active: return DataValue.TriStateType.Green; case SaStatus.Inactive: return DataValue.TriStateType.Amber; case SaStatus.Deleted: return DataValue.TriStateType.Purple; } return DataValue.TriStateType.Unknown; } //------------------------------------------------------------------- // Utilities. public ItemId GetItemId() { return new ItemId((short)Sbm.ItemType.VehicleClass, Id); } public bool MatchesModel(String makeCode, String model) { if (MakeCode != makeCode) return false; if (Model != model) return false; return true; } public bool MatchesDerivative(String makeCode, String model, String derivative) { if (MakeCode != makeCode) return false; if (Model != model) return false; if (Derivative != derivative) return false; return true; } public abstract String ConstructCaption(String makeCode, String model, String derivative); public String ConstructCaption() { // Make, model and derivative - to populate brief description. return ConstructCaption(MakeCode, Model, Derivative); } //------------------------------------------------------------------- // 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 MakeCode { get { return data.MakeCode; } set { data.MakeCode = value; } } public String Model { get { return data.Model; } set { data.Model = value; } } public String Derivative { get { return data.Derivative; } set { data.Derivative = value; } } public String DescBrief { get { return data.DescBrief; } set { data.DescBrief = value; } } public Sbm.VehicleType VehicleType { get { return data.VehicleType; } set { data.VehicleType = value; } } public String VehicleCategoryCode { get { return data.VehicleCategoryCode; } set { data.VehicleCategoryCode = value; } } public Sbm.VehicleFuelType FuelType { get { return data.FuelType; } set { data.FuelType = value; } } public Sbm.VehicleOdometerUnits OdometerUnits { get { return data.OdometerUnits; } set { data.OdometerUnits = value; } } public short Seats { get { return data.Seats; } set { data.Seats = value; } } public decimal Weight { get { return data.Weight; } set { data.Weight = value; } } public String InsuranceCode { get { return data.InsuranceCode; } set { data.InsuranceCode = value; } } public decimal FirstServiceOdo { get { return data.FirstServiceOdo; } set { data.FirstServiceOdo = value; } } public decimal ServiceOdo { get { return data.ServiceOdo; } set { data.ServiceOdo = value; } } public short ServiceWeeks { get { return data.ServiceWeeks; } set { data.ServiceWeeks = value; } } public decimal AmountRentalCost { get { return data.AmountRentalCost; } set { data.AmountRentalCost = value; } } public SysId UomIdRentalCost { get { return data.UomIdRentalCost; } set { data.UomIdRentalCost = value; } } public decimal AmountRentalPrice { get { return data.AmountRentalPrice; } set { data.AmountRentalPrice = value; } } public SysId UomIdRentalPrice { get { return data.UomIdRentalPrice; } set { data.UomIdRentalPrice = value; } } //------------------------------------------------------------------- // Flags. public bool DescBriefFixed { get { return GetFlag(Flag_DescBriefFixed); } set { SetFlag(Flag_DescBriefFixed, 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 long GetVehicleCount(); public abstract bool HasVehicles(); public abstract bool ClearDependentData(); //------------------------------------------------------------------- // P a r a m s //------------------------------------------------------------------- /// Parameters - used to define the filters that should be applied to a List of Vehicle Classes // List parameters. public enum StatusCat { Any, ActiveOnly, InactiveOnly, NotDeleted, DeletedOnly } /// /// Item list parameters. /// public new class Params : SacsHierarchyItem.Params { // List filtering. public HashSet IdsIncluded { get; } = new HashSet(); public HashSet IdsExcluded { get; } = new HashSet(); /// Generic property search - make, model, derivative etc. public String Search { get; set; } // Item properties. public String MakeCode { get; set; } public String Model { get; set; } public String ModelPartial { get; set; } public String DescBrief { get; set; } public String DescBriefPartial { get; set; } public String Derivative { get; set; } public String VehicleCategoryCode { get; set; } /// Vehicle Class status. public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted; } //------------------------------------------------------------------- } //======================================================================= // V e h i c l e L i s t //======================================================================= public static class SbmVehicleClassList { /// Check whether item exists/locate in list with specified Id. public static bool Find(this List values, SbmVehicleClass vehicleClass) { if (vehicleClass == null) return false; return values.Any(item => item == vehicleClass); } public static bool FindById(this List values, SysId id) { if (!SysId.IsValid(id)) return false; return values.Any(item => item.Id.Equals(id)); } } //======================================================================= }