using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.BusinessMgr.Net.Standard.Base.Mgr; using Sarand.BusinessMgr.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Dbas.Base; using Sarand.Net.Standard.Dbas.Data; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Mgr { //======================================================================= internal partial class SbmTransactionMgr_Dbas : SbmTransactionMgr { //------------------------------------------------------------------- // Data members. private SacsDatabase db = null; private readonly SbmDbDataItem.SbmDatabaseInfo dbInfo; private readonly int orderQuantityDecimals; private readonly int weightDecimals; bool locationIdListsPopulated = false; private List locationIds_All; private List locationIds_Calc; private List locationIds_Sales; private List locationIds_NonSales; //------------------------------------------------------------------- // Construction. public SbmTransactionMgr_Dbas(ISbmUserContext userContext) : base(userContext) { db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase); dbInfo = new SbmDbDataItem.SbmDatabaseInfo(db.DatabaseName, db.GetTableDfns()); orderQuantityDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.OrderQuantity); weightDecimals = UserContext.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityWeight); } //------------------------------------------------------------------- // Properties. protected ISacsDatabase Database { get { return db; } } protected SbmDbDataItem.SbmDatabaseInfo DbInfo { get { return dbInfo; } } //------------------------------------------------------------------- // Utilities. //------------------------------------------------------------------- // Retrieve the list of transactions types that reference the specified commodity code. public override List GetTransactionTypesForCommodity(SysId commodityId, SbmTransaction.StatusCat statusCat = SbmTransaction.StatusCat.NotCancelled) { String fn = GetType().Name + ".GetTransactionTypesForCommodity"; List transactionTypes = new List(); if (!SysId.IsValid(commodityId)) return transactionTypes; String aliasTrans = "aTrn"; String aliasReqnt = "aReq"; String colTransactionType = "TransType"; DbQuery qry = new DbQuery(Database.DbmsType); // Transaction table. qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasTrans); qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Type, aliasTrans), colTransactionType); qry.DistinctRows = true; // Transaction status. if (statusCat == SbmTransaction.StatusCat.NotDeleted) qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasTrans) + "<>'" + StatusDeleted + "'"); else if (statusCat == SbmTransaction.StatusCat.Completed) qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasTrans) + "='" + StatusCompleted + "'"); else if (statusCat == SbmTransaction.StatusCat.NotClosed) qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_StatusCat, aliasTrans) + "<>'" + TransactionStatusCats.GetCodeForType(SbmTransaction.StatusCat.Closed) + "'"); else if (statusCat == SbmTransaction.StatusCat.NotCancelled) qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Status, aliasTrans) + "<>'" + StatusCancelled + "'"); else if (!StringUtil.IsEmpty(TransactionStatusCats.GetCodeForType(statusCat))) qry.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_StatusCat, aliasTrans) + "<>'" + TransactionStatusCats.GetCodeForType(statusCat) + "'"); // Join to Requirement table. DbQueryJoin joinReqnt = new DbQueryJoin(DbJoinType.Inner); joinReqnt.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasReqnt); joinReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_TransId, aliasReqnt) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasTrans)); joinReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_CommodityId, aliasReqnt) + "=" + SysId.ToString(commodityId)); qry.Joins.Add(joinReqnt); // Execute the query. if (DebugMode) SaLogger.Debug(fn + " Query: " + qry.BuildQuery()); using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, qry.ToString())) { while (!HasErrorState() && dbResultSet != null && dbResultSet.NextRecord()) { NamedValue.Map values = dbResultSet.GetRecordValues(); Sbm.TransactionType transactionType = (Sbm.TransactionType)StringUtil.ToShort(values.GetValue(colTransactionType)); if (DebugMode) SaLogger.Debug(fn + " Transaction type: " + transactionType.ToString()); // Add this transaction type to the list. if (!transactionTypes.Contains(transactionType)) transactionTypes.Add(transactionType); } } return transactionTypes; } //------------------------------------------------------------------- } //======================================================================= }