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 { //======================================================================= // Asset manager - Asset Categories. //======================================================================= partial class SbmAssetMgr_Dbas { //------------------------------------------------------------------- // Utilities. private List GetLogProperties(SbmAssetCategory assetCategory) { return new List() { new StringPair("Id",SysId.ToString(assetCategory.Id)), new StringPair("DescBrief",assetCategory.DescBrief), new StringPair("Status",assetCategory.StatusCode) }; } //------------------------------------------------------------------- // Associated data. public override bool AssetCategoryHasProcesses(SysId assetCategoryId) { ClearErrorState(); if (!SysId.IsValid(assetCategoryId)) return SetErrorState("invalid item"); return ProcessMgr.ItemHasProcesses(new SbmItemId(Sbm.ItemType.AssetCategory, assetCategoryId)); } public override bool ClearAssetCategoryDependentData(SbmAssetCategory assetCategory, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (assetCategory == null || !SysId.IsValid(assetCategory.Id)) return SetErrorState("Invalid item"); ItemId itemId = assetCategory.GetItemId(); if (!HasErrorState()) { // Remove document references. if (ItemDocConsole != null) { if (!ItemDocConsole.ClearItemDocs(itemId, dbUpdateInfo)) SetErrorState(ItemDocConsole.ErrorStateMessage); } else SetErrorState("Failed to retrieve item document console"); } if (!HasErrorState()) { // Remove Item Data. if (ItemDataConsole != null) { if (!ItemDataConsole.ClearItemData(itemId, dbUpdateInfo)) SetErrorState(ItemDataConsole.ErrorStateMessage); } else SetErrorState("Failed to retrieve item Data console"); } if (!HasErrorState()) { // Remove interface data items: if (InterfaceConsole != null) { if (!InterfaceConsole.ClearInterfaceDataItems(itemId, dbUpdateInfo)) SetErrorState(InterfaceConsole.ErrorStateMessage); } else SetErrorState("Failed to retrieve interface console"); } return OK; } //------------------------------------------------------------------- // Item processes. public override List GetAssetCategoryProcesses(SysId assetCategoryId, bool activeOnly) { ClearErrorState(); List itemProceses = new List(); if (!SysId.IsValid(assetCategoryId)) return itemProceses; return ProcessMgr.GetProcessesForItem(new SbmItemId(Sbm.ItemType.AssetCategory, assetCategoryId), activeOnly); } public override bool StoreAssetCategoryProcesses(SbmAssetCategory assetCategory, List itemProcesses, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!ProcessMgr.UpdateProcessesForItem(assetCategory.GetItemId(), itemProcesses, dbUpdateInfo)) SetErrorState(ProcessMgr.ErrorStateMessage); return OK; } //------------------------------------------------------------------- // Get Item. public override SbmAssetCategory GetAssetCategory(SbmAssetCategory.Params prm) { return GetAssetCategory(GetAssetCategoryQueryFilter(prm).Concat(" AND ", "(", ")")); } private SbmAssetCategory GetAssetCategory(String filter) { ClearErrorState(); long count = GetAssetCategoryCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState(ErrorMessage.MultipleItemsFound); return null; } SbmAssetCategory assetCategory = null; // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SaAssetCategory_Db dbAssetCategory = new SaAssetCategory_Db(DbInfo); dbAssetCategory.PopulateFrom(dbCommand, AliasAssetCategory, filter); assetCategory = CreateAssetCategory(dbAssetCategory); } catch (Exception exc) { SetErrorState(ErrorMessage.DatabaseQueryException); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return assetCategory; } public List GetAssetCategoryByIdName(SbmAssetCategory.Params prm, bool includeType) { ClearErrorState(); List assetCats = new List(); String colAssetCategory_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaAssetCategory_Id); String colAssetCategory_AssetType = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaAssetCategory_AssetType); String colAssetCategory_DescBrief = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.SaAssetCategory_DescBrief); DbQuery qryAssetCat = new DbQuery(Database.DbmsType); qryAssetCat.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetCategory)); qryAssetCat.Columns.Add(colAssetCategory_Id); qryAssetCat.Columns.Add(colAssetCategory_AssetType); qryAssetCat.Columns.Add(colAssetCategory_DescBrief); qryAssetCat.Filters.AddRange(GetAssetCategoryQueryFilter(prm)); using (DbResultSet resultSet = DbResultSet_DataReader.ExecuteQuery(Database, qryAssetCat.BuildQuery())) { while (resultSet != null && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); String caption = values.GetValue(colAssetCategory_DescBrief).ToString(); if (includeType) { String assetType = AssetTypes.GetDescForType(values.GetValue(colAssetCategory_AssetType).AsLong()); if (!StringUtil.IsEmpty(assetType)) caption += $" ({assetType})"; caption.Trim(); } assetCats.Add(new SysId((int)values.GetValue(colAssetCategory_Id).AsLong()), caption); } } return assetCats; } //------------------------------------------------------------------- // Create AssetCategory. public override SbmAssetCategory CreateAssetCategory(Sbm.AssetType assetType) { ClearErrorState(); SbmAssetCategory assetCategory = null; if (!SysId.IsValid(AffiliateId_Owner)) { SetErrorState("Owner affiliate Id not specified"); return assetCategory; } if (assetType <= 0) { SetErrorState("Asset type not identified"); return assetCategory; } assetCategory = new SbmAssetCategory_Dbas(null, AffiliateId_Owner, assetType, 0); return assetCategory; } private SbmAssetCategory_Dbas CreateAssetCategory(SaAssetCategory_Db dbAssetCategory) { ClearErrorState(); SbmAssetCategory_Dbas assetCategory = new SbmAssetCategory_Dbas(new SysId(dbAssetCategory._Id), new SysId(dbAssetCategory._AffIdOwner), (Sbm.AssetType)dbAssetCategory._AssetType, (ushort)dbAssetCategory._Flags); PopulateFrom(dbAssetCategory, assetCategory); return assetCategory; } //------------------------------------------------------------------- // Validate AssetCategory. public override bool IsValidAssetCategoryData(SbmAssetCategory.Data data, SbmAssetCategory.ErrField errField) { ClearErrorState(); if (!base.IsValidAssetCategoryData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert AssetCategory. public override bool InsertAssetCategory(SbmAssetCategory assetCategory, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidAssetCategory(assetCategory)) return false; if (SysId.IsValid(assetCategory.Id)) return SetErrorState(ErrorMessage.ValidItemId); using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); SaAssetCategory_Db dbAssetCategory = new SaAssetCategory_Db(DbInfo); PopulateTo(dbAssetCategory, assetCategory, dbUpdateInfo); if (SaAssetCategory_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbAssetCategory._Id = SysId.ToInt(Database.GetNextId("SaAssetCategory", dbUpdateInfo)); } dbAssetCategory.ExecuteInsertCommand(dbCommand); assetCategory.Id = new SysId(dbAssetCategory._Id); assetCategory.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(assetCategory).Concat(": ").Concat("", "\n\t")}"); } catch (Exception exc) { SetErrorState(exc.Message); } } return OK; } //------------------------------------------------------------------- // Update AssetCategory. public override bool UpdateAssetCategory(SbmAssetCategory assetCategory, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidAssetCategory(assetCategory)) return false; if (!SysId.IsValid(assetCategory.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!assetCategory.Changed) { if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(assetCategory).Concat(": ").Concat("", "\n\t")}"); return true; } using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve AssetCategory. dbConnection.Open(); SaAssetCategory_Db dbAssetCategory = new SaAssetCategory_Db(DbInfo); dbAssetCategory.PopulateFrom(dbCommand, AliasAssetCategory, $"Id={SysId.ToString(assetCategory.Id)}"); SbmUpdateLogItemMonitor_AssetCategory updateLogMonitor = new SbmUpdateLogItemMonitor_AssetCategory(Internals, CreateAssetCategory(dbAssetCategory)); // Update properties. PopulateTo(dbAssetCategory, assetCategory, dbUpdateInfo); dbAssetCategory.ExecuteUpdateCommand(dbCommand); assetCategory.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(assetCategory).Concat(": ").Concat("", "\n\t")}"); // Record updates. updateLogMonitor.RecordUpdatedValues(assetCategory); updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return OK; } //------------------------------------------------------------------- // Delete AssetCategory. public override bool AssetCategoryCanBeDeleted(SbmAssetCategory assetCategory) { ClearErrorState(); if (!base.AssetCategoryCanBeDeleted(assetCategory)) return false; return true; } public override bool DeleteAssetCategory(SbmAssetCategory assetCategory, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!AssetCategoryCanBeDeleted(assetCategory)) return false; using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve AssetCategory. dbConnection.Open(); SaAssetCategory_Db dbAssetCategory = new SaAssetCategory_Db(DbInfo); dbAssetCategory.PopulateFrom(dbCommand, AliasAssetCategory, $"Id={assetCategory.Id.ToString()}"); // Delete AssetCategory. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = $"DELETE FROM {SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetCategory)} WHERE Id={SysId.ToString(assetCategory.Id)};"; dbCommand.ExecuteNonQuery(); assetCategory.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted.{GetLogProperties(assetCategory).Concat(": ").Concat("", "\n\t")}"); } catch (Exception exc) { SetErrorState(exc.Message); } } return OK; } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(SaAssetCategory_Db dbAssetCategory, SbmAssetCategory assetCategory, DbUpdateInfo dbUpdateInfo) { dbAssetCategory._Id = assetCategory.Id.ToInt(); dbAssetCategory._AssetType = (short)assetCategory.AssetType; dbAssetCategory._AffIdOwner = assetCategory.AffIdOwner.ToInt(); dbAssetCategory._Code = assetCategory.Code; dbAssetCategory._DescBrief = assetCategory.DescBrief; dbAssetCategory._IncomeType = (short)assetCategory.IncomeType; dbAssetCategory._AssocIdSupplier = assetCategory.AssocIdSupplier.ToInt(); dbAssetCategory._PaymentTerms = assetCategory.PaymentTerms; dbAssetCategory._TaxCodeIdPurchase = assetCategory.TaxCodeIdPurchase.ToInt(); dbAssetCategory._AssocIdCustomer = assetCategory.AssocIdCustomer.ToInt(); dbAssetCategory._TaxCodeIdSell = assetCategory.TaxCodeIdSell.ToInt(); dbAssetCategory._TaxCodeIdProfit = assetCategory.TaxCodeIdProfit.ToInt(); dbAssetCategory._DisposeCode = assetCategory.DisposeCode; dbAssetCategory._UomIdRentalCost = assetCategory.UomIdRentalCost.ToInt(); dbAssetCategory._TaxCodeIdRentalCost = assetCategory.TaxCodeIdRentalCost.ToInt(); dbAssetCategory._UomIdRentalPrice = assetCategory.UomIdRentalPrice.ToInt(); dbAssetCategory._TaxCodeIdRentalPrice = assetCategory.TaxCodeIdRentalPrice.ToInt(); // Common properties. dbAssetCategory._Notes = assetCategory.Notes; dbAssetCategory._Status = SacsSystem.GetStatusCode(assetCategory.Status); dbAssetCategory._Flags = (short)assetCategory.Flags; if (!SysId.IsValid(assetCategory.Id)) { dbAssetCategory._CreateOn = DateTime.UtcNow; dbAssetCategory._CreateBy = dbUpdateInfo.UserId.ToInt(); dbAssetCategory._CreateHost = dbUpdateInfo.Host; } dbAssetCategory._UpdateOn = DateTime.UtcNow; dbAssetCategory._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbAssetCategory._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(SaAssetCategory_Db dbAssetCategory, SbmAssetCategory assetCategory) { //assetCategory.Id = new SysId(dbAssetCategory._Id); assetCategory.AssetType = (Sbm.AssetType)dbAssetCategory._AssetType; assetCategory.AffIdOwner = new SysId(dbAssetCategory._AffIdOwner); assetCategory.Code = dbAssetCategory._Code; assetCategory.DescBrief = dbAssetCategory._DescBrief; assetCategory.IncomeType = (Sbm.AssetIncomeType)(dbAssetCategory._IncomeType ?? 0); assetCategory.AssocIdSupplier = new SysId(dbAssetCategory._AssocIdSupplier); assetCategory.PaymentTerms = dbAssetCategory._PaymentTerms ?? 0; assetCategory.TaxCodeIdPurchase = new SysId(dbAssetCategory._TaxCodeIdPurchase); assetCategory.AssocIdCustomer = new SysId(dbAssetCategory._AssocIdCustomer); assetCategory.TaxCodeIdSell = new SysId(dbAssetCategory._TaxCodeIdSell); assetCategory.TaxCodeIdProfit = new SysId(dbAssetCategory._TaxCodeIdProfit); assetCategory.DisposeCode = dbAssetCategory._DisposeCode; assetCategory.UomIdRentalCost = new SysId(dbAssetCategory._UomIdRentalCost); assetCategory.TaxCodeIdRentalCost = new SysId(dbAssetCategory._TaxCodeIdRentalCost); assetCategory.UomIdRentalPrice = new SysId(dbAssetCategory._UomIdRentalPrice); assetCategory.TaxCodeIdRentalPrice = new SysId(dbAssetCategory._TaxCodeIdRentalPrice); // Common properties. assetCategory.Notes = dbAssetCategory._Notes; assetCategory.Status = SacsSystem.GetStatusForCode(dbAssetCategory._Status); assetCategory.SetCreateStamp(dbAssetCategory._CreateOn, new SysId(dbAssetCategory._CreateBy), dbAssetCategory._CreateHost); assetCategory.SetUpdateStamp(dbAssetCategory._UpdateOn, new SysId(dbAssetCategory._UpdateBy), dbAssetCategory._UpdateHost); assetCategory.AcceptChanges(); } //------------------------------------------------------------------- // AssetCategory column definitions. private static readonly String AliasAssetCategory = "aAstCat"; private static readonly String colNameAssetCategory_AssetCount = "AssetCount"; private void SetAssetCategoryColDfn (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.SaAssetCategory) alias = AliasAssetCategory; 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)Internals.GetColTextLen(dbCol); } //------------------------------------------------------------------- // Getting prmAssetCategory column definition. public override ColumnDfn GetAssetCategoryColumnDfn(SbmAssetCategory.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { case SbmAssetCategory.Column.Pos: SetAssetCategoryColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SbmAssetCategory.Column.Id: SetAssetCategoryColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.SaAssetCategory_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; // AssetCategory Properties. case SbmAssetCategory.Column.AffIdOwner: SetAssetCategoryColDfn(columnDfn, "AffIdOwner", 45, SbmDbDfn.ColumnIdx.SaAssetCategory_AffIdOwner, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SbmAssetCategory.Column.AssetType_Desc: SetAssetCategoryColDfn(columnDfn, "AssetType", 100, SbmDbDfn.ColumnIdx.SaAssetCategory_AssetType, ColumnAlignment.Left); break; case SbmAssetCategory.Column.Code: SetAssetCategoryColDfn(columnDfn, "Code", 100, SbmDbDfn.ColumnIdx.SaAssetCategory_Code, ColumnAlignment.Left); break; case SbmAssetCategory.Column.DescBrief: SetAssetCategoryColDfn(columnDfn, "Desc Brief", 120, SbmDbDfn.ColumnIdx.SaAssetCategory_DescBrief); break; case SbmAssetCategory.Column.IncomeType: SetAssetCategoryColDfn(columnDfn, "Income Type", 100, SbmDbDfn.ColumnIdx.SaAssetCategory_IncomeType, ColumnAlignment.Left); break; case SbmAssetCategory.Column.AssocIdSupplier: SetAssetCategoryColDfn(columnDfn, "AssocId Supplier", 45, SbmDbDfn.ColumnIdx.SaAssetCategory_AssocIdSupplier, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SbmAssetCategory.Column.PaymentTerms: SetAssetCategoryColDfn(columnDfn, "Payment Terms", 60, SbmDbDfn.ColumnIdx.SaAssetCategory_PaymentTerms); break; case SbmAssetCategory.Column.TaxCodeIdPurchase: SetAssetCategoryColDfn(columnDfn, "TaxCodeId Purchase", 45, SbmDbDfn.ColumnIdx.SaAssetCategory_TaxCodeIdPurchase); break; case SbmAssetCategory.Column.AssocIdCustomer: SetAssetCategoryColDfn(columnDfn, "AssocId Customer", 45, SbmDbDfn.ColumnIdx.SaAssetCategory_AssocIdCustomer, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; // Common properties. case SbmAssetCategory.Column.Notes: SetAssetCategoryColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.SaAssetCategory_Notes); break; case SbmAssetCategory.Column.Flag: SetAssetCategoryColDfn(columnDfn, "Flags", 40, SbmDbDfn.ColumnIdx.SaAssetCategory_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SbmAssetCategory.Column.Status: SetAssetCategoryColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaAssetCategory_Status, ColumnAlignment.Center); break; case SbmAssetCategory.Column.Status_Desc: SetAssetCategoryColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaAssetCategory_Status); break; case SbmAssetCategory.Column.Status_Ind: SetAssetCategoryColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.SaAssetCategory_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SbmAssetCategory.Column.CreateOn_Date: SetAssetCategoryColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.SaAssetCategory_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; columnDfn.ReadOnly = true; break; case SbmAssetCategory.Column.UpdateOn_Date: SetAssetCategoryColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.SaAssetCategory_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.DateFormat = "d-MMM-yy"; columnDfn.ReadOnly = true; break; case SbmAssetCategory.Column.AssetCount: SetAssetCategoryColDfn(columnDfn, "Asset Count", 70, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.DataName = colNameAssetCategory_AssetCount; break; } if (!String.IsNullOrEmpty(caption)) columnDfn.Caption = caption; if (width > 0) columnDfn.Width = width; return columnDfn; } //------------------------------------------------------------------- // AssetCategory query filter. public override List GetAssetCategoryQueryFilter(SbmAssetCategory.Params prm) { List filter = new List(); // Asset Category Id. String includedIds = prm.IdsIncluded.Concat(","); String colAssetCategory_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Id, AliasAssetCategory); if (!includedIds.IsEmpty()) filter.Add($"{colAssetCategory_Id} IN ({includedIds})"); String excludedIds = prm.IdsExcluded.Concat(","); if (!excludedIds.IsEmpty()) filter.Add($"{colAssetCategory_Id} NOT IN ({excludedIds})"); // Asset Category Type. String colSaAssetCategory_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_AssetType, AliasAssetCategory); if (prm.AssetType > 0) filter.Add($"{colSaAssetCategory_Type}={(int)prm.AssetType}"); // Partial Code. String code = DbQuery.FormatForCondition(prm.CodePartial); String colAssetCategory_Code = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Code, AliasAssetCategory); if (!StringUtil.IsEmpty(code)) filter.Add($"{DbQuery.FormatFn_Left(colAssetCategory_Code, prm.CodePartial.Length)}='{code}'"); // Partial Description. String description = DbQuery.FormatForCondition(prm.DescBriefPartial); String colAssetCategory_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_DescBrief, AliasAssetCategory); if (!StringUtil.IsEmpty(description)) filter.Add($"{DbQuery.FormatFn_Left(colAssetCategory_DescBrief, prm.DescBriefPartial.Length)}='{description}'"); // Status. String colAssetCategory_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Status, AliasAssetCategory); if (prm.StatusCat == SbmAssetCategory.StatusCat.ActiveOnly) filter.Add($"{colAssetCategory_Status}='{StatusActive}'"); else if (prm.StatusCat == SbmAssetCategory.StatusCat.NotDeleted) filter.Add($"{colAssetCategory_Status}!='{StatusDeleted}'"); else if (prm.StatusCat == SbmAssetCategory.StatusCat.Deleted) filter.Add($"{colAssetCategory_Status}='{StatusDeleted}'"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); return filter; } // Item sort columns. public List GetAssetCategorySortColumns(SbmAssetCategory.Params prm) { // Sort sequence: List sortColumnCodes = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for AssetCategory columns in case of conflict. String sortCol = String.Empty; if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.SaAssetCategory) { sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, AliasAssetCategory); } 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.SaAssetCategory_AssetType, AliasAssetCategory) + " ASC"); } return sortColumnCodes; } //------------------------------------------------------------------- // AssetCategory count. private long GetAssetCategoryCount(String filter) { ClearErrorState(); return Database.GetRowCount($"{SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetCategory)} As {AliasAssetCategory}", filter); } public override long GetAssetCategoryCount(SbmAssetCategory.Params prm) { ClearErrorState(); return GetAssetCategoryCount(GetAssetCategoryQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // AssetCategory list. public override List GetAssetCategoryList(SbmAssetCategory.Params prm) { ClearErrorState(); List assetCategories = new List(); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetCategory), AliasAssetCategory); SaAssetCategory_Db dbAssetCategory = new SaAssetCategory_Db(DbInfo); qry.Columns.AddRange(dbAssetCategory.ExistingColumnNames); qry.Filters.AddRange(GetAssetCategoryQueryFilter(prm)); qry.OrderBy.AddRange(GetAssetCategorySortColumns(prm)); // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { dbAssetCategory = new SaAssetCategory_Db(DbInfo); dbAssetCategory.PopulateFrom(dbDataReader); assetCategories.Add(CreateAssetCategory(dbAssetCategory)); } } } catch (Exception exc) { SetErrorState(ErrorMessage.DatabaseQueryException); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return assetCategories; } //------------------------------------------------------------------- // AssetCategory query execution. public override DbResultSet ExecuteAssetCategoryQuery(List columns, SbmAssetCategory.Params prm) { ClearErrorState(); // Construct build database query. DbQuery query = new DbQuery(Database.DbmsType); query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAssetCategory), AliasAssetCategory); // AssetCategory Properties - add columns as defined in query list. if (columns.HasId(SbmAssetCategory.Column.Id)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Id, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.AffIdOwner)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_AffIdOwner, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.AssetType) || columns.HasId(SbmAssetCategory.Column.AssetType_Desc)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_AssetType, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.Code)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Code, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.DescBrief)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_DescBrief, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.IncomeType)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_IncomeType, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.AssocIdSupplier)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_AssocIdSupplier, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.PaymentTerms)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_PaymentTerms, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.TaxCodeIdPurchase)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_TaxCodeIdPurchase, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.AssocIdCustomer)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_AssocIdCustomer, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.TaxCodeIdSell)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_TaxCodeIdSell, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.TaxCodeIdProfit)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_TaxCodeIdProfit, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.DisposeCode)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_DisposeCode, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.UomIdRentalCost)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_UomIdRentalCost, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.TaxCodeIdRentalCost)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_TaxCodeIdRentalCost, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.UomIdRentalPrice)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_UomIdRentalPrice, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.TaxCodeIdRentalPrice)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_TaxCodeIdRentalPrice, AliasAssetCategory)); //--------------------------------------------------------------- // Asset Count if (columns.HasId(SbmAssetCategory.Column.AssetCount)) { String tableAsset = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset); DbQuery qryAssetCount = new DbQuery(Database.DbmsType); qryAssetCount.Tables.Add(tableAsset, aliasAsset); qryAssetCount.Columns.Add($"Count({SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_Id, aliasAsset)})"); qryAssetCount.Filters.Add($"{SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_AssetCategoryId, aliasAsset)}={SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Id, AliasAssetCategory)}"); query.Columns.Add($"({qryAssetCount.BuildQuery()})", colNameAssetCategory_AssetCount); } //--------------------------------------------------------------- // Common Properties if (columns.HasId(SbmAssetCategory.Column.Notes)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Notes, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.Flag)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Flags, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.Status) || columns.HasId(SbmAssetCategory.Column.Status_Desc) || columns.HasId(SbmAssetCategory.Column.Status_Ind)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_Status, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.CreateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_CreateOn, AliasAssetCategory)); if (columns.HasId(SbmAssetCategory.Column.UpdateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAssetCategory_UpdateOn, AliasAssetCategory)); //--------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetAssetCategoryQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetAssetCategorySortColumns(prm)) query.OrderBy.Add(sortColumn); } //return new DbResultSet_DataTableReader(Database, query.BuildQuery()); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }