using Sarand.Net.Standard.Dbas.Data; 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 Saxonite.Base.App; using Saxonite.Net.Standard.Dbas.Bus; using Saxonite.Net.Standard.Dbas.Internal; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Data.Common; using System.Text; using Saxonite.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Utils; using System.Linq; namespace Saxonite.Net.Standard.Dbas.Mgr { //======================================================================= partial class SaxItemDataMgr_Dbas { //******************************************************************* // Item Data Mgr - Item Address //******************************************************************* // Utilities. private List GetLogProperties(SaxItemAddress itemAddress) { return new List() { new StringPair("Id",SysId.ToString(itemAddress.Id)), new StringPair("ItemId", (Sax.DataItemType)itemAddress.ItemId.Type + ": " + itemAddress.ItemId.Id), new StringPair("Town",itemAddress.Town), new StringPair("PostalCode",itemAddress.PostalCode), new StringPair("Status",itemAddress.StatusCode) }; } //------------------------------------------------------------------- // Create item. public override SaxItemAddress CreateItemAddress(ItemId itemId, Sax.AddressType addressType) { ClearErrorState(); return new SaxItemAddress_Dbas(CoreDatabase, null, itemId, addressType, 0); } private SaxItemAddress_Dbas CreateItemAddress(ItemAddress_Db dbItemAddress) { ClearErrorState(); ItemId itemId = new ItemId(dbItemAddress._ItemType, new SysId(dbItemAddress._ItemId)); SaxItemAddress_Dbas itemAddress = new SaxItemAddress_Dbas(CoreDatabase, new SysId(dbItemAddress._Id), itemId, (Sax.AddressType)dbItemAddress._AddressType, (ushort)dbItemAddress._Flags); PopulateFrom(dbItemAddress, itemAddress); return itemAddress; } //------------------------------------------------------------------- // Get item. public override SaxItemAddress GetItemAddress(SaxItemAddress.Params prm) { ClearErrorState(); return GetItemAddress(GetItemAddressQueryFilter(prm).Concat(" And ", "(", ")")); } private SaxItemAddress GetItemAddress(String filter) { ClearErrorState(); long count = GetItemAddressCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState("Multiple items found"); return null; } SaxItemAddress itemAddress = null; // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo); dbItemAddress.PopulateFrom(dbCommand, aliasItemAddress, filter); itemAddress = CreateItemAddress(dbItemAddress); } catch (Exception exc) { SetErrorState("Database query exception"); SaLogger.Warn(GetType().Name + ".GetItemAddress\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return itemAddress; } //------------------------------------------------------------------- // Validate item. public override bool IsValidItemAddressData(SaxItemAddress.Data data, SaxItemAddress.ErrField errField) { ClearErrorState(); if (!base.IsValidItemAddressData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Insert item. public override bool InsertItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".InsertItemAddress"; ClearErrorState(); if (!IsValidItemAddress(itemAddress)) return false; if (SysId.IsValid(itemAddress.Id)) return SetErrorState(ErrorMessage.ValiditemId); using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo); PopulateTo(dbItemAddress, itemAddress, dbUpdateInfo); if (ItemAddress_Db.FieldsNonId.Contains("Id")) { // Generate next Id. dbItemAddress._Id = CoreDatabase.GetNextIdFromTable("ItemAddress"); } dbItemAddress.ExecuteInsertCommand(dbCommand); itemAddress.Id = new SysId(dbItemAddress._Id); itemAddress.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Update item. public override bool UpdateItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".UpdateItemAddress"; ClearErrorState(); if (!IsValidItemAddress(itemAddress)) return false; if (!SysId.IsValid(itemAddress.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!itemAddress.Changed) { if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo); dbItemAddress.PopulateFrom(dbCommand, aliasItemAddress, "Id=" + SysId.ToString(itemAddress.Id)); // ToDo SaxUpdateLogItemMonitor_ItemAddress updateLogMonitor = new SaxUpdateLogItemMonitor_ItemAddress(SessionContext, CreateItemAddress(dbItemAddress), dbUpdateInfo); // Update item. PopulateTo(dbItemAddress, itemAddress, dbUpdateInfo); dbItemAddress.ExecuteUpdateCommand(dbCommand); itemAddress.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")); // Record updates. // ToDo updateLogMonitor.RecordUpdatedValues(itemAddress); // ToDo updateLogMonitor.LogUpdates(); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); } //------------------------------------------------------------------- // Delete item. public override bool ItemAddressCanBeDeleted(SaxItemAddress itemAddress) { ClearErrorState(); if (!base.ItemAddressCanBeDeleted(itemAddress)) return false; return true; } public override bool DeleteItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo) { String fn = GetType().Name + ".DeleteItemAddress"; ClearErrorState(); if (!ItemAddressCanBeDeleted(itemAddress)) return false; // Item Addresses are logically deleted by changing the status. itemAddress.Status = SaStatus.Deleted; return UpdateItemAddress(itemAddress, dbUpdateInfo); /* * Physical deletion. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve item. dbConnection.Open(); ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo); dbItemAddress.PopulateFrom(dbCommand, aliasItemAddress, "Id=" + itemAddress.Id.ToString()); // Delete item. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress) + " WHERE Id=" + SysId.ToString(itemAddress.Id) + ";"; dbCommand.ExecuteNonQuery(); itemAddress.Changed = false; if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return !HasErrorState(); */ } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(ItemAddress_Db dbItemAddress, SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo) { dbItemAddress._Id = SysId.ToLong(itemAddress.Id); dbItemAddress._ItemType = itemAddress.ItemId.Type; dbItemAddress._ItemId = SysId.ToInt(itemAddress.ItemId.Id); dbItemAddress._AddressType = (short)itemAddress.AddressType; dbItemAddress._Caption = StringUtil.EmptyOnNull(itemAddress.Caption); dbItemAddress._Line1 = StringUtil.EmptyOnNull(itemAddress.Line1); dbItemAddress._Line2 = StringUtil.EmptyOnNull(itemAddress.Line2); dbItemAddress._Line3 = StringUtil.EmptyOnNull(itemAddress.Line3); dbItemAddress._Town = StringUtil.EmptyOnNull(itemAddress.Town); dbItemAddress._Province = StringUtil.EmptyOnNull(itemAddress.Province); dbItemAddress._RegionIdProvince = SysId.ToInt(itemAddress.RegionIdProvince); dbItemAddress._Country = StringUtil.EmptyOnNull(itemAddress.Country); dbItemAddress._RegionIdCountry = SysId.ToInt(itemAddress.RegionIdCountry); // Location. dbItemAddress._LocationSource = StringUtil.EmptyOnNull(itemAddress.LocationSource); dbItemAddress._LocationStoredAt = itemAddress.LocationStoredAt; dbItemAddress._LocationUpdateRequired = itemAddress.LocationUpdateRequired; dbItemAddress._LocationData = StringUtil.EmptyOnNull(itemAddress.LocationData); dbItemAddress._LocationFormattedAddress = StringUtil.EmptyOnNull(itemAddress.LocationFormattedAddress); dbItemAddress._LocationLatitude = itemAddress.LocationLatitude; dbItemAddress._LocationLongitude = itemAddress.LocationLongitude; dbItemAddress._LocationAltitude = itemAddress.LocationAltitude; // Common. dbItemAddress._Notes = StringUtil.EmptyOnNull(itemAddress.Notes); dbItemAddress._Status = SacsSystem.GetStatusCode(itemAddress.Status); dbItemAddress._Flags = (short)itemAddress.Flags; if (!SysId.IsValid(itemAddress.Id)) { dbItemAddress._CreateOn = DateTime.Now; dbItemAddress._CreateBy = dbUpdateInfo.UserId.ToInt(); dbItemAddress._CreateHost = dbUpdateInfo.Host; } dbItemAddress._UpdateOn = DateTime.Now; dbItemAddress._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbItemAddress._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(ItemAddress_Db dbItemAddress, SaxItemAddress itemAddress) { //itemAddress.Id = new SysId(dbItemAddress._Id); //itemAddress.ItemId = new ItemId(dbItemAddress._ItemType, new SysId(dbItemAddress._ItemId)); itemAddress.AddressType = (Sax.AddressType)dbItemAddress._AddressType; itemAddress.Caption = dbItemAddress._Caption; itemAddress.Line1 = dbItemAddress._Line1; itemAddress.Line2 = dbItemAddress._Line2; itemAddress.Line3 = dbItemAddress._Line3; itemAddress.Town = dbItemAddress._Town; itemAddress.Province = dbItemAddress._Province; itemAddress.RegionIdProvince = new SysId(dbItemAddress._RegionIdProvince); itemAddress.Country = dbItemAddress._Country; itemAddress.RegionIdCountry = new SysId(dbItemAddress._RegionIdCountry); // Location. itemAddress.LocationSource = dbItemAddress._LocationSource; itemAddress.LocationStoredAt = dbItemAddress._LocationStoredAt; itemAddress.LocationUpdateRequired = dbItemAddress._LocationUpdateRequired; itemAddress.LocationData = dbItemAddress._LocationData; itemAddress.LocationFormattedAddress = dbItemAddress._LocationFormattedAddress; itemAddress.LocationLatitude = dbItemAddress._LocationLatitude; itemAddress.LocationLongitude = dbItemAddress._LocationLongitude; itemAddress.LocationAltitude = dbItemAddress._LocationAltitude; // Common. itemAddress.Notes = dbItemAddress._Notes; itemAddress.Status = SacsSystem.GetStatusForCode(dbItemAddress._Status); itemAddress.SetCreateStamp(dbItemAddress._CreateOn, new SysId(dbItemAddress._CreateBy), dbItemAddress._CreateHost); itemAddress.SetUpdateStamp(dbItemAddress._UpdateOn, new SysId(dbItemAddress._UpdateBy), dbItemAddress._UpdateHost); itemAddress.AcceptChanges(); } //------------------------------------------------------------------- // Item column definitions. private static readonly String aliasItemAddress = "ItmSpt"; private void SetItemAddressColDfn (ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol, ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String, String alias = "", String prefix = "") { if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ItemAddress) alias = aliasItemAddress; col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align); if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown) col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol); } public override ColumnDfn GetItemAddressColumnDfn(SaxItemAddress.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { //----------------------------------------------------------- case SaxItemAddress.Column.Pos: SetItemAddressColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SaxItemAddress.Column.Id: SetItemAddressColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.ItemType: SetItemAddressColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, ColumnAlignment.Center, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.ItemType_Code: SetItemAddressColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, ColumnAlignment.Center); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.ItemType_Desc: SetItemAddressColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, ColumnAlignment.Center); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.ItemId: SetItemAddressColDfn(columnDfn, "Item Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Address properties. case SaxItemAddress.Column.Caption: SetItemAddressColDfn(columnDfn, "Caption", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Caption, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.Line1: SetItemAddressColDfn(columnDfn, "Line1", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.Line2: SetItemAddressColDfn(columnDfn, "Line2", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.Line3: SetItemAddressColDfn(columnDfn, "Line3", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.Town: SetItemAddressColDfn(columnDfn, "Town", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_Town, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.Province: SetItemAddressColDfn(columnDfn, "Province", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_Province, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.Country: SetItemAddressColDfn(columnDfn, "Country", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_Country, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.PostalCode: SetItemAddressColDfn(columnDfn, "PostalCode", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.PhoneMain: SetItemAddressColDfn(columnDfn, "PhoneMain", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_PhoneMain, ColumnAlignment.Left, DataValue.DataType.String); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- // Location. //----------------------------------------------------------- // Derived properties. //----------------------------------------------------------- // Common properties. case SaxItemAddress.Column.Notes: SetItemAddressColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ItemAddress_Notes); break; case SaxItemAddress.Column.Flags: SetItemAddressColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ItemAddress_Flags, ColumnAlignment.Center, DataValue.DataType.Long); break; case SaxItemAddress.Column.Status: SetItemAddressColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, ColumnAlignment.Center); break; case SaxItemAddress.Column.Status_Desc: SetItemAddressColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, ColumnAlignment.Center); break; case SaxItemAddress.Column.Status_Ind: SetItemAddressColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SaxItemAddress.Column.CreateOn_Date: SetItemAddressColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SaxItemAddress.Column.UpdateOn_Date: SetItemAddressColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; //----------------------------------------------------------- } if (!String.IsNullOrEmpty(caption)) columnDfn.Caption = caption; if (width > 0) columnDfn.Width = width; return columnDfn; } //------------------------------------------------------------------- // Item query filter. public override List GetItemAddressQueryFilter(SaxItemAddress.Params prm) { List filter = new List(); // Item Ids. String idsIncluded = prm.IdsIncluded.Concat(","); if (!idsIncluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress) + " IN (" + idsIncluded + ")"); String idsExcluded = prm.IdsExcluded.Concat(","); if (!idsExcluded.IsEmpty()) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress) + " NOT IN (" + idsExcluded + ")"); // Address type. if (prm.AddressType > 0) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_AddressType, aliasItemAddress) + "=" + ((int)prm.AddressType).ToString()); // Item Ids. if (!prm.ItemIdsIncluded.IsEmpty()) { List itemIdFilters = new List(); foreach (ItemId itemId in prm.ItemIdsIncluded) { if (!ItemId.IsValid(itemId)) continue; String itemIdFilter = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, aliasItemAddress) + "=" + itemId.Type + " AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemId, aliasItemAddress) + "=" + SysId.ToInt(itemId.Id); itemIdFilters.Add(itemIdFilter); } if (!itemIdFilters.IsEmpty()) filter.Add(itemIdFilters.Concat(" OR ", "(", ")")); } // Address search. if (!StringUtil.IsEmpty(prm.AddressSearch)) { // Split filter into words. List searchFilter = new List(); List filterWords = prm.AddressSearch.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList(); filterWords.RemoveDuplicatesCI(); filterWords.RemoveBlanks(); foreach (String filterWord in filterWords) { List organisationFilter = new List(); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'"); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'"); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'"); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Town, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'"); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Province, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'"); organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'"); searchFilter.Add(organisationFilter.Concat(" OR ", "(", ")")); } filter.Add(searchFilter.Concat(" AND ", "(", ")")); } // Notes. if (!StringUtil.IsEmpty(prm.NotesPartial)) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Notes, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'"); // Status. if (prm.StatusCat != SaxItemAddress.StatusCat.Any) filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, aliasItemAddress) + GetItemAddressStatusCatFilterCondition(prm.StatusCat)); if (filter.Count < 1) filter.Add("1=1"); return filter; } internal static String GetItemAddressStatusCatFilterCondition(SaxItemAddress.StatusCat statusCat) { if (statusCat == SaxItemAddress.StatusCat.ActiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'"; if (statusCat == SaxItemAddress.StatusCat.InactiveOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'"; if (statusCat == SaxItemAddress.StatusCat.NotDeleted) return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; if (statusCat == SaxItemAddress.StatusCat.DeletedOnly) return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'"; return ""; } // Item sort columns. public List GetItemAddressSortColumns(SaxItemAddress.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for ItemAddress columns in case of conflict. String sortCol = String.Empty; if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ItemAddress) { sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasItemAddress); } else { sortCol = columnDfn.DataName; if (!StringUtil.IsEmpty(columnDfn.SortDataName)) sortCol = columnDfn.SortDataName; } if (!sortCol.IsEmpty()) { DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", ")); } } sortColumnNames.RemoveBlanks(); if (sortColumnNames.IsEmpty()) { // Default sort columns. sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetItemAddressCount(String filter) { ClearErrorState(); return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress) + " As " + aliasItemAddress, filter); } public override long GetItemAddressCount(SaxItemAddress.Params prm) { ClearErrorState(); return GetItemAddressCount(GetItemAddressQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetItemAddressList(SaxItemAddress.Params prm) { List itemAddresss = new List(); DbQuery qry = new DbQuery(CoreDatabase.DbmsType); qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress), aliasItemAddress); ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo); qry.Columns.AddRange(dbItemAddress.ExistingColumnNames); qry.Filters.AddRange(GetItemAddressQueryFilter(prm)); qry.OrderBy.AddRange(GetItemAddressSortColumns(prm)); // Query data. using (var dbConnection = CoreDatabase.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging); using (DbDataReader dbDataReader = dbCommand.ExecuteReader()) { while (dbDataReader.Read()) { dbItemAddress = new ItemAddress_Db(CoreDbInfo); dbItemAddress.PopulateFrom(dbDataReader); itemAddresss.Add(CreateItemAddress(dbItemAddress)); } } } catch (Exception exc) { SaLogger.Warn(GetType().Name + ".GetItemAddressList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return itemAddresss; } //------------------------------------------------------------------- // Item query execution. public override DbResultSet ExecuteItemAddressQuery(List columns, SaxItemAddress.Params prm) { ClearErrorState(); //--------------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(CoreDatabase.DbmsType); query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress), aliasItemAddress); // Add columns as defined in query list. if (columns.HasId(SaxItemAddress.Column.Id)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.ItemType) || columns.HasId(SaxItemAddress.Column.ItemType_Code) || columns.HasId(SaxItemAddress.Column.ItemType_Desc)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.ItemId)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemId, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.AddressType) || columns.HasId(SaxItemAddress.Column.AddressType_Code) || columns.HasId(SaxItemAddress.Column.AddressType_Desc)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_AddressType, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Caption)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Caption, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Line1)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Line2)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Line3)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Town)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Town, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Province)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Province, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Country)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Country, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.PostalCode)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.PhoneMain)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_PhoneMain, aliasItemAddress)); // ToDo Address Location columns. // Common properties. if (columns.HasId(SaxItemAddress.Column.Notes)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Notes, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Flags)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Flags, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.Status) || columns.HasId(SaxItemAddress.Column.Status_Desc) || columns.HasId(SaxItemAddress.Column.Status_Ind)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.CreateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_CreateOn, aliasItemAddress)); if (columns.HasId(SaxItemAddress.Column.UpdateOn_Date)) query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_UpdateOn, aliasItemAddress)); //--------------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetItemAddressQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetItemAddressSortColumns(prm)) query.OrderBy.Add(sortColumn); } //--------------------------------------------------------------------- //return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }