616 lines
19 KiB
C#
616 lines
19 KiB
C#
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,
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Properties other than common.</summary>
|
|
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<SaStatus> vehicleStatuses = new List<SaStatus>()
|
|
{
|
|
SaStatus.Active,
|
|
SaStatus.Cancelled,
|
|
};
|
|
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
|
|
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(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
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Parameters - used to define the filters that should be applied to a List of Vehicles</summary>
|
|
// List parameters.
|
|
public enum StatusCat
|
|
{
|
|
Any,
|
|
}
|
|
/// <summary>
|
|
/// Item list parameters.
|
|
/// </summary>
|
|
public new class Params : SacsHierarchyItem.Params
|
|
{
|
|
// List filtering.
|
|
public List<SysId> IdsIncluded { get; } = new List<SysId>();
|
|
public List<SysId> IdsExcluded { get; } = new List<SysId>();
|
|
// 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; }
|
|
/// <summary>Vehicle status.</summary>
|
|
public StatusCat StatusCat { get; set; } = StatusCat.Any;
|
|
// Utilities.
|
|
public List<StringPair> GetDisplayValues()
|
|
{
|
|
List<StringPair> values = new List<StringPair>();
|
|
return values;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
|
|
//=======================================================================
|
|
// V e h i c l e L i s t
|
|
//=======================================================================
|
|
public static class SbmVehicleList
|
|
{
|
|
/// <summary>Check whether currency exists/locate in list with specified Id.</summary>
|
|
public static bool Find(this List<SbmVehicle> values, SbmVehicle vehicle)
|
|
{
|
|
if (vehicle == null) return false;
|
|
return (values.Find(item => item == vehicle) != null);
|
|
}
|
|
public static bool FindById(this List<SbmVehicle> values, SysId id)
|
|
{
|
|
if (!SysId.IsValid(id)) return false;
|
|
return values.Exists(item => item.Id.Equals(id));
|
|
}
|
|
}
|
|
|
|
//=======================================================================
|
|
}
|