Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs
T
2024-11-26 11:33:22 +00:00

107 lines
5.5 KiB
C#

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<SysId> locationIds_All;
private List<SysId> locationIds_Calc;
private List<SysId> locationIds_Sales;
private List<SysId> locationIds_NonSales;
//-------------------------------------------------------------------
// Construction.
public SbmTransactionMgr_Dbas(ISbmUserContext_Core 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<Sbm.TransactionType> GetTransactionTypesForCommodity(SysId commodityId, SbmTransaction.StatusCat statusCat = SbmTransaction.StatusCat.NotCancelled)
{
List<Sbm.TransactionType> transactionTypes = new List<Sbm.TransactionType>();
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($"{SysUtil.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($"{SysUtil.Fn} Transaction type: " + transactionType.ToString());
// Add this transaction type to the list.
if (!transactionTypes.Contains(transactionType))
transactionTypes.Add(transactionType);
}
}
return transactionTypes;
}
//-------------------------------------------------------------------
}
//=======================================================================
}