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 GetLogProperties(SbmVehicleEvent vehicleEvent) { return new List() { 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 = db.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(GetType().Name + ".GetVehicleEvent\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } 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), (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) { String fn = GetType().Name + ".InsertVehicleEvent"; ClearErrorState(); if (!IsValidVehicleEvent(vehicleEvent)) return false; if (SysId.IsValid(vehicleEvent.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = db.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(db.GetNextId("VehicleEvent", dbUpdateInfo)); } dbVehicleEvent.ExecuteInsertCommand(dbCommand); vehicleEvent.Id = new SysId(dbVehicleEvent._Id); vehicleEvent.Changed = false; if (DebugMode) SaLogger.Debug(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) { String fn = GetType().Name + ".UpdateVehicleEvent"; ClearErrorState(); if (!IsValidVehicleEvent(vehicleEvent)) return false; if (!SysId.IsValid(vehicleEvent.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!vehicleEvent.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(vehicleEvent).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = db.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(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) { String fn = GetType().Name + ".DeleteVehicleEvent"; ClearErrorState(); if (!VehicleEventCanBeDeleted(vehicleEvent)) return false; using (var dbConnection = db.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(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); vehicleEvent.VehicleEventType = (Sbm.VehicleEventType)dbVehicleEvent._EventType; vehicleEvent.StartOn = dbVehicleEvent._StartOn; vehicleEvent.FinishOn = dbVehicleEvent._FinishOn; vehicleEvent.Odometer = dbVehicleEvent._Odometer; vehicleEvent.DescBrief = dbVehicleEvent._DescBrief; vehicleEvent.DescDetail = dbVehicleEvent._DescDetail; vehicleEvent.AmountNet = dbVehicleEvent._AmountNet; vehicleEvent.TaxCodeId = new SysId(dbVehicleEvent._TaxCodeId); vehicleEvent.TaxRate = dbVehicleEvent._TaxRate; vehicleEvent.AmountTax = dbVehicleEvent._AmountTax; vehicleEvent.AmountTot = dbVehicleEvent._AmountTot; // Common properties. vehicleEvent.Notes = dbVehicleEvent._Notes; vehicleEvent.Status = SacsSystem.GetStatusForCode(dbVehicleEvent._Status); vehicleEvent.SetCreateStamp(dbVehicleEvent._CreateOn, new SysId(dbVehicleEvent._CreateBy), dbVehicleEvent._CreateHost); vehicleEvent.SetUpdateStamp(dbVehicleEvent._UpdateOn, new SysId(dbVehicleEvent._UpdateBy), dbVehicleEvent._UpdateHost); vehicleEvent.AcceptChanges(); } //------------------------------------------------------------------- // VehicleEvent Alias&Prefix. private static readonly String aliasVehicleEvent = "aVehEvt"; private static readonly String prefixVehicleEvent = "VehEvt_"; // Vehicle Alias&Prefix. private static readonly String aliasVehicleEvent_Vehicle = "aVehEvtVeh"; private static readonly String prefixVehicleEvent_Vehicle = "VehEvtVeh_"; // TaxCode Alias&Prefix. private static readonly String aliasVehicleEvent_TaxCode = "aVehEvtTxC"; private static readonly String prefixVehicleEvent_TaxCode = "VehEvtTxC_"; //------------------------------------------------------------------- // VehicleEvent column definitions. 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, aliasVehicleEvent, prefixVehicleEvent); 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 GetVehicleEventQueryFilter(SbmVehicleEvent.Params prm) { List filter = new List(); // VehicleEvent Id. String includedIds = prm.IncludedIds.Concat(","); String colVehicleEvent_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleEvent_Id, aliasVehicleEvent); if (!includedIds.IsEmpty()) filter.Add(colVehicleEvent_Id + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.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 GetVehicleEventSortColumns(SbmVehicleEvent.Params prm) { // Sort sequence: List sortColumnCodes = new List(); 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 db.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 GetVehicleEventList(SbmVehicleEvent.Params prm) { List VehicleEventes = new List(); DbQuery qry = new DbQuery(db.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 = db.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); VehicleEventes.Add(CreateVehicleEvent(dbVehicleEvent)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetVehicleEventList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message); } } return VehicleEventes; } //------------------------------------------------------------------- // VehicleEvent query execution. public override DbResultSet VehicleEventExecuteQuery(List columns, SbmVehicleEvent.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct build database query. DbQuery query = new DbQuery(db.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 dbColumns = new List(); 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.IncludedIds.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetVehicleEventSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery()); return DbResultSet_DataReader.ExecuteQuery(db, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }