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.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 { //======================================================================= // Commodity Manager - Commodity Supplier. //======================================================================= partial class SbmCommodityMgr_Dbas { //------------------------------------------------------------------- // Data members. //------------------------------------------------------------------- // Utilities. private List GetLogProperties(SbmCommoditySupplier commoditySupplier) { return new List() { new StringPair("Id",SysId.ToString(commoditySupplier.Id)), new StringPair("Status",commoditySupplier.StatusCode) }; } public override bool CanManageCommoditySuppliers() { if (SessionConsole == null || !AllowConfigOption(Sbm.ConfigOption.CommoditySuppliers)) return false; return Database != null && Database.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier)); } //------------------------------------------------------------------- // Get CommoditySupplier. public override SbmCommoditySupplier GetCommoditySupplier(SbmCommoditySupplier.Params prm) { return GetCommoditySupplier(GetCommoditySupplierQueryFilter(prm).Concat(" AND ", "(", ")")); } private SbmCommoditySupplier GetCommoditySupplier(String filter) { ClearErrorState(); long count = GetCommoditySupplierCount(filter); if (count == 0) return null; if (count != 1) { SetErrorState(ErrorMessage.MultipleItemsFound); return null; } SbmCommoditySupplier commoditySupplier = null; // Query data. using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); CommoditySupplier_Db dbCommoditySupplier = new CommoditySupplier_Db(DbInfo); dbCommoditySupplier.PopulateFrom(dbCommand, aliasCommoditySupplier, filter); commoditySupplier = CreateCommoditySupplier(dbCommoditySupplier); } catch (Exception exc) { SetErrorState(ErrorMessage.DatabaseQueryException); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return commoditySupplier; } //------------------------------------------------------------------- // Create CommoditySupplier. public override SbmCommoditySupplier CreateCommoditySupplier(SysId commodityId, SysId assocIdSupplier) { return new SbmCommoditySupplier_Dbas(commodityId, assocIdSupplier, 0); } private SbmCommoditySupplier_Dbas CreateCommoditySupplier(CommoditySupplier_Db dbCommoditySupplier) { ClearErrorState(); SbmCommoditySupplier_Dbas commoditySupplier = new SbmCommoditySupplier_Dbas(new SysId(dbCommoditySupplier._CommodityId), new SysId(dbCommoditySupplier._AssocIdSupplier), (ushort)dbCommoditySupplier._Flags); PopulateFrom(dbCommoditySupplier, commoditySupplier); return commoditySupplier; } //------------------------------------------------------------------- // Validate CommoditySupplier. public override bool IsValidCommoditySupplierData(SbmCommoditySupplier.Data data, SbmCommoditySupplier.ErrField errField) { ClearErrorState(); if (!base.IsValidCommoditySupplierData(data, errField)) return false; return true; } //------------------------------------------------------------------- // Store CommoditySupplier. public override bool StoreCommoditySuppliers(List commoditySuppliers) { ClearErrorState(); if (Database != null && Database.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier))) foreach (SbmCommoditySupplier commoditySupplier in commoditySuppliers) { } return OK; } public override bool Store(SbmCommoditySupplier commoditySupplier) { ClearErrorState(); commoditySupplier = null; if (Database != null && Database.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier))) { } return OK; } //------------------------------------------------------------------- // Insert CommoditySupplier. public override bool InsertCommoditySupplier(SbmCommoditySupplier commoditySupplier, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidCommoditySupplier(commoditySupplier)) return false; if (SysId.IsValid(commoditySupplier.Id)) return SetErrorState(ErrorMessage.ValidItemId); using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { dbConnection.Open(); CommoditySupplier_Db dbCommoditySupplier = new CommoditySupplier_Db(DbInfo); PopulateTo(dbCommoditySupplier, commoditySupplier, dbUpdateInfo); dbCommoditySupplier.ExecuteInsertCommand(dbCommand); commoditySupplier.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. " + GetLogProperties(commoditySupplier).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return OK; } //------------------------------------------------------------------- // Update CommoditySupplier. public override bool UpdateCommoditySupplier(SbmCommoditySupplier commoditySupplier, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!IsValidCommoditySupplier(commoditySupplier)) return false; if (!SysId.IsValid(commoditySupplier.Id)) return SetErrorState(ErrorMessage.InvalidItemId); if (!commoditySupplier.Changed) { if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. " + GetLogProperties(commoditySupplier).Concat(": ").Concat("", "\n\t")); return true; } using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve commoditySupplier. dbConnection.Open(); CommoditySupplier_Db dbCommoditySupplier = new CommoditySupplier_Db(DbInfo); dbCommoditySupplier.PopulateFrom(dbCommand, aliasCommoditySupplier, "Id=" + SysId.ToString(commoditySupplier.Id)); //SbmUpdateLogItemMonitor_CommoditySupplier updateLogMonitor = new SbmUpdateLogItemMonitor_CommoditySupplier(SbmGlobals.SessionProfile.SessionContext, CreateCommoditySupplier(dbCommoditySupplier), dbUpdateInfo); // Update properties. PopulateTo(dbCommoditySupplier, commoditySupplier, dbUpdateInfo); dbCommoditySupplier.ExecuteUpdateCommand(dbCommand); commoditySupplier.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. " + GetLogProperties(commoditySupplier).Concat(": ").Concat("", "\n\t")); /* Record updates. updateLogMonitor.RecordUpdatedValues(commoditySupplier); updateLogMonitor.LogUpdates();*/ } catch (Exception exc) { SetErrorState(exc.Message); } } return OK; } //------------------------------------------------------------------- // Delete CommoditySupplier. public override bool CommoditySupplierCanBeDeleted(SbmCommoditySupplier commoditySupplier) { ClearErrorState(); if (!base.CommoditySupplierCanBeDeleted(commoditySupplier)) return false; return true; } public override bool DeleteCommoditySupplier(SbmCommoditySupplier commoditySupplier, DbUpdateInfo dbUpdateInfo) { ClearErrorState(); if (!CommoditySupplierCanBeDeleted(commoditySupplier)) return false; using (var dbConnection = Database.CreateConnection()) using (var dbCommand = dbConnection.CreateCommand()) { try { // Retrieve commoditySupplier. dbConnection.Open(); CommoditySupplier_Db dbCommoditySupplier = new CommoditySupplier_Db(DbInfo); dbCommoditySupplier.PopulateFrom(dbCommand, aliasCommoditySupplier, "Id=" + commoditySupplier.Id.ToString()); // Delete commoditySupplier. dbCommand.CommandType = System.Data.CommandType.Text; dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier) + " WHERE Id=" + SysId.ToString(commoditySupplier.Id) + ";"; dbCommand.ExecuteNonQuery(); commoditySupplier.Changed = false; if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(commoditySupplier).Concat(": ").Concat("", "\n\t")); } catch (Exception exc) { SetErrorState(exc.Message); } } return OK; } //------------------------------------------------------------------- // Copy data properties to and from database. private void PopulateTo(CommoditySupplier_Db dbCommoditySupplier, SbmCommoditySupplier commoditySupplier, DbUpdateInfo dbUpdateInfo) { dbCommoditySupplier._CommodityId = commoditySupplier.CommodityId.ToInt(); dbCommoditySupplier._AssocIdSupplier = commoditySupplier.AssocIdSupplier.ToInt(); dbCommoditySupplier._ProductCode = commoditySupplier.ProductCode; dbCommoditySupplier._AmountCost = commoditySupplier.AmountCost; dbCommoditySupplier._CurrencyIdCost = commoditySupplier.CurrencyIdCost.ToInt(); // Common properties. dbCommoditySupplier._Notes = commoditySupplier.Notes; dbCommoditySupplier._Status = SacsSystem.GetStatusCode(commoditySupplier.Status); dbCommoditySupplier._Flags = (short)commoditySupplier.Flags; if (!SysId.IsValid(commoditySupplier.Id)) { dbCommoditySupplier._CreateOn = DateTime.UtcNow; dbCommoditySupplier._CreateBy = dbUpdateInfo.UserId.ToInt(); dbCommoditySupplier._CreateHost = dbUpdateInfo.Host; } dbCommoditySupplier._UpdateOn = DateTime.UtcNow; dbCommoditySupplier._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbCommoditySupplier._UpdateHost = dbUpdateInfo.Host; } private void PopulateFrom(CommoditySupplier_Db dbCommoditySupplier, SbmCommoditySupplier commoditySupplier) { commoditySupplier.CommodityId = new SysId(dbCommoditySupplier._CommodityId); commoditySupplier.AssocIdSupplier = new SysId(dbCommoditySupplier._AssocIdSupplier); commoditySupplier.ProductCode = dbCommoditySupplier._ProductCode; commoditySupplier.AmountCost = dbCommoditySupplier._AmountCost ?? 0.0m; commoditySupplier.CurrencyIdCost = new SysId(dbCommoditySupplier._CurrencyIdCost ?? 0); // Common properties. commoditySupplier.Notes = dbCommoditySupplier._Notes; commoditySupplier.Status = SacsSystem.GetStatusForCode(dbCommoditySupplier._Status); commoditySupplier.SetCreateStamp(dbCommoditySupplier._CreateOn, new SysId(dbCommoditySupplier._CreateBy ?? 0), dbCommoditySupplier._CreateHost); commoditySupplier.SetUpdateStamp(dbCommoditySupplier._UpdateOn ?? default(DateTime), new SysId(dbCommoditySupplier._UpdateBy ?? 0), dbCommoditySupplier._UpdateHost); commoditySupplier.AcceptChanges(); } //------------------------------------------------------------------- // Column definitions. private static readonly String aliasCommoditySupplier = "CmdSup"; private static String aliasCommoditySupplier_Commodity = "CmdSup_Cmd"; private static String prefixCommoditySupplier_Commodity = aliasCommoditySupplier_Commodity + "_"; private static String aliasCommoditySupplier_Association = "CmdSup_Ass"; private static String prefixCommoditySupplier_Association = aliasCommoditySupplier_Association + "_"; private static String aliasCommoditySupplier_Affililate = "CmdSup_Aff"; private static String prefixCommoditySupplier_Affiliate = aliasCommoditySupplier_Affililate + "_"; private static String aliasCommoditySupplier_Currency = "CmdSup_Cur"; private static String prefixCommoditySupplier_Currency = aliasCommoditySupplier_Currency + "_"; // Column definition population. private void SetCommoditySupplierColDfn (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.CommoditySupplier) alias = aliasCommoditySupplier; 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); } public override ColumnDfn GetCommoditySupplierColumnDfn(SbmCommoditySupplier.Column columnId, string caption = "", int width = 0) { ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); switch (columnId) { case SbmCommoditySupplier.Column.Pos: SetCommoditySupplierColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right); columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off; columnDfn.ReadOnly = true; columnDfn.Resizable = false; break; case SbmCommoditySupplier.Column.Id: SetCommoditySupplierColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, ColumnAlignment.Right, DataValue.DataType.Long); columnDfn.ReadOnly = true; break; // Item properties. case SbmCommoditySupplier.Column.Commodity_Id: SetCommoditySupplierColDfn(columnDfn, "Cmd Id", 60, SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, ColumnAlignment.Right, DataValue.DataType.Long, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_Code: SetCommoditySupplierColDfn(columnDfn, "Commodity", 80, SbmDbDfn.ColumnIdx.Commodity_Code, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_DescBrief: SetCommoditySupplierColDfn(columnDfn, "Commodity desc", 140, SbmDbDfn.ColumnIdx.Commodity_DescBrief, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_CategoryCode: SetCommoditySupplierColDfn(columnDfn, "Commodity Cat", 80, SbmDbDfn.ColumnIdx.Commodity_Category, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_CategoryDesc: SetCommoditySupplierColDfn(columnDfn, "Commodity Category", 120, SbmDbDfn.ColumnIdx.Commodity_Category, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_Status: SetCommoditySupplierColDfn(columnDfn, "Cmd status", 75, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_StatusDesc: SetCommoditySupplierColDfn(columnDfn, "Cmd status descbrief", 75, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); break; case SbmCommoditySupplier.Column.Commodity_StatusInd: SetCommoditySupplierColDfn(columnDfn, "Cmd status ind", 75, SbmDbDfn.ColumnIdx.Commodity_Status, ColumnAlignment.Center, DataValue.DataType.TriState, aliasCommoditySupplier_Commodity, prefixCommoditySupplier_Commodity); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SbmCommoditySupplier.Column.AssocIdSupplier: SetCommoditySupplierColDfn(columnDfn, "Supp Id", 60, SbmDbDfn.ColumnIdx.CommoditySupplier_AssocIdSupplier, ColumnAlignment.Right, DataValue.DataType.Long, aliasCommoditySupplier_Association, prefixCommoditySupplier_Association); break; case SbmCommoditySupplier.Column.Supplier_Code: SetCommoditySupplierColDfn(columnDfn, "Supplier code", 80, SbmDbDfn.ColumnIdx.Association_Code, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Association, prefixCommoditySupplier_Association); break; case SbmCommoditySupplier.Column.Supplier_Name: SetCommoditySupplierColDfn(columnDfn, "Supplier name", 120, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Affililate, prefixCommoditySupplier_Affiliate); break; case SbmCommoditySupplier.Column.ProductCode: SetCommoditySupplierColDfn(columnDfn, "Product", 100, SbmDbDfn.ColumnIdx.CommoditySupplier_ProductCode); break; case SbmCommoditySupplier.Column.CostAmount: SetCommoditySupplierColDfn(columnDfn, "Cost", 80, SbmDbDfn.ColumnIdx.CommoditySupplier_AmountCost, ColumnAlignment.Right, DataValue.DataType.Double); break; case SbmCommoditySupplier.Column.CostAmount_Fmt: SetCommoditySupplierColDfn(columnDfn, "Cost", 80, SbmDbDfn.ColumnIdx.CommoditySupplier_AmountCost, ColumnAlignment.Right, DataValue.DataType.String); break; case SbmCommoditySupplier.Column.CurrencyIdCost: SetCommoditySupplierColDfn(columnDfn, "Currency", 80, SbmDbDfn.ColumnIdx.CommoditySupplier_CurrencyIdCost, ColumnAlignment.Right, DataValue.DataType.Long); break; case SbmCommoditySupplier.Column.CurrencyIdCost_Code: SetCommoditySupplierColDfn(columnDfn, "Currency", 80, SbmDbDfn.ColumnIdx.Currency_Code, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Currency, prefixCommoditySupplier_Currency); break; case SbmCommoditySupplier.Column.CurrencyIdCost_Symbol: SetCommoditySupplierColDfn(columnDfn, "Currency", 80, SbmDbDfn.ColumnIdx.Currency_Symbol, ColumnAlignment.Default, DataValue.DataType.String, aliasCommoditySupplier_Currency, prefixCommoditySupplier_Currency); break; // Common properties. case SbmCommoditySupplier.Column.Notes: SetCommoditySupplierColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.CommoditySupplier_Notes); break; case SbmCommoditySupplier.Column.Status: SetCommoditySupplierColDfn(columnDfn, "Status", 75, SbmDbDfn.ColumnIdx.CommoditySupplier_Status, ColumnAlignment.Center); break; case SbmCommoditySupplier.Column.Status_Desc: SetCommoditySupplierColDfn(columnDfn, "Status", 75, SbmDbDfn.ColumnIdx.CommoditySupplier_Status, ColumnAlignment.Center); break; case SbmCommoditySupplier.Column.Status_Ind: SetCommoditySupplierColDfn(columnDfn, "Status", 75, SbmDbDfn.ColumnIdx.CommoditySupplier_Status, ColumnAlignment.Center, DataValue.DataType.TriState); columnDfn.TriStateFormat = ColumnTriStateFormat.Lights; break; case SbmCommoditySupplier.Column.CreateOn_Date: SetCommoditySupplierColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.CommoditySupplier_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date); columnDfn.ReadOnly = true; break; case SbmCommoditySupplier.Column.UpdateOn_Date: SetCommoditySupplierColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.CommoditySupplier_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; } //------------------------------------------------------------------- // Query filter. public override List GetCommoditySupplierQueryFilter(SbmCommoditySupplier.Params prm) { List filter = new List(); // CommoditySupplier Id. String includedIds = prm.IdsIncluded.Concat(","); if (!includedIds.IsEmpty()) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, aliasCommoditySupplier) + " IN (" + includedIds + ")"); String excludedIds = prm.IdsExcluded.Concat(","); if (!excludedIds.IsEmpty()) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, aliasCommoditySupplier) + " NOT IN (" + excludedIds + ")"); // CommodityId. String colCommodityId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, aliasCommoditySupplier); if (SysId.IsValid(prm.CommodityId)) filter.Add(colCommodityId + "=" + prm.CommodityId.ToString()); // AssocIdSupplier. String colAssocIdSupplier = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_AssocIdSupplier, aliasCommoditySupplier); if (SysId.IsValid(prm.AssocIdSupplier)) filter.Add(colAssocIdSupplier + "=" + prm.AssocIdSupplier.ToString()); // ProductCode. String colProductCode = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_ProductCode, aliasCommoditySupplier); if (StringUtil.IsEmpty(prm.ProductCode)) filter.Add(colProductCode + "=" + prm.ProductCode); // AmountCost. String colAmountCost = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_AmountCost, aliasCommoditySupplier); if (prm.AmountCost > 0) filter.Add(colProductCode + "=" + prm.AmountCost); // CurrencyIdCost. String colCurrencyIdCost = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CurrencyIdCost, aliasCommoditySupplier); if (SysId.IsValid(prm.CurrencyIdCost)) filter.Add(colAssocIdSupplier + "=" + SysId.ToString(prm.CurrencyIdCost)); // Restrict to Active. String colCommoditySupplier_Status = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_Status, aliasCommoditySupplier); if (prm.RestrictToActive) filter.Add(colCommoditySupplier_Status + "='" + StatusActive + "'"); //--------------------------------------------------------------- // Common Properties. /* ToDo does it require: Notes. if (!StringUtil.IsEmpty(prm.NotesPartial)) filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_Notes, aliasCommoditySupplier) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");*/ // CommoditySupplier Status. if (prm.StatusCat == SbmCommoditySupplier.StatusCat.ActiveOnly) filter.Add(colCommoditySupplier_Status + "='" + StatusActive + "'"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); return filter; } //------------------------------------------------------------------- // Sort columns. public List GetCommoditySupplierSortColumns(SbmCommoditySupplier.Params prm) { // Sort sequence: List sortColumnNames = new List(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for CommoditySupplier columns in case of conflict. String sortCol = String.Empty; if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.CommoditySupplier) { sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasCommoditySupplier); } 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(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_AssocIdSupplier, aliasCommoditySupplier) + " ASC"); } return sortColumnNames; } //------------------------------------------------------------------- // Item count. private long GetCommoditySupplierCount(String filter) { ClearErrorState(); return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier) + " As " + aliasCommoditySupplier, filter); } public override long GetCommoditySupplierCount(SbmCommoditySupplier.Params prm) { ClearErrorState(); return GetCommoditySupplierCount(GetCommoditySupplierQueryFilter(prm).Concat(" AND ", "(", ")")); } //------------------------------------------------------------------- // Item list. public override List GetCommoditySupplierList(SbmCommoditySupplier.Params prm) { ClearErrorState(); List commoditySuppliers = new List(); DbQuery qry = new DbQuery(Database.DbmsType); qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier), aliasCommoditySupplier); CommoditySupplier_Db dbCommoditySupplier = new CommoditySupplier_Db(DbInfo); qry.Columns.AddRange(dbCommoditySupplier.ExistingColumnNames); qry.Filters.AddRange(GetCommoditySupplierQueryFilter(prm)); qry.OrderBy.AddRange(GetCommoditySupplierSortColumns(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()) { dbCommoditySupplier = new CommoditySupplier_Db(DbInfo); dbCommoditySupplier.PopulateFrom(dbDataReader); commoditySuppliers.Add(CreateCommoditySupplier(dbCommoditySupplier)); } } } catch (Exception exc) { SetErrorState(ErrorMessage.DatabaseQueryException); SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}"); } } return commoditySuppliers; } //------------------------------------------------------------------- // Execute query. public override DbResultSet ExecuteCommoditySupplierQuery(List columns, SbmCommoditySupplier.Params prm) { ClearErrorState(); //--------------------------------------------------------------- // Construct query. DbQuery query = new DbQuery(Database.DbmsType); query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.CommoditySupplier), aliasCommoditySupplier); // Columns to query. if (columns.HasId(SbmCommoditySupplier.Column.Commodity_Id)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommoditySupplier)); if (columns.HasId(SbmCommoditySupplier.Column.Id)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, aliasCommoditySupplier)); // Common columns. if (columns.HasId(SbmCommoditySupplier.Column.Notes)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_Notes, aliasCommoditySupplier)); if (columns.HasId(SbmCommoditySupplier.Column.Status) || columns.HasId(SbmCommoditySupplier.Column.Status_Desc) || columns.HasId(SbmCommoditySupplier.Column.Status_Ind)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_Status, aliasCommoditySupplier)); if (columns.HasId(SbmCommoditySupplier.Column.CreateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CreateOn, aliasCommoditySupplier)); if (columns.HasId(SbmCommoditySupplier.Column.UpdateOn_Date)) query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_UpdateOn, aliasCommoditySupplier)); //--------------------------------------------------------------- // Commodity. bool hasCommodityCols = columns.HasId(SbmCommoditySupplier.Column.Commodity_Code); if (!hasCommodityCols) hasCommodityCols = columns.HasId(SbmCommoditySupplier.Column.Commodity_DescBrief); if (!hasCommodityCols) hasCommodityCols = columns.HasId(SbmCommoditySupplier.Column.Commodity_Status); if (!hasCommodityCols) hasCommodityCols = columns.HasId(SbmCommoditySupplier.Column.Commodity_StatusDesc); if (!hasCommodityCols) hasCommodityCols = columns.HasId(SbmCommoditySupplier.Column.Commodity_CategoryCode); if (!hasCommodityCols) hasCommodityCols = columns.HasId(SbmCommoditySupplier.Column.Commodity_CategoryDesc); if (hasCommodityCols) { // Join to the commodity. DbQueryJoin joinCmd = new DbQueryJoin(DbJoinType.LeftOuter); joinCmd.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasCommoditySupplier_Commodity); joinCmd.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasCommoditySupplier_Commodity) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_CommodityId, aliasCommoditySupplier)); query.Joins.Add(joinCmd); // Data columns to return. List commodityCols = new List(); commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Code); commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_DescBrief); commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Category); commodityCols.Add(SbmDbDfn.ColumnIdx.Commodity_Status); foreach (SbmDbDfn.ColumnIdx dbColumn in commodityCols) query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasCommoditySupplier_Commodity), prefixCommoditySupplier_Commodity + SbmDbDfn.GetColumnName(dbColumn, false)); } //--------------------------------------------------------------- // Supplier. bool bHasSupplierCols = columns.HasId(SbmCommoditySupplier.Column.Supplier_Code); if (!bHasSupplierCols) bHasSupplierCols = columns.HasId(SbmCommoditySupplier.Column.Supplier_Name); if (bHasSupplierCols) { // Join to the Supplier Association: DbQueryJoin joinAssoc = new DbQueryJoin(DbJoinType.LeftOuter); joinAssoc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasCommoditySupplier_Association); joinAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasCommoditySupplier_Association, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.CommoditySupplier_AssocIdSupplier, aliasCommoditySupplier, false)); query.Joins.Add(joinAssoc); // Join to the Supplier Affiliate: DbQueryJoin joinAffil = new DbQueryJoin(DbJoinType.LeftOuter); joinAffil.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasCommoditySupplier_Affililate); joinAffil.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasCommoditySupplier_Affililate, false) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasCommoditySupplier_Association, false)); query.Joins.Add(joinAffil); // Data columns to return: query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Code, aliasCommoditySupplier_Association, false), prefixCommoditySupplier_Association + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Association_Code, false)); query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Name, aliasCommoditySupplier_Affililate, false), prefixCommoditySupplier_Affiliate + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Affiliate_Name, false)); } //--------------------------------------------------------------- // Populate filter. query.Filters.AddRange(GetCommoditySupplierQueryFilter(prm)); if (prm.IdsIncluded.Count != 1) { // Configure sort sequence. foreach (String sortColumn in GetCommoditySupplierSortColumns(prm)) query.OrderBy.Add(sortColumn); } //return new DbResultSet_DataTableReader(Database, query.BuildQuery()); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); } //------------------------------------------------------------------- } //======================================================================= }