802 lines
40 KiB
C#
802 lines
40 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.ItemData;
|
|
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
|
|
//*******************************************************************
|
|
// Utilities.
|
|
private List<StringPair> GetLogProperties(SbmVehicle vehicle)
|
|
{
|
|
return new List<StringPair>()
|
|
{
|
|
new StringPair("Id",SysId.ToString(vehicle.Id)),
|
|
new StringPair("Vin",vehicle.Vin),
|
|
new StringPair("Status",vehicle.StatusCode)
|
|
};
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Vehicle.
|
|
public override SbmVehicle GetVehicle(SbmVehicle.Params prm)
|
|
{
|
|
return GetVehicle(GetVehicleQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
private SbmVehicle GetVehicle(String filter)
|
|
{
|
|
ClearErrorState();
|
|
long count = GetVehicleCount(filter);
|
|
if (count == 0) return null;
|
|
if (count != 1)
|
|
{
|
|
SetErrorState("Multiple Vehicles found");
|
|
return null;
|
|
}
|
|
SbmVehicle vehicle = null;
|
|
// Query data.
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
SaVehicle_Db dbVehicle = new SaVehicle_Db(DbInfo);
|
|
dbVehicle.PopulateFrom(dbCommand, aliasVehicle, filter);
|
|
vehicle = CreateVehicle(dbVehicle);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn(GetType().Name + ".GetVehicle\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message);
|
|
}
|
|
}
|
|
return vehicle;
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create Vehicle.
|
|
public override SbmVehicle CreateVehicle()
|
|
{
|
|
ClearErrorState();
|
|
return new SbmVehicle_Dbas(Internals, new SysId(), 0);
|
|
}
|
|
private SbmVehicle_Dbas CreateVehicle(SaVehicle_Db dbVehicle)
|
|
{
|
|
ClearErrorState();
|
|
SbmVehicle_Dbas vehicle = new SbmVehicle_Dbas(Internals, new SysId(dbVehicle._Id), (ushort)dbVehicle._Flags);
|
|
PopulateFrom(dbVehicle, vehicle);
|
|
return vehicle;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate Vehicle.
|
|
public override bool IsValidVehicleData(SbmVehicle.Data data, SbmVehicle.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.IsValidVehicleData(data, errField)) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Insert Vehicle.
|
|
public override bool InsertVehicle(SbmVehicle vehicle, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
String fn = GetType().Name + ".InsertVehicle";
|
|
ClearErrorState();
|
|
if (!IsValidVehicle(vehicle)) return false;
|
|
if (SysId.IsValid(vehicle.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
SaVehicle_Db dbVehicle = new SaVehicle_Db(DbInfo);
|
|
PopulateTo(dbVehicle, vehicle, dbUpdateInfo);
|
|
if (SaVehicle_Db.FieldsNonId.Contains("Id"))
|
|
{
|
|
// Generate next Id.
|
|
dbVehicle._Id = SysId.ToInt(db.GetNextId("Vehicle", dbUpdateInfo));
|
|
}
|
|
dbVehicle.ExecuteInsertCommand(dbCommand);
|
|
vehicle.Id = new SysId(dbVehicle._Id);
|
|
vehicle.Changed = false;
|
|
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(vehicle).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Update Vehicle.
|
|
public override bool UpdateVehicle(SbmVehicle vehicle, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
String fn = GetType().Name + ".UpdateVehicle";
|
|
ClearErrorState();
|
|
if (!IsValidVehicle(vehicle)) return false;
|
|
if (!SysId.IsValid(vehicle.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
|
if (!vehicle.Changed)
|
|
{
|
|
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(vehicle).Concat(": ").Concat("", "\n\t"));
|
|
return true;
|
|
}
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve Vehicle.
|
|
dbConnection.Open();
|
|
SaVehicle_Db dbVehicle = new SaVehicle_Db(DbInfo);
|
|
dbVehicle.PopulateFrom(dbCommand, aliasVehicle, "Id=" + SysId.ToString(vehicle.Id));
|
|
SbmUpdateLogItemMonitor_Vehicle updateLogMonitor = new SbmUpdateLogItemMonitor_Vehicle(Internals, CreateVehicle(dbVehicle));
|
|
|
|
// Update properties.
|
|
PopulateTo(dbVehicle, vehicle, dbUpdateInfo);
|
|
dbVehicle.ExecuteUpdateCommand(dbCommand);
|
|
vehicle.Changed = false;
|
|
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(vehicle).Concat(": ").Concat("", "\n\t"));
|
|
|
|
// Record updates.
|
|
updateLogMonitor.RecordUpdatedValues(vehicle);
|
|
updateLogMonitor.LogUpdates();
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Delete Vehicle.
|
|
public override bool VehicleCanBeDeleted(SbmVehicle vehicle)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.VehicleCanBeDeleted(vehicle)) return false;
|
|
return true;
|
|
}
|
|
public override bool DeleteVehicle(SbmVehicle vehicle, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
String fn = GetType().Name + ".DeleteVehicle";
|
|
ClearErrorState();
|
|
if (!VehicleCanBeDeleted(vehicle)) return false;
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve prm.
|
|
dbConnection.Open();
|
|
SaVehicle_Db dbVehicle = new SaVehicle_Db(DbInfo);
|
|
dbVehicle.PopulateFrom(dbCommand, aliasVehicle, "Id=" + vehicle.Id.ToString());
|
|
// Delete prm.
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicle) + " WHERE Id=" + SysId.ToString(vehicle.Id) + ";";
|
|
dbCommand.ExecuteNonQuery();
|
|
vehicle.Changed = false;
|
|
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(vehicle).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Copy data properties to and from database.
|
|
private void PopulateTo(SaVehicle_Db dbVehicle, SbmVehicle vehicle, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
dbVehicle._Id = vehicle.Id.ToInt();
|
|
dbVehicle._VehicleClassId = vehicle.VehicleClassId.ToInt();
|
|
dbVehicle._RegNumber = vehicle.RegNumber;
|
|
dbVehicle._VIN = vehicle.Vin;
|
|
dbVehicle._CapCode = vehicle.CapCode;
|
|
dbVehicle._KeyNumber = vehicle.KeyNumber;
|
|
dbVehicle._KeyLocation = vehicle.KeyLocation;
|
|
dbVehicle._EngineNumber = vehicle.EngineNumber;
|
|
dbVehicle._EngineCapacity = vehicle.EngineCapacity;
|
|
dbVehicle._Seats = vehicle.Seats;
|
|
dbVehicle._Weight = vehicle.Weight;
|
|
dbVehicle._ManufactureYear = vehicle.ManufactureYear;
|
|
dbVehicle._BuildOn = vehicle.BuildOn;
|
|
dbVehicle._FirstRegisterOn = vehicle.FirstRegisterOn;
|
|
dbVehicle._RegisterOn = vehicle.RegisterOn;
|
|
dbVehicle._RegNumberPrev = vehicle.RegNumberPrev;
|
|
dbVehicle._PurchaseOdo = (int)vehicle.PurchaseOdo;
|
|
dbVehicle._TachoCode = vehicle.TachoCode;
|
|
dbVehicle._TachoId = vehicle.TachoId;
|
|
dbVehicle._LastServiceOdo = (int)vehicle.LastServiceOdo;
|
|
dbVehicle._LastServiceOn = vehicle.LastServiceOn;
|
|
dbVehicle._NextServiceOdo = (int)vehicle.NextServiceOdo;
|
|
dbVehicle._NextServiceOn = vehicle.NextServiceOn;
|
|
dbVehicle._MotOn = vehicle.MotOn;
|
|
dbVehicle._MotNo = vehicle.MotNo;
|
|
dbVehicle._NextTaxOn = vehicle.NextTaxOn;
|
|
dbVehicle._LatestOdo = (int)vehicle.LatestOdo;
|
|
dbVehicle._LatestOdoOn = vehicle.LatestOdoOn;
|
|
// Common properties.
|
|
dbVehicle._Notes = vehicle.Notes;
|
|
dbVehicle._Status = SacsSystem.GetStatusCode(vehicle.Status);
|
|
dbVehicle._Flags = (short)vehicle.Flags;
|
|
if (!SysId.IsValid(vehicle.Id))
|
|
{
|
|
dbVehicle._CreateOn = DateTime.UtcNow;
|
|
dbVehicle._CreateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbVehicle._CreateHost = dbUpdateInfo.Host;
|
|
}
|
|
dbVehicle._UpdateOn = DateTime.UtcNow;
|
|
dbVehicle._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbVehicle._UpdateHost = dbUpdateInfo.Host;
|
|
}
|
|
private void PopulateFrom(SaVehicle_Db dbVehicle, SbmVehicle vehicle)
|
|
{
|
|
//vehicle.Id = new SysId(dbVehicle._Id);
|
|
vehicle.VehicleClassId = new SysId(dbVehicle._VehicleClassId);
|
|
vehicle.RegNumber = dbVehicle._RegNumber;
|
|
vehicle.Vin = dbVehicle._VIN;
|
|
vehicle.CapCode = dbVehicle._CapCode;
|
|
vehicle.KeyNumber = dbVehicle._KeyNumber;
|
|
vehicle.KeyLocation = dbVehicle._KeyLocation;
|
|
vehicle.EngineNumber = dbVehicle._EngineNumber;
|
|
vehicle.EngineCapacity = dbVehicle._EngineCapacity;
|
|
vehicle.Seats = dbVehicle._Seats;
|
|
vehicle.Weight = dbVehicle._Weight;
|
|
vehicle.ManufactureYear = dbVehicle._ManufactureYear;
|
|
vehicle.BuildOn = dbVehicle._BuildOn;
|
|
vehicle.FirstRegisterOn = dbVehicle._FirstRegisterOn;
|
|
vehicle.RegisterOn = dbVehicle._RegisterOn;
|
|
vehicle.RegNumberPrev = dbVehicle._RegNumberPrev;
|
|
vehicle.PurchaseOdo = dbVehicle._PurchaseOdo;
|
|
vehicle.TachoCode = dbVehicle._TachoCode;
|
|
vehicle.TachoId = dbVehicle._TachoId;
|
|
vehicle.LastServiceOdo = dbVehicle._LastServiceOdo;
|
|
vehicle.LastServiceOn = dbVehicle._LastServiceOn;
|
|
vehicle.NextServiceOdo = dbVehicle._NextServiceOdo;
|
|
vehicle.NextServiceOn = dbVehicle._NextServiceOn;
|
|
vehicle.MotOn = dbVehicle._MotOn;
|
|
vehicle.MotNo = dbVehicle._MotNo;
|
|
vehicle.NextTaxOn = dbVehicle._NextTaxOn;
|
|
vehicle.LatestOdo = dbVehicle._LatestOdo;
|
|
vehicle.LatestOdoOn = dbVehicle._LatestOdoOn;
|
|
// Common properties.
|
|
vehicle.Notes = dbVehicle._Notes;
|
|
vehicle.Status = SacsSystem.GetStatusForCode(dbVehicle._Status);
|
|
vehicle.SetCreateStamp(dbVehicle._CreateOn, new SysId(dbVehicle._CreateBy), dbVehicle._CreateHost);
|
|
vehicle.SetUpdateStamp(dbVehicle._UpdateOn, new SysId(dbVehicle._UpdateBy), dbVehicle._UpdateHost);
|
|
vehicle.AcceptChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
private static readonly String aliasVehicle = "aVeh";
|
|
private static readonly String prefixVehicle = "Veh_";
|
|
// VehicleClass Alias&Prefix.
|
|
private static readonly String aliasVehicle_VehicleClass = "aVehVehCls";
|
|
private static readonly String prefixVehicle_VehicleClass = "VehVehClass_";
|
|
// VehEventCount DataName.
|
|
private static readonly String dataNameVehEventCount = "EvtCount";
|
|
// VehFeatureCount DataName.
|
|
private static readonly String dataNameVehFeatureCount = "FtrCount";
|
|
// HpiCheckCount DataName.
|
|
private static readonly String dataNameHpiCheckCount = "HpiCount";
|
|
|
|
// Vehicle column definitions.
|
|
private void SetVehicleColDfn
|
|
(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.SaVehicle)
|
|
alias = aliasVehicle;
|
|
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 GetVehicleColumnDfn(SbmVehicle.Column columnId, string caption = "", int width = 0)
|
|
{
|
|
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
|
|
switch (columnId)
|
|
{
|
|
case SbmVehicle.Column.Pos:
|
|
SetVehicleColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
|
columnDfn.ReadOnly = true;
|
|
columnDfn.Resizable = false;
|
|
break;
|
|
case SbmVehicle.Column.Id:
|
|
SetVehicleColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.SaVehicle_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasVehicle, prefixVehicle);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
|
|
// Vehicle Properties.
|
|
case SbmVehicle.Column.VehicleClass_Id:
|
|
SetVehicleColDfn(columnDfn, "Cat Id", 45, SbmDbDfn.ColumnIdx.SaVehicle_VehicleClassId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_MakeCode:
|
|
SetVehicleColDfn(columnDfn, "Make", 65, SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_MakeDesc:
|
|
SetVehicleColDfn(columnDfn, "Make", 75, SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode, ColumnAlignment.Left, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_Model:
|
|
SetVehicleColDfn(columnDfn, "Model", 80, SbmDbDfn.ColumnIdx.SaVehicleClass_Model, ColumnAlignment.Left, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_Derivative:
|
|
SetVehicleColDfn(columnDfn, "Derivative", 90, SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative, ColumnAlignment.Left, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_DescBrief:
|
|
SetVehicleColDfn(columnDfn, "Vehicle class", 120, SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_Type:
|
|
SetVehicleColDfn(columnDfn, "Type", 60, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleType, ColumnAlignment.Center, DataValue.DataType.Long, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_TypeDesc:
|
|
SetVehicleColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleType, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_CategoryCode:
|
|
SetVehicleColDfn(columnDfn, "Category", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_CategoryDesc:
|
|
SetVehicleColDfn(columnDfn, "Category", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_FuelTypeDesc:
|
|
SetVehicleColDfn(columnDfn, "Fuel type", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_FuelType, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_OdometerUnitsDesc:
|
|
SetVehicleColDfn(columnDfn, "Odo units", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_OdometerUnits, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_Seats:
|
|
SetVehicleColDfn(columnDfn, "Seats", 50, SbmDbDfn.ColumnIdx.SaVehicleClass_Seats, ColumnAlignment.Center, DataValue.DataType.Long, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_InsuranceCode:
|
|
SetVehicleColDfn(columnDfn, "Insurance", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode, ColumnAlignment.Center, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_InsuranceDesc:
|
|
SetVehicleColDfn(columnDfn, "Insurance", 100, SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode, ColumnAlignment.Left, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.VehicleClass_Notes:
|
|
SetVehicleColDfn(columnDfn, "Class Notes", 200, SbmDbDfn.ColumnIdx.SaVehicleClass_Notes, ColumnAlignment.Left, DataValue.DataType.String, aliasVehicle_VehicleClass, prefixVehicle_VehicleClass);
|
|
break;
|
|
case SbmVehicle.Column.RegNumber:
|
|
SetVehicleColDfn(columnDfn, "Registration", 80, SbmDbDfn.ColumnIdx.SaVehicle_RegNumber);
|
|
break;
|
|
case SbmVehicle.Column.RegNumberPrev:
|
|
SetVehicleColDfn(columnDfn, "Reg (prev)", 80, SbmDbDfn.ColumnIdx.SaVehicle_RegNumberPrev);
|
|
break;
|
|
case SbmVehicle.Column.Vin:
|
|
SetVehicleColDfn(columnDfn, "Vin", 100, SbmDbDfn.ColumnIdx.SaVehicle_VIN);
|
|
break;
|
|
case SbmVehicle.Column.CapCode:
|
|
SetVehicleColDfn(columnDfn, "CAP", 90, SbmDbDfn.ColumnIdx.SaVehicle_CapCode);
|
|
break;
|
|
case SbmVehicle.Column.KeyNumber:
|
|
SetVehicleColDfn(columnDfn, "Key #", 90, SbmDbDfn.ColumnIdx.SaVehicle_KeyNumber);
|
|
break;
|
|
case SbmVehicle.Column.KeyLocation:
|
|
SetVehicleColDfn(columnDfn, "Key loc.", 60, SbmDbDfn.ColumnIdx.SaVehicle_KeyLocation);
|
|
break;
|
|
case SbmVehicle.Column.EngineNumber:
|
|
SetVehicleColDfn(columnDfn, "Engine no", 80, SbmDbDfn.ColumnIdx.SaVehicle_EngineNumber);
|
|
break;
|
|
case SbmVehicle.Column.BuildOn:
|
|
SetVehicleColDfn(columnDfn, "Build on", 70, SbmDbDfn.ColumnIdx.SaVehicle_BuildOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.FirstRegisterOn:
|
|
SetVehicleColDfn(columnDfn, "First reg.", 70, SbmDbDfn.ColumnIdx.SaVehicle_FirstRegisterOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.RegisterOn:
|
|
SetVehicleColDfn(columnDfn, "Registered", 70, SbmDbDfn.ColumnIdx.SaVehicle_RegisterOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.PurchaseOdo:
|
|
SetVehicleColDfn(columnDfn, "Purchase odo", 70, SbmDbDfn.ColumnIdx.SaVehicle_PurchaseOdo, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicle.Column.TachoCode:
|
|
SetVehicleColDfn(columnDfn, "Tacho", 100, SbmDbDfn.ColumnIdx.SaVehicle_TachoCode);
|
|
break;
|
|
case SbmVehicle.Column.TachoId:
|
|
SetVehicleColDfn(columnDfn, "Tacho Id", 90, SbmDbDfn.ColumnIdx.SaVehicle_TachoId);
|
|
break;
|
|
case SbmVehicle.Column.LastServiceOdo:
|
|
SetVehicleColDfn(columnDfn, "Last service odo", 70, SbmDbDfn.ColumnIdx.SaVehicle_LastServiceOdo, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicle.Column.LastServiceOn:
|
|
SetVehicleColDfn(columnDfn, "Last service", 70, SbmDbDfn.ColumnIdx.SaVehicle_LastServiceOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.NextServiceOdo:
|
|
SetVehicleColDfn(columnDfn, "Next service odo", 70, SbmDbDfn.ColumnIdx.SaVehicle_NextServiceOdo, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicle.Column.NextServiceOn:
|
|
SetVehicleColDfn(columnDfn, "NextServiceOn", 70, SbmDbDfn.ColumnIdx.SaVehicle_NextServiceOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.MotOn:
|
|
SetVehicleColDfn(columnDfn, "Mot due", 70, SbmDbDfn.ColumnIdx.SaVehicle_MotOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.MotNo:
|
|
SetVehicleColDfn(columnDfn, "MOT No", 80, SbmDbDfn.ColumnIdx.SaVehicle_MotNo);
|
|
break;
|
|
case SbmVehicle.Column.NextTaxOn:
|
|
SetVehicleColDfn(columnDfn, "Next Tax", 70, SbmDbDfn.ColumnIdx.SaVehicle_NextTaxOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
case SbmVehicle.Column.LatestOdo:
|
|
SetVehicleColDfn(columnDfn, "Latest Odo", 70, SbmDbDfn.ColumnIdx.SaVehicle_LatestOdo, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicle.Column.LatestOdoOn:
|
|
SetVehicleColDfn(columnDfn, "Latest Odo", 70, SbmDbDfn.ColumnIdx.SaVehicle_LatestOdoOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
break;
|
|
// Common properties.
|
|
case SbmVehicle.Column.Notes:
|
|
SetVehicleColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.SaVehicle_Notes);
|
|
break;
|
|
case SbmVehicle.Column.Flag:
|
|
SetVehicleColDfn(columnDfn, "Flags", 40, SbmDbDfn.ColumnIdx.SaVehicle_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SbmVehicle.Column.Status:
|
|
SetVehicleColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicle_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmVehicle.Column.Status_Desc:
|
|
SetVehicleColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicle_Status);
|
|
break;
|
|
case SbmVehicle.Column.Status_Ind:
|
|
SetVehicleColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicle_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmVehicle.Column.CreateOn_Date:
|
|
SetVehicleColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.SaVehicle_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmVehicle.Column.UpdateOn_Date:
|
|
SetVehicleColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.SaVehicle_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmVehicle.Column.EventCount:
|
|
SetVehicleColDfn(columnDfn, "Events", 60, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = dataNameVehEventCount;
|
|
break;
|
|
case SbmVehicle.Column.FeatureCount:
|
|
SetVehicleColDfn(columnDfn, "Features", 60, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = dataNameVehFeatureCount;
|
|
break;
|
|
case SbmVehicle.Column.HpiCheckCount:
|
|
SetVehicleColDfn(columnDfn, "HPI Checks", 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = dataNameHpiCheckCount;
|
|
break;
|
|
}
|
|
if (!String.IsNullOrEmpty(caption))
|
|
columnDfn.Caption = caption;
|
|
if (width > 0)
|
|
columnDfn.Width = width;
|
|
return columnDfn;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Vehicle query filter.
|
|
public override List<string> GetVehicleQueryFilter(SbmVehicle.Params prm)
|
|
{
|
|
List<String> filter = new List<String>();
|
|
|
|
// Vehicle Id.
|
|
String includedIds = prm.IncludedIds.Concat(",");
|
|
String colVehicle_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicle);
|
|
if (!StringUtil.IsEmpty(includedIds))
|
|
filter.Add(colVehicle_Id + " IN (" + includedIds + ")");
|
|
String excludedIds = prm.ExcludedIds.Concat(",");
|
|
if (!StringUtil.IsEmpty(excludedIds))
|
|
filter.Add(colVehicle_Id + " NOT IN (" + excludedIds + ")");
|
|
//---------------------------------------------------------------
|
|
// Vehicle Class.
|
|
String colVehicle_VehicleClassId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_VehicleClassId, aliasVehicle);
|
|
if (SysId.IsValid(prm.VehicleClassId))
|
|
filter.Add(colVehicle_VehicleClassId + "=" + prm.VehicleClassId.ToString());
|
|
String classDesc = DbQuery.FormatForCondition(prm.ClassDescPartial);
|
|
if (!StringUtil.IsEmpty(prm.MakeCode) || !classDesc.IsEmpty())
|
|
{
|
|
DbQuery qryVehicleClass = new DbQuery(db.DbmsType);
|
|
qryVehicleClass.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass), aliasVehicle_VehicleClass);
|
|
qryVehicleClass.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Id, aliasVehicle_VehicleClass));
|
|
if (!StringUtil.IsEmpty(prm.MakeCode))
|
|
qryVehicleClass.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode, aliasVehicle_VehicleClass) + "='" + prm.MakeCode + "'");
|
|
if (!StringUtil.IsEmpty(classDesc))
|
|
qryVehicleClass.Filters.Add(DbQuery.FormatFn_Left(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief, aliasVehicle_VehicleClass), prm.ClassDescPartial.Length) + "='" + classDesc + "'");
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_VehicleClassId, aliasVehicle) + " IN (" + qryVehicleClass.BuildQuery() + ")");
|
|
}
|
|
//---------------------------------------------------------------
|
|
// Partial Registration.
|
|
String regNumber = DbQuery.FormatForCondition(prm.RegNumberPartial);
|
|
if (!StringUtil.IsEmpty(regNumber))
|
|
filter.Add(DbQuery.FormatFn_Left(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_RegNumber, aliasVehicle), prm.RegNumberPartial.Length) + " ='" + regNumber + "'");
|
|
|
|
// Partial VIN:
|
|
String vin = DbQuery.FormatForCondition(prm.VinPartial);
|
|
if (!StringUtil.IsEmpty(vin))
|
|
filter.Add(DbQuery.FormatFn_Left(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_VIN, aliasVehicle), prm.VinPartial.Length) + " ='" + vin + "'");
|
|
|
|
//---------------------------------------------------------------
|
|
// Associated Assets.
|
|
if (SysId.IsValid(prm.AssetCatIdInclude) || SysId.IsValid(prm.AssetCatIdExclude) || SysId.IsValid(prm.AssetProcessIdNext))
|
|
{
|
|
String aliasVehicle_Asset = "aVehAst";
|
|
DbQuery qryAsset = new DbQuery(db.DbmsType);
|
|
qryAsset.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset), aliasVehicle_Asset);
|
|
qryAsset.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_Id, aliasVehicle_Asset));
|
|
qryAsset.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_ItemType, aliasVehicle_Asset) + "=" + ((int)Sbm.ItemType.Vehicle).ToString());
|
|
qryAsset.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_ItemId, aliasVehicle_Asset) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicle));
|
|
String colAsset_AssetCategoryId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_AssetCategoryId, aliasVehicle_Asset);
|
|
String colAsset_ProcessIdNext = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_ProcessIdNext, aliasVehicle_Asset);
|
|
if (SysId.IsValid(prm.AssetCatIdInclude) || SysId.IsValid(prm.AssetProcessIdNext))
|
|
{
|
|
if (SysId.IsValid(prm.AssetCatIdInclude))
|
|
qryAsset.Filters.Add(colAsset_AssetCategoryId + "=" + prm.AssetCatIdInclude.ToString());
|
|
if (SysId.IsValid(prm.AssetProcessIdNext))
|
|
qryAsset.Filters.Add(colAsset_ProcessIdNext + "=" + prm.AssetProcessIdNext.ToString());
|
|
filter.Add(" EXISTS(" + qryAsset.BuildQuery() + ")");
|
|
}
|
|
if (SysId.IsValid(prm.AssetCatIdExclude))
|
|
{
|
|
qryAsset.Filters.Add(colAsset_AssetCategoryId + "=" + prm.AssetCatIdExclude.ToString());
|
|
filter.Add(" NOT EXISTS(" + qryAsset.BuildQuery() + ")");
|
|
}
|
|
}
|
|
//---------------------------------------------------------------
|
|
// Restrict to active:
|
|
String colVehicle_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Status, aliasVehicle);
|
|
if (!StringUtil.IsEmpty(prm.RestrictToActive))
|
|
filter.Add(colVehicle_Status + "='" + SacsSystem.GetStatusDesc(SaStatus.Active) + "'");
|
|
|
|
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
|
return filter;
|
|
}
|
|
|
|
// Vehicle sort columns.
|
|
public List<String> GetVehicleSortColumns(SbmVehicle.Params prm)
|
|
{
|
|
// Sort sequence:
|
|
List<String> sortColumnCodes = new List<String>();
|
|
foreach (var columnDfn in prm.SortColumns)
|
|
{
|
|
// Need to ensure correct alias used for Vehicle columns in case of conflict.
|
|
String sortCol = String.Empty;
|
|
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.SaVehicle)
|
|
{
|
|
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasVehicle);
|
|
}
|
|
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.SaVehicle_VehicleClassId, aliasVehicle) + " ASC");
|
|
}
|
|
return sortColumnCodes;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Vehicle count.
|
|
private long GetVehicleCount(String filter)
|
|
{
|
|
ClearErrorState();
|
|
return db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicle) + " As " + aliasVehicle, filter);
|
|
}
|
|
public override long GetVehicleCount(SbmVehicle.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
return GetVehicleCount(GetVehicleQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Vehicle list.
|
|
public override List<SbmVehicle> GetVehicleList(SbmVehicle.Params prm)
|
|
{
|
|
List<SbmVehicle> Vehiclees = new List<SbmVehicle>();
|
|
DbQuery qry = new DbQuery(db.DbmsType);
|
|
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicle), aliasVehicle);
|
|
SaVehicle_Db dbVehicle = new SaVehicle_Db(DbInfo);
|
|
qry.Columns.AddRange(dbVehicle.ExistingColumnNames);
|
|
qry.Filters.AddRange(GetVehicleQueryFilter(prm));
|
|
qry.OrderBy.AddRange(GetVehicleSortColumns(prm));
|
|
// Query data.
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
|
|
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
|
{
|
|
while (dbDataReader.Read())
|
|
{
|
|
dbVehicle = new SaVehicle_Db(DbInfo);
|
|
dbVehicle.PopulateFrom(dbDataReader);
|
|
Vehiclees.Add(CreateVehicle(dbVehicle));
|
|
}
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SaLogger.Warn(GetType().Name + ".GetVehicleList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message);
|
|
}
|
|
}
|
|
return Vehiclees;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Vehicle query execution.
|
|
public override DbResultSet ExecuteVehicleQuery(List<ColumnDfn> columns, SbmVehicle.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
//---------------------------------------------------------------------
|
|
// Construct build database query.
|
|
DbQuery query = new DbQuery(db.DbmsType);
|
|
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicle), aliasVehicle);
|
|
|
|
// Vehicle Properties - add columns as defined in query list.
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicle));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_RegNumber, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.RegNumberPrev))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_RegNumberPrev, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.Vin))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_VIN, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.CapCode))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_CapCode, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.KeyNumber))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_KeyNumber, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.KeyLocation))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_KeyLocation, aliasVehicle));
|
|
|
|
//---------------------------------------------------------------
|
|
// Vehicle Category.
|
|
bool hasVehicleClassCols = false;
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_MakeCode);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_MakeDesc);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_Model);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_Derivative);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_DescBrief);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_Type);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_TypeDesc);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_CategoryCode);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_CategoryDesc);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_FuelTypeDesc);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_OdometerUnitsDesc);
|
|
if (!hasVehicleClassCols) hasVehicleClassCols = columns.HasId((int)SbmVehicle.Column.VehicleClass_Notes);
|
|
if (hasVehicleClassCols)
|
|
{
|
|
DbQueryJoin joinVehCat = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinVehCat.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass), aliasVehicle_VehicleClass);
|
|
joinVehCat.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Id, aliasVehicle_VehicleClass) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_VehicleClassId, aliasVehicle));
|
|
query.Joins.Add(joinVehCat);
|
|
// Add the Vehicle Category columns:
|
|
List<SbmDbDfn.ColumnIdx> dbColumns = new List<SbmDbDfn.ColumnIdx>();
|
|
dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode);
|
|
dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_Model);
|
|
if (columns.HasId((int)SbmVehicle.Column.VehicleClass_Derivative)) dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative);
|
|
if (columns.HasId((int)SbmVehicle.Column.VehicleClass_DescBrief)) dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief);
|
|
dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleType);
|
|
dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode);
|
|
if (columns.HasId((int)SbmVehicle.Column.VehicleClass_FuelTypeDesc)) dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_FuelType);
|
|
if (columns.HasId((int)SbmVehicle.Column.VehicleClass_OdometerUnitsDesc)) dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_OdometerUnits);
|
|
if (columns.HasId((int)SbmVehicle.Column.VehicleClass_Notes)) dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_Notes);
|
|
dbColumns.Add(SbmDbDfn.ColumnIdx.SaVehicleClass_Flags);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in dbColumns)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasVehicle_VehicleClass), prefixVehicle_VehicleClass + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Event count.
|
|
if (db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent)))
|
|
{
|
|
bool countVehicles = columns.HasId((int)SbmVehicle.Column.EventCount);
|
|
if (countVehicles)
|
|
{
|
|
// Build sub query to directly return the number of associated Events:
|
|
String aliasVehicle_VehicleEvent = "aVehVehEvt";
|
|
DbQuery qryEvent = new DbQuery(db.DbmsType);
|
|
qryEvent.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleEvent), aliasVehicle_VehicleEvent);
|
|
qryEvent.Columns.Add("Count(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Id, aliasVehicle_VehicleEvent) + ")");
|
|
qryEvent.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_VehicleId, aliasVehicle_VehicleEvent) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicle));
|
|
query.Columns.Add("(" + qryEvent.BuildQuery() + ")", dataNameVehEventCount);
|
|
}
|
|
}
|
|
//---------------------------------------------------------------
|
|
// Feature count.
|
|
bool bCountFeatures = columns.HasId((int)SbmVehicle.Column.FeatureCount);
|
|
if (bCountFeatures)
|
|
{
|
|
if (db.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleFeature)))
|
|
{
|
|
// Build sub query to directly return the number of associated Features:
|
|
String aliasVehicle_VehicleFeature = "aVehVehFtr";
|
|
DbQuery qryFeature = new DbQuery(db.DbmsType);
|
|
qryFeature.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleFeature), aliasVehicle_VehicleFeature);
|
|
qryFeature.Columns.Add("Count(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleFeature_VehicleId, aliasVehicle_VehicleFeature) + ")");
|
|
qryFeature.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleFeature_VehicleId, aliasVehicle_VehicleFeature) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicle));
|
|
query.Columns.Add("(" + qryFeature.BuildQuery() + ")", dataNameVehFeatureCount);
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// HpiCheck count.
|
|
bool bCountHpiChecks = columns.HasId((int)SbmVehicle.Column.HpiCheckCount);
|
|
if (bCountHpiChecks)
|
|
{
|
|
SaItemDataConsole itemDataConsole = Internals.ItemDataConsole;
|
|
if (itemDataConsole != null && itemDataConsole.DatabaseIsValid)
|
|
{
|
|
// Build sub query to directly return the number of associated HpiChecks.
|
|
String aliasVehicle_ItemData = "aVehItmDat";
|
|
DbQuery qryItemData = new DbQuery(db.DbmsType);
|
|
qryItemData.Tables.Add(SaItemDataDbDfn.GetTableName(SaItemDataDbDfn.TableIdx.SaItemData), aliasVehicle_ItemData);
|
|
qryItemData.Columns.Add("Count(" + SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_Id, aliasVehicle_ItemData) + ")");
|
|
qryItemData.Filters.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemType, aliasVehicle_ItemData) + "=" + ((int)Sbm.ItemType.Vehicle).ToString());
|
|
qryItemData.Filters.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemId, aliasVehicle_ItemData) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Id, aliasVehicle));
|
|
List<TypeCodeDesc> itemDataTypes = new List<TypeCodeDesc>();
|
|
qryItemData.Filters.Add(SaItemDataDbDfn.GetColumnNameQual(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType, aliasVehicle_ItemData) + "='" + itemDataTypes.GetCodeForType(Sbm.ItemDataType.Vehicle_HpiResponse) + "'");
|
|
query.Columns.Add("(" + qryItemData.BuildQuery() + ")", dataNameHpiCheckCount);
|
|
}
|
|
}
|
|
// Common Properties
|
|
if (columns.HasId((int)SbmVehicle.Column.Notes))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Notes, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.Flag))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Flags, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.Status) || columns.HasId((int)SbmVehicle.Column.Status_Desc) || columns.HasId((int)SbmVehicle.Column.Status_Ind))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_Status, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.CreateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_CreateOn, aliasVehicle));
|
|
if (columns.HasId((int)SbmVehicle.Column.UpdateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicle_UpdateOn, aliasVehicle));
|
|
|
|
//---------------------------------------------------------------
|
|
// Populate filter.
|
|
query.Filters.AddRange(GetVehicleQueryFilter(prm));
|
|
|
|
if (prm.IncludedIds.Count != 1)
|
|
{
|
|
// Configure sort sequence.
|
|
foreach (String sortColumn in GetVehicleSortColumns(prm))
|
|
query.OrderBy.Add(sortColumn);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
//return new DbResultSet_DataTableReader(db, query.BuildQuery());
|
|
return DbResultSet_DataReader.ExecuteQuery(db, query.BuildQuery(prm.ResultsPaging));
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|