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; using System.Text.RegularExpressions; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { //======================================================================= partial class SbmAssetMgr_Dbas { //******************************************************************* // V e h i c l e C l a s s //******************************************************************* // Data members. //------------------------------------------------------------------- // Utilities. private List GetLogProperties(SbmVehicleClass vehicleClass) { return new List() { new StringPair("Id",SysId.ToString(vehicleClass.Id)), new StringPair("DescBrief",vehicleClass.DescBrief), new StringPair("Status",vehicleClass.StatusCode) }; } public override List GetVehicleClasses_IdName(SbmVehicleClass.Params prm) { List vehicleClasses = new List(); String colVehicleClass_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_Id); String colVehicleClass_DescBrief = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass)); qry.Columns.Add(colVehicleClass_Id); qry.Columns.Add(colVehicleClass_DescBrief); qry.Filters.AddRange(GetVehicleClassQueryFilter(prm)); using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { while (resultSet != null && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); vehicleClasses.Add(new SysId((int)values.GetValue(colVehicleClass_Id).AsLong()), values.GetValue(colVehicleClass_DescBrief).AsString()); } } return vehicleClasses; } public override List GetModelsForMake(String makeCode) { List models = new List(); String colVehicleClass_Model = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_Model); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass)); qry.DistinctRows = true; qry.Columns.Add(colVehicleClass_Model); qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode) + "='" + makeCode + "'"); using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { while (resultSet != null && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); models.Add(values.GetValue(colVehicleClass_Model).AsString()); } } //models.RemoveEmpty(); models.RemoveDuplicatesCI(); return models; } public override List GetDerivativesForModel(String makeCode, String model) { List derivatives = new List(); if (Database != null || !StringUtil.IsEmpty(makeCode) && !StringUtil.IsEmpty(model)) { String colVehicleClass_Derivative = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass)); qry.DistinctRows = true; qry.Columns.Add(colVehicleClass_Derivative); qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode) + "='" + makeCode + "'"); qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_Model) + "='" + model + "'"); qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Status) + "='" + StatusActive + "'"); using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.BuildQuery())) { while (resultSet != null && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); derivatives.Add(values.GetValue(colVehicleClass_Derivative).AsString()); } } } //derivatives.RemoveEmpty(); derivatives.RemoveDuplicatesCI(); return derivatives; } public override List GetClassesForModel(String makeCode, String model) { SbmVehicleClass.Params prm = new SbmVehicleClass.Params { MakeCode = makeCode, Model = model }; return GetVehicleClasses_IdName(prm); } public override String GetVehicleClassDescBrief(SysId id) { SbmVehicleClass vehicleClass = GetVehicleClassById(id); return (vehicleClass != null ? vehicleClass.DescBrief : ""); } //------------------------------------------------------------------- // Get VehicleClass. public override SbmVehicleClass GetVehicleClass(SbmVehicleClass.Params prm) { return GetVehicleClass(GetVehicleClassQueryFilter(prm).Concat(" AND ", "(", ")")); } public SbmVehicleClass GetVehicleClass(String filter) { ClearErrorState(); long count = GetVehicleClassCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple Vehicle Classes found"); return null; } SbmVehicleClass vehicleClass = null; // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SaVehicleClass_Db dbVehicleClass = new SaVehicleClass_Db(DbInfo); dbVehicleClass.PopulateFrom(dbCommand, aliasVehicleClass, filter); vehicleClass = CreateVehicleClass(dbVehicleClass); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return vehicleClass; } public SbmVehicleClass GetFirstVehicleClassForModel(String makeCode, String model) { //SbmVehicleClass vehicleClass = null; if (!StringUtil.IsEmpty(makeCode) || !StringUtil.IsEmpty(makeCode)) return null; List filter = new List { SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode) + "=" + makeCode + "", SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_Model) + "=" + model + "", SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative) }; return GetVehicleClass(filter.ToString()); } //------------------------------------------------------------------- // Create VehicleClass. public override SbmVehicleClass CreateVehicleClass() { ClearErrorState(); return new SbmVehicleClass_Dbas(Internals, new SysId(), 0); } private SbmVehicleClass_Dbas CreateVehicleClass(SaVehicleClass_Db dbVehicleClass) { ClearErrorState(); SbmVehicleClass_Dbas vehicleClass = new SbmVehicleClass_Dbas(Internals, new SysId(dbVehicleClass._Id), (ushort)dbVehicleClass._Flags); PopulateFrom(dbVehicleClass, vehicleClass); return vehicleClass; } //------------------------------------------------------------------- // Validate VehicleClass. public override bool IsValidVehicleClassData(SbmVehicleClass.Data data, SbmVehicleClass.ErrField errField) { ClearErrorState(); if (!base.IsValidVehicleClassData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert VehicleClass. public override bool InsertVehicleClass(SbmVehicleClass vehicleClass, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidVehicleClass(vehicleClass)) return false; if (SysId.IsValid(vehicleClass.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SaVehicleClass_Db dbVehicleClass = new SaVehicleClass_Db(DbInfo); PopulateTo(dbVehicleClass, vehicleClass, dbUpdateInfo); if (SaVehicleClass_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbVehicleClass._Id = SysId.ToInt(Database.GetNextId("VehicleClass", dbUpdateInfo)); } dbVehicleClass.ExecuteInsertCommand(dbCommand); vehicleClass.Id = new SysId(dbVehicleClass._Id); vehicleClass.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Insert. " + GetLogProperties(vehicleClass).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update VehicleClass. public override bool UpdateVehicleClass(SbmVehicleClass vehicleClass, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidVehicleClass(vehicleClass)) return false; if (!SysId.IsValid(vehicleClass.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!vehicleClass.Changed) { if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. " + GetLogProperties(vehicleClass).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve VehicleClass. dbConnection.Open(); SaVehicleClass_Db dbVehicleClass = new SaVehicleClass_Db(DbInfo); dbVehicleClass.PopulateFrom(dbCommand, aliasVehicleClass, "Id=" + SysId.ToString(vehicleClass.Id)); SbmUpdateLogItemMonitor_VehicleClass updateLogMonitor = new SbmUpdateLogItemMonitor_VehicleClass(Internals, CreateVehicleClass(dbVehicleClass)); // Update properties. PopulateTo(dbVehicleClass, vehicleClass, dbUpdateInfo); dbVehicleClass.ExecuteUpdateCommand(dbCommand); vehicleClass.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. " + GetLogProperties(vehicleClass).Concat(": ").Concat("", "\n\t")); // Record updates. updateLogMonitor.RecordUpdatedValues(vehicleClass); updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete VehicleClass. public override bool VehicleClassCanBeDeleted(SbmVehicleClass vehicleClass) { ClearErrorState(); if (!base.VehicleClassCanBeDeleted(vehicleClass)) return false; return true; } public override bool DeleteVehicleClass(SbmVehicleClass vehicleClass, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!VehicleClassCanBeDeleted(vehicleClass)) return false; using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve prm. dbConnection.Open(); SaVehicleClass_Db dbVehicleClass = new SaVehicleClass_Db(DbInfo); dbVehicleClass.PopulateFrom(dbCommand, aliasVehicleClass, "Id=" + vehicleClass.Id.ToString()); // Delete prm. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass) + " WHERE Id=" + SysId.ToString(vehicleClass.Id) + ";"; dbCommand.ExecuteNonQuery(); vehicleClass.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Delete. " + GetLogProperties(vehicleClass).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(SaVehicleClass_Db dbVehicleClass, SbmVehicleClass vehicleClass, DbUpdateInfo dbUpdateInfo) { dbVehicleClass._Id = vehicleClass.Id.ToInt(); dbVehicleClass._MakeCode = vehicleClass.MakeCode; dbVehicleClass._Model = vehicleClass.Model; dbVehicleClass._Derivative = vehicleClass.Derivative; dbVehicleClass._DescBrief = vehicleClass.DescBrief; dbVehicleClass._VehicleType = (short)vehicleClass.VehicleType; dbVehicleClass._VehicleCategoryCode = vehicleClass.VehicleCategoryCode; dbVehicleClass._FuelType = (short)vehicleClass.FuelType; dbVehicleClass._OdometerUnits = (short)vehicleClass.OdometerUnits; dbVehicleClass._Seats = vehicleClass.Seats; dbVehicleClass._Weight = vehicleClass.Weight; dbVehicleClass._InsuranceCode = vehicleClass.InsuranceCode; dbVehicleClass._FirstServiceOdo = (int)vehicleClass.FirstServiceOdo; dbVehicleClass._ServiceOdo = (int)vehicleClass.ServiceOdo; dbVehicleClass._ServiceWeeks = vehicleClass.ServiceWeeks; dbVehicleClass._AmountRentalCost = vehicleClass.AmountRentalCost; dbVehicleClass._UomIdRentalCost = vehicleClass.UomIdRentalCost.ToInt(); dbVehicleClass._AmountRentalPrice = vehicleClass.AmountRentalPrice; dbVehicleClass._UomIdRentalPrice = vehicleClass.UomIdRentalPrice.ToInt(); // Common properties. dbVehicleClass._Notes = vehicleClass.Notes; dbVehicleClass._Status = SacsSystem.GetStatusCode(vehicleClass.Status); dbVehicleClass._Flags = (short)vehicleClass.Flags; if (!SysId.IsValid(vehicleClass.Id)) { dbVehicleClass._CreateOn = DateTime.UtcNow; dbVehicleClass._CreateBy = dbUpdateInfo.UserId.ToInt(); dbVehicleClass._CreateHost = dbUpdateInfo.Host; } dbVehicleClass._UpdateOn = DateTime.UtcNow; dbVehicleClass._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbVehicleClass._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(SaVehicleClass_Db dbVehicleClass, SbmVehicleClass vehicleClass) { //vehicleClass.Id = new SysId(dbVehicleClass._Id); vehicleClass.MakeCode = dbVehicleClass._MakeCode; vehicleClass.Model = dbVehicleClass._Model; vehicleClass.Derivative = dbVehicleClass._Derivative; vehicleClass.DescBrief = dbVehicleClass._DescBrief; vehicleClass.VehicleType = (Sbm.VehicleType)(dbVehicleClass._VehicleType ?? 0); vehicleClass.VehicleCategoryCode = dbVehicleClass._VehicleCategoryCode; vehicleClass.FuelType = (Sbm.VehicleFuelType)(dbVehicleClass._FuelType ?? 0); vehicleClass.OdometerUnits = (Sbm.VehicleOdometerUnits)(dbVehicleClass._OdometerUnits ?? 0); vehicleClass.Seats = dbVehicleClass._Seats ?? 0; vehicleClass.Weight = dbVehicleClass._Weight ?? 0; vehicleClass.InsuranceCode = dbVehicleClass._InsuranceCode; vehicleClass.FirstServiceOdo = dbVehicleClass._FirstServiceOdo ?? 0; vehicleClass.ServiceOdo = dbVehicleClass._ServiceOdo ?? 0; vehicleClass.ServiceWeeks = dbVehicleClass._ServiceWeeks ?? 0; vehicleClass.AmountRentalCost = dbVehicleClass._AmountRentalCost ?? 0; vehicleClass.UomIdRentalCost = new SysId(dbVehicleClass._UomIdRentalCost ?? 0); vehicleClass.AmountRentalPrice = dbVehicleClass._AmountRentalPrice ?? 0; vehicleClass.UomIdRentalPrice = new SysId(dbVehicleClass._UomIdRentalPrice ?? 0); // Common properties. vehicleClass.Notes = dbVehicleClass._Notes; vehicleClass.Status = SacsSystem.GetStatusForCode(dbVehicleClass._Status); vehicleClass.SetCreateStamp(dbVehicleClass._CreateOn ?? default(DateTime), new SysId(dbVehicleClass._CreateBy ?? 0), dbVehicleClass._CreateHost); vehicleClass.SetUpdateStamp(dbVehicleClass._UpdateOn ?? default(DateTime), new SysId(dbVehicleClass._UpdateBy ?? 0), dbVehicleClass._UpdateHost); vehicleClass.AcceptChanges(); } //------------------------------------------------------------------- // Column definitions. private static readonly String aliasVehicleClass = "aVehCla"; // VehilceCount DataName. private static readonly String dataNameVehicleCount = "VehCount"; // Column definition population. private void SetVehicleClassColDfn (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.SaVehicleClass) alias = aliasVehicleClass; 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 GetVehicleClassColumnDfn(SbmVehicleClass.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { case SbmVehicleClass.Column.Pos: SetVehicleClassColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SbmVehicleClass.Column.Id: SetVehicleClassColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.SaVehicleClass_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; // VehicleClass Properties. case SbmVehicleClass.Column.MakeCode: SetVehicleClassColDfn(columnDfn, "Make", 65, SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode); break; case SbmVehicleClass.Column.MakeDesc: SetVehicleClassColDfn(columnDfn, "Make", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode); break; case SbmVehicleClass.Column.Model: SetVehicleClassColDfn(columnDfn, "Model", 75, SbmDbDfn.ColumnIdx.SaVehicleClass_Model); break; case SbmVehicleClass.Column.Derivative: SetVehicleClassColDfn(columnDfn, "Derivative", 80, SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative); break; case SbmVehicleClass.Column.DescBrief: SetVehicleClassColDfn(columnDfn, "Caption", 140, SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief); break; case SbmVehicleClass.Column.VehicleType: SetVehicleClassColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleType, ColumnAlignment.Right, DataValue.DataType.Long); break; case SbmVehicleClass.Column.VehicleTypeDesc: SetVehicleClassColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleType, ColumnAlignment.Center); break; case SbmVehicleClass.Column.VehicleCategoryCode: SetVehicleClassColDfn(columnDfn, "Category", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode, ColumnAlignment.Center); break; case SbmVehicleClass.Column.VehicleCategoryDesc: SetVehicleClassColDfn(columnDfn, "Category", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode, ColumnAlignment.Center); break; case SbmVehicleClass.Column.FuelTypeDesc: SetVehicleClassColDfn(columnDfn, "Fuel", 60, SbmDbDfn.ColumnIdx.SaVehicleClass_FuelType, ColumnAlignment.Center); break; case SbmVehicleClass.Column.OdometerUnitsDesc: SetVehicleClassColDfn(columnDfn, "Odo units", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_OdometerUnits, ColumnAlignment.Center); break; case SbmVehicleClass.Column.Seats: SetVehicleClassColDfn(columnDfn, "Seats", 50, SbmDbDfn.ColumnIdx.SaVehicleClass_Seats, ColumnAlignment.Center, DataValue.DataType.Long); break; case SbmVehicleClass.Column.InsuranceCode: SetVehicleClassColDfn(columnDfn, "Insurance", 70, SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode, ColumnAlignment.Center); break; case SbmVehicleClass.Column.InsuranceDesc: SetVehicleClassColDfn(columnDfn, "Insurance", 100, SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode); break; case SbmVehicleClass.Column.FirstServiceOdo: SetVehicleClassColDfn(columnDfn, "First service odo", 90, SbmDbDfn.ColumnIdx.SaVehicleClass_FirstServiceOdo, ColumnAlignment.Center, DataValue.DataType.Long); break; case SbmVehicleClass.Column.ServiceOdo: SetVehicleClassColDfn(columnDfn, "Service odo", 120, SbmDbDfn.ColumnIdx.SaVehicleClass_ServiceOdo, ColumnAlignment.Center, DataValue.DataType.Long); break; case SbmVehicleClass.Column.ServiceWeeks: SetVehicleClassColDfn(columnDfn, "Service weeks", 120, SbmDbDfn.ColumnIdx.SaVehicleClass_ServiceWeeks, ColumnAlignment.Center, DataValue.DataType.Long); break; case SbmVehicleClass.Column.Weight: SetVehicleClassColDfn(columnDfn, "Weight", 120, SbmDbDfn.ColumnIdx.SaVehicleClass_Weight, ColumnAlignment.Center, DataValue.DataType.Double); break; case SbmVehicleClass.Column.AmountRentalCost: SetVehicleClassColDfn(columnDfn, "Rental cost", 80, SbmDbDfn.ColumnIdx.SaVehicleClass_AmountRentalCost, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmVehicleClass.Column.RentalCostUomDesc: SetVehicleClassColDfn(columnDfn, "Rental cost unit", 90, SbmDbDfn.ColumnIdx.SaVehicleClass_UomIdRentalCost); break; case SbmVehicleClass.Column.AmountRentalPrice: SetVehicleClassColDfn(columnDfn, "Rental Price", 80, SbmDbDfn.ColumnIdx.SaVehicleClass_AmountRentalPrice, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmVehicleClass.Column.RentalPriceUomDesc: SetVehicleClassColDfn(columnDfn, "Rental Price unit", 90, SbmDbDfn.ColumnIdx.SaVehicleClass_UomIdRentalPrice); break; // Common properties. case SbmVehicleClass.Column.Notes: SetVehicleClassColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.SaVehicleClass_Notes); break; case SbmVehicleClass.Column.Flag: SetVehicleClassColDfn(columnDfn, "Flags", 40, SbmDbDfn.ColumnIdx.SaVehicleClass_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SbmVehicleClass.Column.Status: SetVehicleClassColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicleClass_Status, ColumnAlignment.Center); break; case SbmVehicleClass.Column.Status_Desc: SetVehicleClassColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicleClass_Status); break; case SbmVehicleClass.Column.Status_Ind: SetVehicleClassColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaVehicleClass_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SbmVehicleClass.Column.CreateOn_Date: SetVehicleClassColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.SaVehicleClass_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; columnDfn.ReadOnly = true; break; case SbmVehicleClass.Column.UpdateOn_Date: SetVehicleClassColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.SaVehicleClass_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; columnDfn.ReadOnly = true; break; case SbmVehicleClass.Column.VehicleCount: SetVehicleClassColDfn(columnDfn, "Vehicles", 80, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = dataNameVehicleCount; break; } if (!String.IsNullOrEmpty(caption)) columnDfn.Caption = caption; if (width > 0) columnDfn.Width = width; return columnDfn; } //------------------------------------------------------------------- // Item query filter. public override List GetVehicleClassQueryFilter(SbmVehicleClass.Params prm) { List filter = new List(); // Vehicle Class Id. String colId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Id, aliasVehicleClass); if (prm.IdsIncluded.HasValidIds()) filter.Add($"{colId} IN ({prm.IdsIncluded.Concat(",")})"); if (prm.IdsExcluded.HasValidIds()) filter.Add($"{colId} NOT IN ({prm.IdsExcluded.Concat(",")})"); // Generic search. String colMakeCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode, aliasVehicleClass); String colModel = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Model, aliasVehicleClass); String colDerivative = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative, aliasVehicleClass); String colDescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief, aliasVehicleClass); if (!StringUtil.IsBlank(prm.Search)) { foreach (String search in Regex.Split(prm.Search, "[\\s,;\\-+]+")) { if (StringUtil.IsBlank(search)) continue; String searchForLike = DbQuery.FormatForLike(search, true); List searchFilter = new List(); searchFilter.Add($"{colModel} LIKE '%{searchForLike}%'"); searchFilter.Add($"{colDerivative} LIKE '%{searchForLike}%'"); searchFilter.Add($"{colDescBrief} LIKE '%{searchForLike}%'"); filter.Add(searchFilter.Concat(" OR ", "(", ")")); } } // Make code. if (!StringUtil.IsBlank(prm.MakeCode)) filter.Add($"{colMakeCode}='{DbQuery.FormatForCondition(prm.MakeCode)}'"); // Model. if (!StringUtil.IsBlank(prm.Model)) filter.Add($"{colModel}='{DbQuery.FormatForCondition(prm.Model)}'"); else if (!prm.ModelPartial.IsEmpty()) filter.Add($"{colModel} Like '{DbQuery.FormatForLike(prm.ModelPartial)}'"); // Description. if (!StringUtil.IsBlank(prm.DescBrief)) filter.Add($"{colDescBrief}='{DbQuery.FormatForCondition(prm.DescBrief)}'"); else if (!StringUtil.IsBlank(prm.DescBriefPartial)) filter.Add($"{colDescBrief} LIKE '%{DbQuery.FormatForLike(prm.DescBriefPartial)}%'"); // Vehicle Category code. String colVehicleClass_VehicleCategoryCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode, aliasVehicleClass); if (!StringUtil.IsBlank(prm.VehicleCategoryCode)) filter.Add(DbQuery.FormatFn_Left(colVehicleClass_VehicleCategoryCode, prm.VehicleCategoryCode.Length) + "='" + DbQuery.FormatForCondition(prm.VehicleCategoryCode) + "'"); // Status. String colVehicleClass_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Status, aliasVehicleClass); if (prm.StatusCat == SbmVehicleClass.StatusCat.ActiveOnly) filter.Add(colVehicleClass_Status + "='" + SacsSystem.GetStatusDesc(SaStatus.Active) + "'"); else if (prm.StatusCat == SbmVehicleClass.StatusCat.InactiveOnly) filter.Add(colVehicleClass_Status + "='" + SacsSystem.GetStatusDesc(SaStatus.Inactive) + "'"); else if (prm.StatusCat == SbmVehicleClass.StatusCat.NotDeleted) filter.Add(colVehicleClass_Status + "!='" + SacsSystem.GetStatusDesc(SaStatus.Deleted) + "'"); else if (prm.StatusCat == SbmVehicleClass.StatusCat.DeletedOnly) filter.Add(colVehicleClass_Status + "='" + SacsSystem.GetStatusDesc(SaStatus.Deleted) + "'"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); return filter; } // Item sort columns. public List GetVehicleClassSortColumns(SbmVehicleClass.Params prm) { // Sort sequence: List sortColumnCodes = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for VehicleClass columns in case of conflict. String sortCol = String.Empty; if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.SaVehicleClass) { sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasVehicleClass); } 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.SaVehicleClass_MakeCode, aliasVehicleClass) + " ASC"); sortColumnCodes.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Model, aliasVehicleClass) + " ASC"); } return sortColumnCodes; } //------------------------------------------------------------------- // Item count. private long GetVehicleClassCount(String filter) { ClearErrorState(); return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass) + " As " + aliasVehicleClass, filter); } public override long GetVehicleClassCount(SbmVehicleClass.Params prm) { ClearErrorState(); return GetVehicleClassCount(GetVehicleClassQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetVehicleClassList(SbmVehicleClass.Params prm) { ClearErrorState(); List vehicleClasses = new List(); DbQuery qryVehicleClass = new DbQuery(Database.DbmsType); qryVehicleClass.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass), aliasVehicleClass); SaVehicleClass_Db dbVehicleClass = new SaVehicleClass_Db(DbInfo); qryVehicleClass.Columns.AddRange(dbVehicleClass.ExistingColumnNames); qryVehicleClass.Filters.AddRange(GetVehicleClassQueryFilter(prm)); qryVehicleClass.OrderBy.AddRange(GetVehicleClassSortColumns(prm)); // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qryVehicleClass.BuildQuery(prm.ResultsPaging); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { dbVehicleClass = new SaVehicleClass_Db(DbInfo); dbVehicleClass.PopulateFrom(dbDataReader); vehicleClasses.Add(CreateVehicleClass(dbVehicleClass)); } } } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return vehicleClasses; } //------------------------------------------------------------------- // VehicleClass query execution. public override DbResultSet ExecuteVehicleClassQuery(List columns, SbmVehicleClass.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct build database query. DbQuery query = new DbQuery(Database.DbmsType); query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaVehicleClass), aliasVehicleClass); // VehicleClass Properties - add columns as defined in query list. query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Id, aliasVehicleClass)); query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_MakeCode, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.Model)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Model, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.Derivative)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Derivative, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.DescBrief)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_DescBrief, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.VehicleType) || columns.HasId((int)SbmVehicleClass.Column.VehicleTypeDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleType, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.VehicleCategoryCode) || columns.HasId((int)SbmVehicleClass.Column.VehicleCategoryDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_VehicleCategoryCode, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.FuelTypeDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_FuelType, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.OdometerUnitsDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_OdometerUnits, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.Seats)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Seats, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.InsuranceCode) || columns.HasId((int)SbmVehicleClass.Column.InsuranceDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_InsuranceCode, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.FirstServiceOdo)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_FirstServiceOdo, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.ServiceOdo)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_ServiceOdo, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.ServiceWeeks)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_ServiceWeeks, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.Weight)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Weight, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.AmountRentalCost)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_AmountRentalCost, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.RentalCostUomDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_UomIdRentalCost, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.AmountRentalPrice)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_AmountRentalPrice, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.RentalPriceUomDesc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_UomIdRentalPrice, aliasVehicleClass)); // Common Properties if (columns.HasId((int)SbmVehicleClass.Column.Notes)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Notes, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.Flag)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Flags, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.Status) || columns.HasId((int)SbmVehicleClass.Column.Status_Desc) || columns.HasId((int)SbmVehicleClass.Column.Status_Ind)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_Status, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.CreateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_CreateOn, aliasVehicleClass)); if (columns.HasId((int)SbmVehicleClass.Column.UpdateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaVehicleClass_UpdateOn, aliasVehicleClass)); //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetVehicleClassQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetVehicleClassSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(Database, query.BuildQuery()); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }