597 lines
28 KiB
C#
597 lines
28 KiB
C#
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
|
using Sarand.BusinessMgr.Net.Standard.Dbas.Bus;
|
|
using Sarand.BusinessMgr.Net.Standard.Dbas.Internal;
|
|
using Sarand.BusinessMgr.Net.Standard.Dbas.UpdateLog;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using Sarand.Net.Standard.Dbas.Data;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Common;
|
|
using System.Linq;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr
|
|
{
|
|
//=======================================================================
|
|
partial class SbmAssetMgr_Dbas
|
|
{
|
|
//*******************************************************************
|
|
// V e h i c l e E v e n t
|
|
//*******************************************************************
|
|
// Utilities.
|
|
private List<StringPair> GetLogProperties(SbmVehicleEvent vehicleEvent)
|
|
{
|
|
return new List<StringPair>()
|
|
{
|
|
new StringPair("Id",SysId.ToString(vehicleEvent.Id)),
|
|
new StringPair("DescBrief",vehicleEvent.DescBrief),
|
|
new StringPair("Status",vehicleEvent.StatusCode)
|
|
};
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get VehicleEvent.
|
|
public override SbmVehicleEvent GetVehicleEvent(SbmVehicleEvent.Params prm)
|
|
{
|
|
return GetVehicleEvent(GetVehicleEventQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
private SbmVehicleEvent GetVehicleEvent(String filter)
|
|
{
|
|
ClearErrorState();
|
|
long count = GetVehicleEventCount(filter);
|
|
if (count == 0) return null;
|
|
if (count != 1)
|
|
{
|
|
SetErrorState("Multiple Vehicle Events found");
|
|
return null;
|
|
}
|
|
SbmVehicleEvent vehicleEvent = null;
|
|
// Query data.
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
SaVehicleEvent_Db dbVehicleEvent = new SaVehicleEvent_Db(DbInfo);
|
|
dbVehicleEvent.PopulateFrom(dbCommand, aliasVehicleEvent, filter);
|
|
vehicleEvent = CreateVehicleEvent(dbVehicleEvent);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return vehicleEvent;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create VehicleEvent.
|
|
public override SbmVehicleEvent CreateVehicleEvent(SysId vehicleId, Sbm.VehicleEventType vehicleEventType)
|
|
{
|
|
ClearErrorState();
|
|
SbmVehicleEvent vehicleEvent = null;
|
|
if (vehicleEventType > 0)
|
|
vehicleEvent = new SbmVehicleEvent_Dbas(Internals, vehicleId, vehicleEventType, 0);
|
|
else SetErrorState("Asset type not identified");
|
|
return vehicleEvent;
|
|
}
|
|
private SbmVehicleEvent_Dbas CreateVehicleEvent(SaVehicleEvent_Db dbVehicleEvent)
|
|
{
|
|
ClearErrorState();
|
|
SbmVehicleEvent_Dbas vehicleEvent = new SbmVehicleEvent_Dbas(Internals, new SysId(dbVehicleEvent._VehicleId ?? 0), (Sbm.VehicleEventType)dbVehicleEvent._EventType, (ushort)dbVehicleEvent._Flags);
|
|
PopulateFrom(dbVehicleEvent, vehicleEvent);
|
|
return vehicleEvent;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate VehicleEvent.
|
|
public override bool IsValidVehicleEventData(SbmVehicleEvent.Data data, SbmVehicleEvent.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.IsValidVehicleEventData(data, errField)) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Insert VehicleEvent.
|
|
public override bool InsertVehicleEvent(SbmVehicleEvent vehicleEvent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidVehicleEvent(vehicleEvent)) return false;
|
|
if (SysId.IsValid(vehicleEvent.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
SaVehicleEvent_Db dbVehicleEvent = new SaVehicleEvent_Db(DbInfo);
|
|
PopulateTo(dbVehicleEvent, vehicleEvent, dbUpdateInfo);
|
|
if (SaVehicleEvent_Db.FieldsNonId.Contains("Id"))
|
|
{
|
|
// Generate next Id.
|
|
dbVehicleEvent._Id = SysId.ToInt(Database.GetNextId("VehicleEvent", dbUpdateInfo));
|
|
}
|
|
dbVehicleEvent.ExecuteInsertCommand(dbCommand);
|
|
vehicleEvent.Id = new SysId(dbVehicleEvent._Id);
|
|
vehicleEvent.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. " + GetLogProperties(vehicleEvent).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Update VehicleEvent.
|
|
public override bool UpdateVehicleEvent(SbmVehicleEvent vehicleEvent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidVehicleEvent(vehicleEvent)) return false;
|
|
if (!SysId.IsValid(vehicleEvent.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
|
if (!vehicleEvent.Changed)
|
|
{
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. " + GetLogProperties(vehicleEvent).Concat(": ").Concat("", "\n\t"));
|
|
return true;
|
|
}
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve VehicleEvent.
|
|
dbConnection.Open();
|
|
SaVehicleEvent_Db dbVehicleEvent = new SaVehicleEvent_Db(DbInfo);
|
|
dbVehicleEvent.PopulateFrom(dbCommand, aliasVehicleEvent, "Id=" + SysId.ToString(vehicleEvent.Id));
|
|
SbmUpdateLogItemMonitor_VehicleEvent updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleEvent(Internals, CreateVehicleEvent(dbVehicleEvent));
|
|
|
|
// Update properties.
|
|
PopulateTo(dbVehicleEvent, vehicleEvent, dbUpdateInfo);
|
|
dbVehicleEvent.ExecuteUpdateCommand(dbCommand);
|
|
vehicleEvent.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. " + GetLogProperties(vehicleEvent).Concat(": ").Concat("", "\n\t"));
|
|
|
|
// Record updates.
|
|
updateLogMonitor.RecordUpdatedValues(vehicleEvent);
|
|
updateLogMonitor.LogUpdates();
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Delete VehicleEvent.
|
|
public override bool VehicleEventCanBeDeleted(SbmVehicleEvent vehicleEvent)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.VehicleEventCanBeDeleted(vehicleEvent)) return false;
|
|
return true;
|
|
}
|
|
public override bool DeleteVehicleEvent(SbmVehicleEvent vehicleEvent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!VehicleEventCanBeDeleted(vehicleEvent)) return false;
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve prm.
|
|
dbConnection.Open();
|
|
SaVehicleEvent_Db dbVehicleEvent = new SaVehicleEvent_Db(DbInfo);
|
|
dbVehicleEvent.PopulateFrom(dbCommand, aliasVehicleEvent, "Id=" + vehicleEvent.Id.ToString());
|
|
// Delete prm.
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent) + " WHERE Id=" + SysId.ToString(vehicleEvent.Id) + ";";
|
|
dbCommand.ExecuteNonQuery();
|
|
vehicleEvent.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(vehicleEvent).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Copy data properties to and from database.
|
|
private void PopulateTo(SaVehicleEvent_Db dbVehicleEvent, SbmVehicleEvent vehicleEvent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
dbVehicleEvent._Id = vehicleEvent.Id.ToInt();
|
|
dbVehicleEvent._VehicleId = vehicleEvent.VehicleId.ToInt();
|
|
dbVehicleEvent._EventType = (short)vehicleEvent.VehicleEventType;
|
|
dbVehicleEvent._StartOn = vehicleEvent.StartOn;
|
|
dbVehicleEvent._FinishOn = vehicleEvent.FinishOn;
|
|
dbVehicleEvent._Odometer = (int)vehicleEvent.Odometer;
|
|
dbVehicleEvent._DescBrief = vehicleEvent.DescBrief;
|
|
dbVehicleEvent._DescDetail = vehicleEvent.DescDetail;
|
|
dbVehicleEvent._AmountNet = vehicleEvent.AmountNet;
|
|
dbVehicleEvent._TaxCodeId = vehicleEvent.TaxCodeId.ToInt();
|
|
dbVehicleEvent._TaxRate = vehicleEvent.TaxRate;
|
|
dbVehicleEvent._AmountTax = vehicleEvent.AmountTax;
|
|
dbVehicleEvent._AmountTot = vehicleEvent.AmountTot;
|
|
// Common properties.
|
|
dbVehicleEvent._Notes = vehicleEvent.Notes;
|
|
dbVehicleEvent._Status = SacsSystem.GetStatusCode(vehicleEvent.Status);
|
|
dbVehicleEvent._Flags = (short)vehicleEvent.Flags;
|
|
if (!SysId.IsValid(vehicleEvent.Id))
|
|
{
|
|
dbVehicleEvent._CreateOn = DateTime.UtcNow;
|
|
dbVehicleEvent._CreateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbVehicleEvent._CreateHost = dbUpdateInfo.Host;
|
|
}
|
|
dbVehicleEvent._UpdateOn = DateTime.UtcNow;
|
|
dbVehicleEvent._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbVehicleEvent._UpdateHost = dbUpdateInfo.Host;
|
|
}
|
|
private void PopulateFrom(SaVehicleEvent_Db dbVehicleEvent, SbmVehicleEvent vehicleEvent)
|
|
{
|
|
//vehicleEvent.Id = new SysId(dbVehicleEvent._Id);
|
|
vehicleEvent.VehicleId = new SysId(dbVehicleEvent._VehicleId ?? 0);
|
|
vehicleEvent.VehicleEventType = (Sbm.VehicleEventType)(dbVehicleEvent._EventType ?? 0);
|
|
vehicleEvent.StartOn = dbVehicleEvent._StartOn ?? default(DateTime);
|
|
vehicleEvent.FinishOn = dbVehicleEvent._FinishOn ?? default(DateTime);
|
|
vehicleEvent.Odometer = dbVehicleEvent._Odometer ?? 0;
|
|
vehicleEvent.DescBrief = dbVehicleEvent._DescBrief;
|
|
vehicleEvent.DescDetail = dbVehicleEvent._DescDetail;
|
|
vehicleEvent.AmountNet = dbVehicleEvent._AmountNet ?? 0.0m;
|
|
vehicleEvent.TaxCodeId = new SysId(dbVehicleEvent._TaxCodeId ?? 0);
|
|
vehicleEvent.TaxRate = dbVehicleEvent._TaxRate ?? 0.0m;
|
|
vehicleEvent.AmountTax = dbVehicleEvent._AmountTax ?? 0.0m;
|
|
vehicleEvent.AmountTot = dbVehicleEvent._AmountTot ?? 0.0m;
|
|
// Common properties.
|
|
vehicleEvent.Notes = dbVehicleEvent._Notes;
|
|
vehicleEvent.Status = SacsSystem.GetStatusForCode(dbVehicleEvent._Status);
|
|
vehicleEvent.SetCreateStamp(dbVehicleEvent._CreateOn ?? default(DateTime), new SysId(dbVehicleEvent._CreateBy ?? 0), dbVehicleEvent._CreateHost);
|
|
vehicleEvent.SetUpdateStamp(dbVehicleEvent._UpdateOn ?? default(DateTime), new SysId(dbVehicleEvent._UpdateBy ?? 0), dbVehicleEvent._UpdateHost);
|
|
vehicleEvent.AcceptChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Column definitions.
|
|
private static readonly String aliasVehicleEvent = "aVehEvt";
|
|
private static readonly String aliasVehicleEvent_Vehicle = "VehEvt_Veh";
|
|
private static readonly String prefixVehicleEvent_Vehicle = aliasVehicleEvent_Vehicle + "_";
|
|
private static readonly String aliasVehicleEvent_TaxCode = "VehEvt_TxC";
|
|
private static readonly String prefixVehicleEvent_TaxCode = aliasVehicleEvent_TaxCode + "_";
|
|
|
|
// Column definition population.
|
|
private void SetVehicleEventColDfn
|
|
(ColumnDfn col, String caption, int width, SbmDbDfn.ColumnIdx dbCol,
|
|
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
|
|
String alias = "", String prefix = "")
|
|
{
|
|
if (String.IsNullOrEmpty(alias) && SbmDbDfn.GetTableForColumn(dbCol) == SbmDbDfn.TableIdx.SaVehicleEvent)
|
|
alias = aliasVehicleEvent;
|
|
col.Set(caption, width, (int)dbCol, prefix + SbmDbDfn.GetColumnName(dbCol, false), SbmDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
|
|
if (dataType == DataValue.DataType.String && dbCol != SbmDbDfn.ColumnIdx.Unknown)
|
|
col.MaxLength = (int)SbmDbDfn.GetColTextLen(dbCol);
|
|
}
|
|
//-------------------------------------------------------------------
|
|
// Getting prm column definition.
|
|
public override ColumnDfn GetVehicleEventColumnDfn(SbmVehicleEvent.Column columnId, string caption = "", int width = 0)
|
|
{
|
|
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
|
|
switch (columnId)
|
|
{
|
|
case SbmVehicleEvent.Column.Pos:
|
|
SetVehicleEventColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
|
columnDfn.ReadOnly = true;
|
|
columnDfn.Resizable = false;
|
|
break;
|
|
case SbmVehicleEvent.Column.Id:
|
|
SetVehicleEventColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.SaVehicleEvent_Id, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
|
|
// VehicleEvent Properties.
|
|
|
|
case SbmVehicleEvent.Column.VehicleId:
|
|
SetVehicleEventColDfn(columnDfn, "Vehicle Id", 45, SbmDbDfn.ColumnIdx.SaVehicleEvent_VehicleId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicleEvent.Column.Vehicle_RegNumber:
|
|
SetVehicleEventColDfn(columnDfn, "Reg", 70, SbmDbDfn.ColumnIdx.SaVehicle_RegNumber, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicleEvent_Vehicle, prefixVehicleEvent_Vehicle);
|
|
break;
|
|
case SbmVehicleEvent.Column.EventTypeDesc:
|
|
SetVehicleEventColDfn(columnDfn, "Type", 90, SbmDbDfn.ColumnIdx.SaVehicleEvent_EventType, ColumnAlignment.Center);
|
|
break;
|
|
case SbmVehicleEvent.Column.StartOnDateTime:
|
|
SetVehicleEventColDfn(columnDfn, "Event on", 100, SbmDbDfn.ColumnIdx.SaVehicleEvent_StartOn, ColumnAlignment.Center, DataValue.DataType.DateTime);
|
|
break;
|
|
case SbmVehicleEvent.Column.StartOnDate:
|
|
SetVehicleEventColDfn(columnDfn, "Event on", 75, SbmDbDfn.ColumnIdx.SaVehicleEvent_StartOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicleEvent.Column.StartOnTime:
|
|
SetVehicleEventColDfn(columnDfn, "Event at", 50, SbmDbDfn.ColumnIdx.SaVehicleEvent_StartOn, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
break;
|
|
case SbmVehicleEvent.Column.FinishOnDateTime:
|
|
SetVehicleEventColDfn(columnDfn, "Finish", 100, SbmDbDfn.ColumnIdx.SaVehicleEvent_FinishOn, ColumnAlignment.Center, DataValue.DataType.DateTime);
|
|
break;
|
|
case SbmVehicleEvent.Column.FinishOnDate:
|
|
SetVehicleEventColDfn(columnDfn, "Finish", 75, SbmDbDfn.ColumnIdx.SaVehicleEvent_FinishOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicleEvent.Column.FinishOnTime:
|
|
SetVehicleEventColDfn(columnDfn, "Finish", 50, SbmDbDfn.ColumnIdx.SaVehicleEvent_FinishOn, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
break;
|
|
case SbmVehicleEvent.Column.Odometer:
|
|
SetVehicleEventColDfn(columnDfn, "Odo", 65, SbmDbDfn.ColumnIdx.SaVehicleEvent_Odometer, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicleEvent.Column.DescBrief:
|
|
SetVehicleEventColDfn(columnDfn, "Desc", 160, SbmDbDfn.ColumnIdx.SaVehicleEvent_DescBrief);
|
|
break;
|
|
case SbmVehicleEvent.Column.DescDetail:
|
|
SetVehicleEventColDfn(columnDfn, "Detailed desc", 240, SbmDbDfn.ColumnIdx.SaVehicleEvent_DescDetail);
|
|
break;
|
|
case SbmVehicleEvent.Column.AmountNet:
|
|
SetVehicleEventColDfn(columnDfn, "Amount (net)", 80, SbmDbDfn.ColumnIdx.SaVehicleEvent_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmVehicleEvent.Column.TaxCodeId:
|
|
SetVehicleEventColDfn(columnDfn, "Tax Code#", 45, SbmDbDfn.ColumnIdx.SaVehicleEvent_TaxCodeId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicleEvent.Column.TaxCode_Code:
|
|
SetVehicleEventColDfn(columnDfn, "Tax code", 45, SbmDbDfn.ColumnIdx.SaVehicleEvent_Id, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicleEvent_TaxCode, prefixVehicleEvent_TaxCode);
|
|
break;
|
|
case SbmVehicleEvent.Column.TaxRate:
|
|
SetVehicleEventColDfn(columnDfn, "Tax rate", 80, SbmDbDfn.ColumnIdx.SaVehicleEvent_TaxRate, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmVehicleEvent.Column.AmountTax:
|
|
SetVehicleEventColDfn(columnDfn, "Amount (tax)", 80, SbmDbDfn.ColumnIdx.SaVehicleEvent_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmVehicleEvent.Column.AmountTot:
|
|
SetVehicleEventColDfn(columnDfn, "Amount (tot)", 80, SbmDbDfn.ColumnIdx.SaVehicleEvent_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
// Common properties.
|
|
case SbmVehicleEvent.Column.Notes:
|
|
SetVehicleEventColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.SaVehicleEvent_Notes);
|
|
break;
|
|
case SbmVehicleEvent.Column.Flag:
|
|
SetVehicleEventColDfn(columnDfn, "Flags", 40, SbmDbDfn.ColumnIdx.SaVehicleEvent_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicleEvent.Column.Status:
|
|
SetVehicleEventColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicleEvent_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmVehicleEvent.Column.Status_Desc:
|
|
SetVehicleEventColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicleEvent_Status);
|
|
break;
|
|
case SbmVehicleEvent.Column.Status_Ind:
|
|
SetVehicleEventColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicleEvent_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmVehicleEvent.Column.CreateOn_Date:
|
|
SetVehicleEventColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.SaVehicleEvent_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmVehicleEvent.Column.UpdateOn_Date:
|
|
SetVehicleEventColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.SaVehicleEvent_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
}
|
|
if (!String.IsNullOrEmpty(caption))
|
|
columnDfn.Caption = caption;
|
|
if (width > 0)
|
|
columnDfn.Width = width;
|
|
return columnDfn;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// VehicleEvent query filter.
|
|
public override List<string> GetVehicleEventQueryFilter(SbmVehicleEvent.Params prm)
|
|
{
|
|
List<String> filter = new List<String>();
|
|
|
|
// VehicleEvent Id.
|
|
String includedIds = prm.IdsIncluded.Concat(",");
|
|
String colVehicleEvent_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Id, aliasVehicleEvent);
|
|
if (!includedIds.IsEmpty())
|
|
filter.Add(colVehicleEvent_Id + " IN (" + includedIds + ")");
|
|
String excludedIds = prm.IdsExcluded.Concat(",");
|
|
if (!excludedIds.IsEmpty())
|
|
filter.Add(colVehicleEvent_Id + " NOT IN (" + excludedIds + ")");
|
|
// Vehicle:
|
|
if (SysId.IsValid(prm.VehicleId))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_VehicleId, aliasVehicleEvent) + "=" + prm.VehicleId.ToString());
|
|
// Event type:
|
|
if (prm.VehicleEventType > 0)
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_EventType, aliasVehicleEvent) + "=" + ((int)prm.VehicleEventType).ToString());
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Dates:
|
|
String colVehicleEvent_StartOn = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_StartOn, aliasVehicleEvent);
|
|
String colVehicleEvent_FinishOn = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_FinishOn, aliasVehicleEvent);
|
|
if (prm.EventOn.IsValid())
|
|
{
|
|
filter.Add(colVehicleEvent_StartOn + "<" + DbQuery.FormatDateForCondition(prm.EventOn.IncrementDate(1)));
|
|
filter.Add(colVehicleEvent_FinishOn + ">=" + DbQuery.FormatDateForCondition(prm.EventOn));
|
|
}
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
|
return filter;
|
|
}
|
|
|
|
// VehicleEvent sort columns.
|
|
public List<String> GetVehicleEventSortColumns(SbmVehicleEvent.Params prm)
|
|
{
|
|
// Sort sequence:
|
|
List<String> sortColumnCodes = new List<String>();
|
|
foreach (var columnDfn in prm.SortColumns)
|
|
{
|
|
// Need to ensure correct alias used for VehicleEvent columns in case of conflict.
|
|
String sortCol = String.Empty;
|
|
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.SaVehicleEvent)
|
|
{
|
|
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasVehicleEvent);
|
|
}
|
|
else
|
|
{
|
|
sortCol = columnDfn.DataName;
|
|
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
|
|
sortCol = columnDfn.SortDataName;
|
|
}
|
|
if (!sortCol.IsEmpty())
|
|
{
|
|
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
|
|
sortColumnCodes.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
|
}
|
|
}
|
|
sortColumnCodes.RemoveBlanks();
|
|
if (sortColumnCodes.IsEmpty())
|
|
{
|
|
// Default sort columns:
|
|
sortColumnCodes.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_EventType, aliasVehicleEvent) + " ASC");
|
|
}
|
|
return sortColumnCodes;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// VehicleEvent count.
|
|
private long GetVehicleEventCount(String filter)
|
|
{
|
|
ClearErrorState();
|
|
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent) + " As " + aliasVehicleEvent, filter);
|
|
}
|
|
public override long GetVehicleEventCount(SbmVehicleEvent.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
return GetVehicleEventCount(GetVehicleEventQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// VehicleEvent list.
|
|
public override List<SbmVehicleEvent> GetVehicleEventList(SbmVehicleEvent.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
List<SbmVehicleEvent> vehicleEvents = new List<SbmVehicleEvent>();
|
|
DbQuery qry = new DbQuery(Database.DbmsType);
|
|
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent), aliasVehicleEvent);
|
|
SaVehicleEvent_Db dbVehicleEvent = new SaVehicleEvent_Db(DbInfo);
|
|
qry.Columns.AddRange(dbVehicleEvent.ExistingColumnNames);
|
|
qry.Filters.AddRange(GetVehicleEventQueryFilter(prm));
|
|
qry.OrderBy.AddRange(GetVehicleEventSortColumns(prm));
|
|
// Query data.
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
|
|
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
|
{
|
|
while (dbDataReader.Read())
|
|
{
|
|
dbVehicleEvent = new SaVehicleEvent_Db(DbInfo);
|
|
dbVehicleEvent.PopulateFrom(dbDataReader);
|
|
vehicleEvents.Add(CreateVehicleEvent(dbVehicleEvent));
|
|
}
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return vehicleEvents;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// VehicleEvent query execution.
|
|
public override DbResultSet VehicleEventExecuteQuery(List<ColumnDfn> columns, SbmVehicleEvent.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
//---------------------------------------------------------------------
|
|
// Construct build database query.
|
|
DbQuery query = new DbQuery(Database.DbmsType);
|
|
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent), aliasVehicleEvent);
|
|
|
|
// VehicleEvent Properties - add columns as defined in query list.
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Id, aliasVehicleEvent));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_VehicleId, aliasVehicleEvent));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_EventType, aliasVehicleEvent));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_StartOn, aliasVehicleEvent));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_FinishOn, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.Odometer))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Odometer, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.DescBrief))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_DescBrief, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.DescDetail))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_DescDetail, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.AmountNet))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_AmountNet, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.TaxCodeId))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_TaxCodeId, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.TaxRate))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_TaxRate, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.AmountTax))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_AmountTax, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.AmountTot))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_AmountTot, aliasVehicleEvent));
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Vehicle details:
|
|
bool hasVehicleColumns = false;
|
|
if (!hasVehicleColumns) hasVehicleColumns = columns.HasId((int)SbmVehicleEvent.Column.Vehicle_RegNumber);
|
|
if (hasVehicleColumns)
|
|
{
|
|
DbQueryJoin joinVeh = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinVeh.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicle), aliasVehicleEvent_Vehicle);
|
|
joinVeh.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicleEvent_Vehicle) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_VehicleId, aliasVehicleEvent));
|
|
query.Joins.Add(joinVeh);
|
|
// Add the Vehicle columns:
|
|
List<SbmDbDfn.ColumnIdx> dbColumns = new List<SbmDbDfn.ColumnIdx>();
|
|
dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicle_RegNumber);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in dbColumns)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasVehicleEvent_Vehicle), prefixVehicleEvent_Vehicle + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Tax Code details:
|
|
bool hasTaxCodeColumns = false;
|
|
if (!hasTaxCodeColumns) hasTaxCodeColumns = columns.HasId((int)SbmVehicleEvent.Column.TaxCode_Code);
|
|
if (hasTaxCodeColumns)
|
|
{
|
|
}
|
|
|
|
// Common Properties
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.Notes))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Notes, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.Flag))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Flags, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.Status) || columns.HasId((int)SbmVehicleEvent.Column.Status_Desc) || columns.HasId((int)SbmVehicleEvent.Column.Status_Ind))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Status, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.CreateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_CreateOn, aliasVehicleEvent));
|
|
if (columns.HasId((int)SbmVehicleEvent.Column.UpdateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_UpdateOn, aliasVehicleEvent));
|
|
|
|
//---------------------------------------------------------------------
|
|
// Populate filter.
|
|
query.Filters.AddRange(GetVehicleEventQueryFilter(prm));
|
|
|
|
if (prm.IdsIncluded.Count != 1)
|
|
{
|
|
// Configure sort sequence.
|
|
foreach (String sortColumn in GetVehicleEventSortColumns(prm))
|
|
query.OrderBy.Add(sortColumn);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
//return new DbResultSet_DataTableReader(Database, query.BuildQuery());
|
|
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|