Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Bus/SbmVehicleClass.cs
T

475 lines
15 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 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,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
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<SaStatus> vehicleClassStatuses = new List<SaStatus>()
{
SaStatus.Active,
SaStatus.Inactive,
SaStatus.Deleted,
};
public static SaStatus DefaultStatus { get { return SaStatus.Active; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(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 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
//-------------------------------------------------------------------
/// <summary>Parameters - used to define the filters that should be applied to a List of Vehicle Classes</summary>
// List parameters.
public enum StatusCat
{
Any,
ActiveOnly,
InactiveOnly,
NotDeleted,
DeletedOnly
}
/// <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>();
/// <summary>Generic property search - make, model, derivative etc.</summary>
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; }
/// <summary>Vehicle Class status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
// 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 SbmVehicleClassList
{
/// <summary>Check whether currency exists/locate in list with specified Id.</summary>
public static bool Find(this List<SbmVehicleClass> values, SbmVehicleClass vehicleClass)
{
if (vehicleClass == null) return false;
return (values.Find(item => item == vehicleClass) != null);
}
public static bool FindById(this List<SbmVehicleClass> values, SysId id)
{
if (!SysId.IsValid(id)) return false;
return values.Exists(item => item.Id.Equals(id));
}
}
//=======================================================================
}