Files
BusinessMgr-2019/SaBusMgrStandardDbas/Dbas/Mgr/SbmTransactionMgr_Dbas.cs
T

131 lines
6.1 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.
public class Members
{
public SacsDatabase db = null;
public SbmDbDataItem.SbmDatabaseInfo dbInfo;
}
private readonly Members mbr = new Members();
private int orderQuantityDecimals;
private 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(SbmInternals internals) :
base(internals)
{
Initialise();
}
public SbmTransactionMgr_Dbas(ISbmUserOrganisationContext userContext) :
base(userContext)
{
Initialise();
}
// Initialisation.
private void Initialise()
{
mbr.db = (SbmGlobals.Application.GetBusMgrDatabase(SessionContext) as SacsDatabase);
mbr.dbInfo = new SbmDbDataItem.SbmDatabaseInfo(mbr.db.DatabaseName, mbr.db.GetTableDfns());
orderQuantityDecimals = Internals.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.OrderQuantity);
weightDecimals = Internals.GetOwnerOption_NumericDecimals(Sbm.OrgOption_NumericDecimals.CommodityWeight);
}
//-------------------------------------------------------------------
// Properties.
protected ISacsDatabase Database { get { return mbr.db; } }
protected SbmDbDataItem.SbmDatabaseInfo DbInfo { get { return mbr.dbInfo; } }
//-------------------------------------------------------------------
// Utilities.
public override bool ColumnExists(SbmDbDfn.ColumnIdx columnIdx)
{
SbmDbDfn.TableIdx tableIdx = SbmDbDfn.GetTableForColumn(columnIdx);
String schemaName = SbmDbDfn.GetSchemaName(tableIdx, false);
String tableName = SbmDbDfn.GetTableName(tableIdx, false);
String columnName = SbmDbDfn.GetColumnName(columnIdx, false);
return DbInfo.ColumnExists(schemaName, tableName, columnName);
}
//-------------------------------------------------------------------
// 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(Database, 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;
}
//-------------------------------------------------------------------
}
//=======================================================================
}