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

359 lines
11 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;
using System.Linq;
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
{
//=======================================================================
public abstract class SbmVehicleEvent : SbmHierarchyItem
{
//-------------------------------------------------------------------
// Columns.
public enum Column
{
Hidden,
Pos,
Id,
// VehicleEvent.
VehicleId,
Vehicle_RegNumber,
EventTypeDesc,
StartOnDateTime,
StartOnDate,
StartOnTime,
FinishOnDateTime,
FinishOnDate,
FinishOnTime,
Odometer,
DescBrief,
DescDetail,
AmountNet,
TaxCodeId,
TaxCode_Code,
TaxRate,
AmountTax,
AmountTot,
// Common properties.
Notes,
Flag,
Status,
Status_Ind,
Status_Desc,
CreateOn_Date,
UpdateOn_Date,
}
//-------------------------------------------------------------------
/// <summary>Properties other than common.</summary>
public class DataProperties
{
public SysId VehicleId { get; set; } = new SysId();
public Sbm.VehicleEventType VehicleEventType { get; set; } = Sbm.VehicleEventType.Unknown;
public DateTime StartOn { get; set; } = DateTime.MinValue;
public DateTime FinishOn { get; set; } = DateTime.MinValue;
public decimal Odometer { get; set; } = 0.0m;
public String DescBrief { get; set; } = "";
public String DescDetail { get; set; } = "";
public decimal AmountNet { get; set; } = 0.0m;
public SysId TaxCodeId { get; set; } = new SysId();
public decimal TaxRate { get; set; } = 0.0m;
public decimal AmountTax { get; set; } = 0.0m;
public decimal AmountTot { get; set; } = 0.0m;
}
// Data.
public new class Data : SacsHierarchyItem.Data
{
// Data members.
private readonly DataProperties data = new DataProperties();
// Construction.
public Data()
{
Status = DefaultStatus;
}
public SysId VehicleId
{
get { return data.VehicleId; }
set { CheckChanged(data.VehicleId, value); data.VehicleId = value; }
}
public Sbm.VehicleEventType VehicleEventType
{
get { return data.VehicleEventType; }
set { CheckChanged((int)data.VehicleEventType, (int)value); data.VehicleEventType = value; }
}
public DateTime StartOn
{
get { return data.StartOn; }
set { CheckChanged(data.StartOn, value); data.StartOn = value; }
}
public DateTime FinishOn
{
get { return data.FinishOn; }
set { CheckChanged(data.FinishOn, value); data.FinishOn = value; }
}
public decimal Odometer
{
get { return data.Odometer; }
set { CheckChanged(data.Odometer, value); data.Odometer = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { CheckChanged(data.DescBrief, value); data.DescBrief = value; }
}
public String DescDetail
{
get { return data.DescDetail; }
set { CheckChanged(data.DescDetail, value); data.DescDetail = value; }
}
public decimal AmountNet
{
get { return data.AmountNet; }
set { CheckChanged(data.AmountNet, value); data.AmountNet = value; }
}
public SysId TaxCodeId
{
get { return data.TaxCodeId; }
set { CheckChanged(data.TaxCodeId, value); data.TaxCodeId = value; }
}
public decimal TaxRate
{
get { return data.TaxRate; }
set { CheckChanged(data.TaxRate, value); data.TaxRate = value; }
}
public decimal AmountTax
{
get { return data.AmountTax; }
set { CheckChanged(data.AmountTax, value); data.AmountTax = value; }
}
public decimal AmountTot
{
get { return data.AmountTot; }
set { CheckChanged(data.AmountTot, value); data.AmountTot = value; }
}
internal void PopulateFrom(Data data)
{
VehicleId = data.VehicleId;
VehicleEventType = data.VehicleEventType;
StartOn = data.StartOn;
FinishOn = data.FinishOn;
Odometer = data.Odometer;
DescBrief = data.DescBrief;
DescDetail = data.DescDetail;
AmountNet = data.AmountNet;
TaxCodeId = data.TaxCodeId;
TaxRate = data.TaxRate;
AmountTax = data.AmountTax;
AmountTot = data.AmountTot;
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 VehicleId { get; set; } = ValidValue.Valid;
public ValidValue VehicleEventType { get; set; } = ValidValue.Valid;
public ValidValue StartOn { get; set; } = ValidValue.Valid;
public ValidValue FinishOn { get; set; } = ValidValue.Valid;
public ValidValue Odometer { get; set; } = ValidValue.Valid;
public ValidValue DescBrief { get; set; } = ValidValue.Valid;
public ValidValue DescDetail { get; set; } = ValidValue.Valid;
public ValidValue AmountNet { get; set; } = ValidValue.Valid;
public ValidValue TaxCodeId { get; set; } = ValidValue.Valid;
public ValidValue TaxRate { get; set; } = ValidValue.Valid;
public ValidValue AmountTax { get; set; } = ValidValue.Valid;
public ValidValue AmountTot { get; set; } = ValidValue.Valid;
}
//-------------------------------------------------------------------
// Data members.
private readonly Data data = new Data();
//-------------------------------------------------------------------
// Construction.
protected SbmVehicleEvent(ISbmUserOrganisationContext userContext, SysId vehicleId, Sbm.VehicleEventType vehicleEventType) : base(userContext, vehicleId)
{
base.SetData(data);
VehicleId = vehicleId;
VehicleEventType = vehicleEventType;
Status = DefaultStatus;
}
//-------------------------------------------------------------------
// VehicleEvent status.
private static readonly List<SaStatus> vehicleEventStatuses = 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>(vehicleEventStatuses); } }
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.
public SbmItemId GetItemId()
{
return new SbmItemId(Sbm.ItemType.VehicleEvent, Id);
}
//-------------------------------------------------------------------
// 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 SysId VehicleId
{
get { return data.VehicleId; }
set { data.VehicleId = value; }
}
public Sbm.VehicleEventType VehicleEventType
{
get { return data.VehicleEventType; }
set { data.VehicleEventType = value; }
}
public DateTime StartOn
{
get { return data.StartOn; }
set { data.StartOn = value; }
}
public DateTime FinishOn
{
get { return data.FinishOn; }
set { data.FinishOn = value; }
}
public decimal Odometer
{
get { return data.Odometer; }
set { data.Odometer = value; }
}
public String DescBrief
{
get { return data.DescBrief; }
set { data.DescBrief = value; }
}
public String DescDetail
{
get { return data.DescDetail; }
set { data.DescDetail = value; }
}
public decimal AmountNet
{
get { return data.AmountNet; }
set { data.AmountNet = value; }
}
public SysId TaxCodeId
{
get { return data.TaxCodeId; }
set { data.TaxCodeId = value; }
}
public decimal TaxRate
{
get { return data.TaxRate; }
set { data.TaxRate = value; }
}
public decimal AmountTax
{
get { return data.AmountTax; }
set { data.AmountTax = value; }
}
public decimal AmountTot
{
get { return data.AmountTot; }
set { data.AmountTot = value; }
}
//-------------------------------------------------------------------
// A s s o c i a t e d D a t a E l e m e n t s
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// <summary>Parameters - used to define the filters that should be applied to a List of Vehicle Events</summary>
// List parameters.
public enum StatusCat
{
Any,
}
/// <summary>
/// Item list parameters.
/// </summary>
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
// VehicleEvent.
public SysId VehicleId { get; set; }
public Sbm.VehicleEventType VehicleEventType { get; set; } = Sbm.VehicleEventType.Any;
public DateTime EventOn { get; set; }
public bool RestrictToActive { get; set; }
/// <summary>Vehicle Event status.</summary>
public StatusCat StatusCat { get; set; } = StatusCat.Any;
}
//-------------------------------------------------------------------
}
//=======================================================================
// V e h i c l e E v e n t L i s t
//=======================================================================
public static class SbmVehicleEventList
{
/// <summary>Check whether item exists/locate in list with specified Id.</summary>
public static bool Find(this List<SbmVehicleEvent> values, SbmVehicleEvent vehicleEvent)
{
if (vehicleEvent == null) return false;
return values.Any(item => item == vehicleEvent);
}
public static bool FindById(this List<SbmVehicleEvent> values, SysId id)
{
if (!SysId.IsValid(id)) return false;
return values.Any(item => item.Id.Equals(id));
}
}
//=======================================================================
}