1212 lines
62 KiB
C#
1212 lines
62 KiB
C#
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.BusinessMgr.Net.Standard.Dbas.UpdateLog;
|
|
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.ReferenceData;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using Sarand.Net.Standard.Dbas.Base;
|
|
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
|
|
{
|
|
//=======================================================================
|
|
partial class SbmTransactionMgr_Dbas
|
|
{
|
|
//*******************************************************************
|
|
// C o n s t i t u e n t
|
|
//*******************************************************************
|
|
// Data members.
|
|
private bool uomTimePopulated = false;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
private List<StringPair> GetLogProperties(SbmConstituent constituent)
|
|
{
|
|
return new List<StringPair>()
|
|
{
|
|
new StringPair("Id",SysId.ToString(constituent.Id)),
|
|
new StringPair("DescBrief",constituent.DescBrief),
|
|
new StringPair("Status",constituent.StatusCode)
|
|
};
|
|
}
|
|
/// <summary>Get the unit of time specified by the Unit of Measure.</summary>
|
|
public override SaUomType GetTimeTypeForUom(SysId uomId)
|
|
{
|
|
SaUnitMeasure unitMeasure = TransactionMgr.FindUnitOfMeasureById(uomId);
|
|
if (unitMeasure != null && unitMeasure.Category == SaUomCategory.Time)
|
|
return unitMeasure.UnitType;
|
|
return SaUomType.Time_Hour;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Refresh the total time stored against all transactions and requirments in the system.</summary>
|
|
public override bool RefreshAllTotalTimes()
|
|
{
|
|
// Update all transactions.
|
|
String colTransaction_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Id, false);
|
|
DbQuery qryTrans = new DbQuery(Database.DbmsType);
|
|
qryTrans.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction));
|
|
qryTrans.Columns.Add(colTransaction_Id);
|
|
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qryTrans.ToString()))
|
|
{
|
|
if (dbResultSet != null && dbResultSet.NextRecord())
|
|
{
|
|
NamedValue.Map values = dbResultSet.GetRecordValues();
|
|
SysId transactionId = new SysId((int)values.GetValue(colTransaction_Id).AsLong());
|
|
RefreshTransTotalTime(transactionId);
|
|
}
|
|
}
|
|
|
|
// Update all Requirements.
|
|
String colRequirement_Id = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_Id, false);
|
|
DbQuery qryReqnt = new DbQuery(Database.DbmsType);
|
|
qryReqnt.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement));
|
|
qryReqnt.Columns.Add(colRequirement_Id);
|
|
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qryReqnt.ToString()))
|
|
{
|
|
if (dbResultSet != null && dbResultSet.NextRecord())
|
|
{
|
|
NamedValue.Map values = dbResultSet.GetRecordValues();
|
|
SysId transactionId = new SysId((int)values.GetValue(colRequirement_Id).AsLong());
|
|
RefreshReqntTotalTime(transactionId);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
/// <summary>Refresh the total times recorded against the old and new transactions and requirements associated with a time record.</summary>
|
|
public override bool RefreshTotalTimes(SbmConstituent constituent, SysId TransIdPrevious, SysId ReqntIdPrevious)
|
|
{
|
|
if (constituent == null) return false;
|
|
bool refresh = true;
|
|
if (constituent.ConstituentType == Sbm.ConstituentType.TimeRecord)
|
|
{
|
|
// Update the 'previous' transaction.
|
|
if (refresh && TransIdPrevious != constituent.TransactionId)
|
|
refresh = RefreshTransTotalTime(TransIdPrevious);
|
|
// Update the 'current' transaction.
|
|
if (refresh)
|
|
refresh = RefreshTransTotalTime(constituent.TransactionId);
|
|
// Update the 'previous' requirement.
|
|
if (refresh && ReqntIdPrevious != constituent.RequirementId)
|
|
refresh = RefreshReqntTotalTime(ReqntIdPrevious);
|
|
// Update the 'current' requirement:
|
|
if (refresh)
|
|
refresh = RefreshReqntTotalTime(constituent.RequirementId);
|
|
}
|
|
return true;
|
|
}
|
|
/// <summary>Refresh the total time recorded against a transaction.</summary>
|
|
public override bool RefreshTransTotalTime(SysId transId)
|
|
{
|
|
if (SysId.IsValid(transId))
|
|
{
|
|
// Calculate total for this transaction.
|
|
double quantityTot = 0;
|
|
List<String> filters = new List<String>();
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_TransId) + "=" + transId.ToString());
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Status) + "<>'" + StatusCancelled + "'");
|
|
|
|
if (Database != null)
|
|
{
|
|
Database.GetRowValue(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Quantity), filters.Concat(" AND ", "(", ")"), DbGetValueType.eDbValueSum);
|
|
// Update the total time against the Transaction.
|
|
List<StringPair> columnValues = new List<StringPair>();
|
|
SacsDatabase.AddValuePair(columnValues, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_TimeTot), quantityTot.ToString(), false);
|
|
String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Transaction_Id) + "=" + transId.ToString();
|
|
Database.ExecuteUpdate(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), columnValues, filter);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
/// <summary>Refresh the total time recorded against a requirement.</summary>
|
|
public override bool RefreshReqntTotalTime(SysId reqntId)
|
|
{
|
|
if (SysId.IsValid(reqntId))
|
|
{
|
|
// Calculate total for this Requirement.
|
|
double quantityTot = 0;
|
|
List<String> filters = new List<String>();
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_ReqntId) + "=" + reqntId.ToString());
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Status) + "<>'" + StatusCancelled + "'");
|
|
if (Database != null)
|
|
{
|
|
Database.GetRowValue(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Quantity), filters.Concat(" AND ", "(", ")"), DbGetValueType.eDbValueSum);
|
|
// Update the total time against the Requirement.
|
|
List<StringPair> columnValues = new List<StringPair>();
|
|
SacsDatabase.AddValuePair(columnValues, SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_TimeTot), quantityTot.ToString(), false);
|
|
String filter = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Requirement_Id) + "=" + reqntId.ToString();
|
|
Database.ExecuteUpdate(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), columnValues, filter);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Get the list of time records recorded for the specified parameters.</summary>
|
|
public override List<DataItem> GetPeriodTimeBooked(SysId affiliateIdEmployee, DateTime periodStart, DateTime periodEnd, SaUomType uomPeriod)
|
|
{
|
|
ClearErrorState();
|
|
List<DataItem> dataItems = new List<DataItem>();
|
|
if (!SysId.IsValid(affiliateIdEmployee))
|
|
SetErrorState("Employee must be specified.");
|
|
else if (!DateUtil.IsValid(periodStart))
|
|
SetErrorState("Period start date must be specified.");
|
|
else if (!DateUtil.IsValid(periodEnd))
|
|
SetErrorState("Period end date must be specified.");
|
|
else if (periodStart > periodEnd)
|
|
SetErrorState("Period start date must not be after the end date.");
|
|
if (HasErrorState()) return dataItems;
|
|
|
|
// Validate the Unit of time:
|
|
switch (uomPeriod)
|
|
{
|
|
case SaUomType.Time_Day:
|
|
case SaUomType.Time_WorkingDay:
|
|
uomPeriod = SaUomType.Time_Day;
|
|
break;
|
|
case SaUomType.Time_Week:
|
|
case SaUomType.Time_WorkingWeek:
|
|
case SaUomType.Time_Month:
|
|
case SaUomType.Time_Quarter:
|
|
case SaUomType.Time_Year:
|
|
break;
|
|
default:
|
|
#if DEBUG
|
|
SaLogger.Warn($"{SysUtil.Fn} Period unit defaulted to working week.");
|
|
#endif
|
|
uomPeriod = SaUomType.Time_WorkingWeek;
|
|
break;
|
|
}
|
|
|
|
// Construct the query.
|
|
DbQuery qry = new DbQuery(Database.DbmsType);
|
|
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent));
|
|
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Effective));
|
|
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget));
|
|
qry.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_UomId));
|
|
qry.Columns.Add("Sum(" + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Quantity) + ")", SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Quantity, false));
|
|
// Filter.
|
|
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Type) + "=" + ((int)Sbm.ConstituentType.TimeRecord).ToString());
|
|
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget) + "=" + affiliateIdEmployee.ToString());
|
|
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Effective) + ">=" + DbQuery.FormatDateForCondition(periodStart));
|
|
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Effective) + "<" + DbQuery.FormatDateForCondition(periodEnd.AddDays(1)));
|
|
qry.Filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Status) + "<>'" + StatusCancelled + "'");
|
|
// Group to consoldiate time records with same unit:
|
|
qry.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Effective));
|
|
qry.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget));
|
|
qry.GroupBy.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_UomId));
|
|
// Retrieve results.
|
|
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(Database, qry.ToString()))
|
|
{
|
|
if (dbResultSet != null && dbResultSet.NextRecord())
|
|
{
|
|
NamedValue.Map values = dbResultSet.GetRecordValues();
|
|
DateTime effective = values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Effective, false)).AsDate();
|
|
double quantity = values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_Quantity, false)).AsDouble();
|
|
SysId uomId = new SysId(StringUtil.ToInt(values.GetValue(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Constituent_UomId, false))));
|
|
SaUomType eUom = GetTimeTypeForUom(uomId);
|
|
|
|
// Calculated the period date.
|
|
switch (uomPeriod)
|
|
{
|
|
case SaUomType.Time_Week:
|
|
effective = effective.StartOfWeek();
|
|
break;
|
|
case SaUomType.Time_WorkingWeek:
|
|
effective = effective.StartOfWorkingWeek();
|
|
break;
|
|
case SaUomType.Time_Month:
|
|
effective = effective.StartOfMonth();
|
|
break;
|
|
case SaUomType.Time_Quarter:
|
|
effective = effective.StartOfQuarter();
|
|
break;
|
|
case SaUomType.Time_Year:
|
|
effective = effective.StartOfYear();
|
|
break;
|
|
}
|
|
|
|
// Calculate time in hours:
|
|
switch (eUom)
|
|
{
|
|
case SaUomType.Time_Second:
|
|
quantity *= 60 * 60;
|
|
break;
|
|
case SaUomType.Time_Minute:
|
|
quantity *= 60;
|
|
break;
|
|
case SaUomType.Time_Hour:
|
|
break;
|
|
case SaUomType.Time_Day:
|
|
case SaUomType.Time_WorkingDay:
|
|
quantity /= 24;
|
|
break;
|
|
case SaUomType.Time_Week:
|
|
case SaUomType.Time_WorkingWeek:
|
|
quantity /= 24 * 7;
|
|
break;
|
|
case SaUomType.Time_Fortnight:
|
|
quantity /= 24 * 14;
|
|
break;
|
|
case SaUomType.Time_Month:
|
|
quantity /= 24 * 31;
|
|
break;
|
|
case SaUomType.Time_Quarter:
|
|
quantity /= 24 * 92;
|
|
break;
|
|
case SaUomType.Time_Year:
|
|
quantity /= 24 * 365;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// Locate this date in the list:
|
|
bool dPeriodFound = false;
|
|
foreach (DataItem dataItem in dataItems)
|
|
{
|
|
DateTime dPeriod = dataItem.GetValue(GetPeriodTimeColumnName_Date()).AsDate();
|
|
if (dPeriod == effective)
|
|
{
|
|
// Update the hours:
|
|
dataItem.SetValue(GetPeriodTimeColumnName_Hours(), new DataValue(dataItem.GetValue(GetPeriodTimeColumnName_Hours()).AsDouble() + quantity));
|
|
dPeriodFound = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!dPeriodFound)
|
|
{
|
|
// Add a new period date to the list:
|
|
DataItem dataItem = new DataItem();
|
|
dataItem.SetValue(GetPeriodTimeColumnName_Date(), new DataValue(effective));
|
|
dataItem.SetValue(GetPeriodTimeColumnName_Hours(), new DataValue(quantity));
|
|
dataItems.Add(dataItem);
|
|
}
|
|
}
|
|
}
|
|
//else SetErrorStae("Database not available");
|
|
#if _DEBUG
|
|
SATRACE("SapConstituentMgr_Odbc::GetPeriodTimeBooked Returning " + String(dataItems.Len()) + " consolidated time records.\n");
|
|
#endif
|
|
return dataItems;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Constituent.
|
|
public override SbmConstituent GetConstituent(SbmConstituent.Params prm)
|
|
{
|
|
return GetConstituent(GetConstituentQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
private SbmConstituent GetConstituent(String filter)
|
|
{
|
|
ClearErrorState();
|
|
long count = GetConstituentCount(filter);
|
|
if (count == 0) return null;
|
|
if (count != 1)
|
|
{
|
|
SetErrorState("Multiple Constituent found");
|
|
return null;
|
|
}
|
|
SbmConstituent prmituent = null;
|
|
// Query data.
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
Constituent_Db dbConstituent = new Constituent_Db(DbInfo);
|
|
dbConstituent.PopulateFrom(dbCommand, aliasConstituent, filter);
|
|
prmituent = CreateConstituent(dbConstituent);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return prmituent;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create Constituent.
|
|
public override SbmConstituent CreateConstituent(SysId assocId, Sbm.ConstituentType constituentType)
|
|
{
|
|
ClearErrorState();
|
|
SbmConstituent constituent = null;
|
|
if (SysId.IsValid(assocId) && constituentType > 0)
|
|
constituent = new SbmConstituent_Dbas(Internals, new SysId(), AffiliateId_Owner, assocId, constituentType, 0);
|
|
else SetErrorState("Asset type not identified");
|
|
return constituent;
|
|
}
|
|
private SbmConstituent_Dbas CreateConstituent(Constituent_Db dbConstituent)
|
|
{
|
|
ClearErrorState();
|
|
SbmConstituent_Dbas constituent = new SbmConstituent_Dbas(Internals, new SysId(dbConstituent._Id), new SysId(dbConstituent._AffIdOwner), new SysId(dbConstituent._AssocId ?? 0), (Sbm.ConstituentType)dbConstituent._Type, (ushort)dbConstituent._Flags);
|
|
PopulateFrom(dbConstituent, constituent);
|
|
return constituent;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate Constituent.
|
|
public override bool IsValidConstituentData(SbmConstituent.Data data, SbmConstituent.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.IsValidConstituentData(data, errField)) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Insert Constituent.
|
|
public override bool InsertConstituent(SbmConstituent constituent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidConstituent(constituent)) return false;
|
|
if (SysId.IsValid(constituent.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
Constituent_Db dbConstituent = new Constituent_Db(DbInfo);
|
|
PopulateTo(dbConstituent, constituent, dbUpdateInfo);
|
|
if (Constituent_Db.FieldsNonId.Contains("Id"))
|
|
{
|
|
// Generate next Id.
|
|
dbConstituent._Id = SysId.ToInt(Database.GetNextId("Constituent", dbUpdateInfo));
|
|
}
|
|
dbConstituent.ExecuteInsertCommand(dbCommand);
|
|
constituent.Id = new SysId(dbConstituent._Id);
|
|
constituent.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. " + GetLogProperties(constituent).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Update Constituent.
|
|
public override bool UpdateConstituent(SbmConstituent constituent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidConstituent(constituent)) return false;
|
|
if (!SysId.IsValid(constituent.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
|
if (!constituent.Changed)
|
|
{
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. " + GetLogProperties(constituent).Concat(": ").Concat("", "\n\t"));
|
|
return true;
|
|
}
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve Constituent.
|
|
dbConnection.Open();
|
|
Constituent_Db dbConstituent = new Constituent_Db(DbInfo);
|
|
dbConstituent.PopulateFrom(dbCommand, aliasConstituent, "Id=" + SysId.ToString(constituent.Id));
|
|
SbmUpdateLogItemMonitor_Constituent updateLogMonitor = new SbmUpdateLogItemMonitor_Constituent(Internals, CreateConstituent(dbConstituent));
|
|
|
|
// Update properties.
|
|
PopulateTo(dbConstituent, constituent, dbUpdateInfo);
|
|
dbConstituent.ExecuteUpdateCommand(dbCommand);
|
|
constituent.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. " + GetLogProperties(constituent).Concat(": ").Concat("", "\n\t"));
|
|
|
|
// Record updates.
|
|
updateLogMonitor.RecordUpdatedValues(constituent);
|
|
updateLogMonitor.LogUpdates();
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Delete Constituent.
|
|
public override bool ConstituentCanBeDeleted(SbmConstituent constituent)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.ConstituentCanBeDeleted(constituent)) return false;
|
|
return true;
|
|
}
|
|
public override bool DeleteConstituent(SbmConstituent constituent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!ConstituentCanBeDeleted(constituent)) return false;
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve prmituent.
|
|
dbConnection.Open();
|
|
Constituent_Db dbConstituent = new Constituent_Db(DbInfo);
|
|
dbConstituent.PopulateFrom(dbCommand, aliasConstituent, "Id=" + constituent.Id.ToString());
|
|
// Delete prmituent.
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent) + " WHERE Id=" + SysId.ToString(constituent.Id) + ";";
|
|
dbCommand.ExecuteNonQuery();
|
|
constituent.Changed = false;
|
|
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(constituent).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Copy data properties to and from database.
|
|
private void PopulateTo(Constituent_Db dbConstituent, SbmConstituent constituent, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
dbConstituent._Id = constituent.Id.ToInt();
|
|
dbConstituent._AffIdOwner = constituent.AffiliateIdOwner.ToInt();
|
|
dbConstituent._AffIdTarget = constituent.AffiliateIdTarget.ToInt();
|
|
dbConstituent._AssocId = constituent.AssociationId.ToInt();
|
|
dbConstituent._TransId = constituent.TransactionId.ToInt();
|
|
dbConstituent._ReqntId = constituent.RequirementId.ToInt();
|
|
dbConstituent._ConstId = constituent.ConstituentId.ToInt();
|
|
dbConstituent._AssetId = constituent.AssetId.ToInt();
|
|
dbConstituent._ProcessId = constituent.ProcessId.ToInt();
|
|
dbConstituent._AssocIdContractor = constituent.AssociationIdContractor.ToInt();
|
|
dbConstituent._Type = (short)constituent.ConstituentType;
|
|
dbConstituent._Seq = constituent.Seq;
|
|
dbConstituent._Effective = constituent.Effective;
|
|
dbConstituent._Required = constituent.Required;
|
|
dbConstituent._Started = constituent.Started;
|
|
dbConstituent._Completed = constituent.Completed;
|
|
dbConstituent._DescBrief = constituent.DescBrief;
|
|
dbConstituent._DescOutline = constituent.DescOutline;
|
|
dbConstituent._DescDetail = constituent.DescDetail;
|
|
dbConstituent._TaskNumber = constituent.TaskNumber.ToInt();
|
|
dbConstituent._Priority = constituent.Priority;
|
|
dbConstituent._Category = constituent.Category;
|
|
dbConstituent._Reference = constituent.Reference;
|
|
dbConstituent._Quantity = constituent.Quantity;
|
|
dbConstituent._UomId = constituent.UomId.ToInt();
|
|
dbConstituent._UnitCost = constituent.UnitCost;
|
|
dbConstituent._AmountEst = constituent.AmountEst;
|
|
dbConstituent._AmountNet = constituent.AmountNet;
|
|
dbConstituent._TaxCodeId = constituent.TaxCodeId.ToInt();
|
|
dbConstituent._TaxRate = constituent.TaxRate;
|
|
dbConstituent._AmountTax = constituent.AmountTax;
|
|
dbConstituent._AmountTot = constituent.AmountTot;
|
|
dbConstituent._TaxRateRebate = constituent.TaxRateRebate;
|
|
dbConstituent._AmountTaxRebate = constituent.AmountTaxRebate;
|
|
// Common properties.
|
|
dbConstituent._Notes = constituent.Notes;
|
|
dbConstituent._Status = SacsSystem.GetStatusCode(constituent.Status);
|
|
dbConstituent._Flags = (short)constituent.Flags;
|
|
if (!SysId.IsValid(constituent.Id))
|
|
{
|
|
dbConstituent._CreateOn = DateTime.UtcNow;
|
|
dbConstituent._CreateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbConstituent._CreateHost = dbUpdateInfo.Host;
|
|
}
|
|
dbConstituent._UpdateOn = DateTime.UtcNow;
|
|
dbConstituent._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbConstituent._UpdateHost = dbUpdateInfo.Host;
|
|
}
|
|
private void PopulateFrom(Constituent_Db dbConstituent, SbmConstituent constituent)
|
|
{
|
|
//constituent.Id = new SysId(dbConstituent._Id);
|
|
constituent.AffiliateIdOwner = new SysId(dbConstituent._AffIdOwner);
|
|
constituent.AffiliateIdTarget = new SysId(dbConstituent._AffIdTarget ?? 0);
|
|
constituent.AssociationId = new SysId(dbConstituent._AssocId ?? 0);
|
|
constituent.TransactionId = new SysId(dbConstituent._TransId ?? 0);
|
|
constituent.RequirementId = new SysId(dbConstituent._ReqntId ?? 0);
|
|
constituent.ConstituentId = new SysId(dbConstituent._ConstId ?? 0);
|
|
constituent.AssetId = new SysId(dbConstituent._AssetId ?? 0);
|
|
constituent.ProcessId = new SysId(dbConstituent._ProcessId ?? 0);
|
|
constituent.AssociationIdContractor = new SysId(dbConstituent._AssocIdContractor ?? 0);
|
|
constituent.ConstituentType = (Sbm.ConstituentType)(dbConstituent._Type ?? 0);
|
|
constituent.Seq = dbConstituent._Seq ?? 0;
|
|
constituent.Effective = dbConstituent._Effective ?? default(DateTime);
|
|
constituent.Required = dbConstituent._Required ?? default(DateTime);
|
|
constituent.Started = dbConstituent._Started ?? default(DateTime);
|
|
constituent.Completed = dbConstituent._Completed ?? default(DateTime);
|
|
constituent.DescBrief = dbConstituent._DescBrief;
|
|
constituent.DescOutline = dbConstituent._DescOutline;
|
|
constituent.DescDetail = dbConstituent._DescDetail;
|
|
constituent.TaskNumber = dbConstituent._TaskNumber.ToString();
|
|
constituent.Priority = dbConstituent._Priority ?? 0;
|
|
constituent.Category = dbConstituent._Category;
|
|
constituent.Reference = dbConstituent._Reference;
|
|
constituent.Quantity = dbConstituent._Quantity ?? 0.0m;
|
|
constituent.UomId = new SysId(dbConstituent._UomId ?? 0);
|
|
constituent.UnitCost = dbConstituent._UnitCost ?? 0.0m;
|
|
constituent.AmountEst = dbConstituent._AmountEst ?? 0.0m;
|
|
constituent.AmountNet = dbConstituent._AmountNet ?? 0.0m;
|
|
constituent.TaxCodeId = new SysId(dbConstituent._TaxCodeId ?? 0);
|
|
constituent.TaxRate = dbConstituent._TaxRate ?? 0.0m;
|
|
constituent.AmountTax = dbConstituent._AmountTax ?? 0.0m;
|
|
constituent.AmountTot = dbConstituent._AmountTot ?? 0.0m;
|
|
constituent.TaxRateRebate = dbConstituent._TaxRateRebate ?? 0.0m;
|
|
constituent.AmountTaxRebate = dbConstituent._AmountTaxRebate ?? 0.0m;
|
|
// Common properties.
|
|
constituent.Notes = dbConstituent._Notes;
|
|
constituent.Status = SacsSystem.GetStatusForCode(dbConstituent._Status);
|
|
constituent.SetCreateStamp(dbConstituent._CreateOn ?? default(DateTime), new SysId(dbConstituent._CreateBy ?? 0), dbConstituent._CreateHost);
|
|
constituent.SetUpdateStamp(dbConstituent._UpdateOn ?? default(DateTime), new SysId(dbConstituent._UpdateBy ?? 0), dbConstituent._UpdateHost);
|
|
constituent.AcceptChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Column definitions.
|
|
private static readonly String aliasConstituent = "aConst";
|
|
private static readonly String aliasConstituent_AffiliateOwner = "Const_AffOwn";
|
|
private static readonly String prefixConstituent_AffiliateOwner = aliasConstituent_AffiliateOwner + "_";
|
|
private static readonly String aliasConstituent_AffiliateTarget = "Const_AffTgt";
|
|
private static readonly String prefixConstituent_AffiliateTarget = aliasConstituent_AffiliateTarget + "_";
|
|
private static readonly String aliasConstituent_Association = "Const_Ass";
|
|
private static readonly String prefixConstituent_Association = aliasConstituent_Association + "_";
|
|
private static readonly String aliasConstituent_AssociationTarget = "Const_AssTgt";
|
|
private static readonly String prefixConstituent_AssociationTarget = aliasConstituent_AssociationTarget + "_";
|
|
private static readonly String aliasConstituent_Transaction = "Const_Trans";
|
|
private static readonly String prefixConstituent_Transaction = aliasConstituent_Transaction + "_";
|
|
private static readonly String aliasConstituent_Requirement = "Const_Reqnt";
|
|
private static readonly String prefixConstituent_Requirement = aliasConstituent_Requirement + "_";
|
|
private static readonly String aliasConstituent_Constituent = "Const_Const";
|
|
private static readonly String prefixConstituent_Constituent = aliasConstituent_Constituent + "_";
|
|
private static readonly String aliasConstituent_UnitMeasure = "Const_Uom";
|
|
private static readonly String prefixConstituent_UnitMeasure = aliasConstituent_UnitMeasure + "_";
|
|
|
|
// Column definition population.
|
|
private void SetConstituentColDfn
|
|
(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.Constituent)
|
|
alias = aliasConstituent;
|
|
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)SbmDbDfn.GetColTextLen(dbCol);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Getting Constituent column definition.
|
|
public override ColumnDfn GetConstituentColumnDfn(SbmConstituent.Column column, string caption = "", int width = 0)
|
|
{
|
|
ColumnDfn columnDfn = new ColumnDfn((int)column, caption, width);
|
|
switch (column)
|
|
{
|
|
case SbmConstituent.Column.Pos:
|
|
SetConstituentColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
|
columnDfn.ReadOnly = true;
|
|
columnDfn.Resizable = false;
|
|
break;
|
|
case SbmConstituent.Column.Id:
|
|
SetConstituentColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.Constituent_Id, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
|
|
// Constituent Properties.
|
|
case SbmConstituent.Column.AssocId:
|
|
SetConstituentColDfn(columnDfn, "Assoc #", 60, SbmDbDfn.ColumnIdx.Constituent_AssocId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.AffIdOwner:
|
|
SetConstituentColDfn(columnDfn, "Owner #", 60, SbmDbDfn.ColumnIdx.Constituent_AffIdOwner, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.AffIdTarget:
|
|
SetConstituentColDfn(columnDfn, "Target #", 60, SbmDbDfn.ColumnIdx.Constituent_AffIdTarget, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.TransId:
|
|
SetConstituentColDfn(columnDfn, "Trans #", 60, SbmDbDfn.ColumnIdx.Constituent_TransId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.ReqntId:
|
|
SetConstituentColDfn(columnDfn, "Reqnt #", 60, SbmDbDfn.ColumnIdx.Constituent_ReqntId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.ConstId:
|
|
SetConstituentColDfn(columnDfn, "Const #", 60, SbmDbDfn.ColumnIdx.Constituent_ConstId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.AssetId:
|
|
SetConstituentColDfn(columnDfn, "Asset #", 60, SbmDbDfn.ColumnIdx.Constituent_AssetId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmConstituent.Column.ProcessId:
|
|
SetConstituentColDfn(columnDfn, "Process #", 60, SbmDbDfn.ColumnIdx.Constituent_ProcessId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.DescBrief:
|
|
SetConstituentColDfn(columnDfn, "Caption", 200, SbmDbDfn.ColumnIdx.Constituent_DescBrief);
|
|
break;
|
|
case SbmConstituent.Column.DescDetail:
|
|
SetConstituentColDfn(columnDfn, "Detail", 200, SbmDbDfn.ColumnIdx.Constituent_DescDetail);
|
|
break;
|
|
case SbmConstituent.Column.DescOutline:
|
|
SetConstituentColDfn(columnDfn, "Outline", 200, SbmDbDfn.ColumnIdx.Constituent_DescOutline);
|
|
break;
|
|
case SbmConstituent.Column.Type:
|
|
SetConstituentColDfn(columnDfn, "Type", 60, SbmDbDfn.ColumnIdx.Constituent_Type, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.Type_Desc:
|
|
SetConstituentColDfn(columnDfn, "Type", 70, SbmDbDfn.ColumnIdx.Constituent_Type);
|
|
break;
|
|
case SbmConstituent.Column.Category:
|
|
SetConstituentColDfn(columnDfn, "Category", 100, SbmDbDfn.ColumnIdx.Constituent_Category, ColumnAlignment.Center);
|
|
break;
|
|
case SbmConstituent.Column.Reference:
|
|
SetConstituentColDfn(columnDfn, "Reference", 100, SbmDbDfn.ColumnIdx.Constituent_Reference, ColumnAlignment.Center);
|
|
break;
|
|
case SbmConstituent.Column.DueInd:
|
|
SetConstituentColDfn(columnDfn, "Due", 40, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmConstituent.Column.Effective_Date:
|
|
SetConstituentColDfn(columnDfn, "Effective", 65, SbmDbDfn.ColumnIdx.Constituent_Effective, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmConstituent.Column.Effective_Time:
|
|
SetConstituentColDfn(columnDfn, "at", 60, SbmDbDfn.ColumnIdx.Constituent_Effective, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
break;
|
|
case SbmConstituent.Column.Started_Date:
|
|
SetConstituentColDfn(columnDfn, "Started", 65, SbmDbDfn.ColumnIdx.Constituent_Started, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmConstituent.Column.Started_DateFmt:
|
|
SetConstituentColDfn(columnDfn, "Started", 80, SbmDbDfn.ColumnIdx.Constituent_Started);
|
|
columnDfn.DateFormat = "d-MMM-yyyy";
|
|
//columnDfn.DataName = "StartedDateFmt"; //Not related to database. Do not change!
|
|
break;
|
|
case SbmConstituent.Column.Started_Time:
|
|
SetConstituentColDfn(columnDfn, "at", 60, SbmDbDfn.ColumnIdx.Constituent_Started, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
break;
|
|
case SbmConstituent.Column.Started_Day:
|
|
SetConstituentColDfn(columnDfn, "Day", 70, SbmDbDfn.ColumnIdx.Constituent_Started, ColumnAlignment.Center);
|
|
break;
|
|
case SbmConstituent.Column.Required_Date:
|
|
SetConstituentColDfn(columnDfn, "Required date", 65, SbmDbDfn.ColumnIdx.Constituent_Required, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmConstituent.Column.Required_DateFmt:
|
|
SetConstituentColDfn(columnDfn, "Required date format", 80, SbmDbDfn.ColumnIdx.Constituent_Required);
|
|
columnDfn.DateFormat = "d-MMM-yyyy";
|
|
//columnDfn.DataName = "RequiredDateFmt"; // Not related to database. Do not change!
|
|
break;
|
|
case SbmConstituent.Column.Required_Time:
|
|
SetConstituentColDfn(columnDfn, "Required time", 60, SbmDbDfn.ColumnIdx.Constituent_Required, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
break;
|
|
case SbmConstituent.Column.Required_CssClass:
|
|
SetConstituentColDfn(columnDfn, "Required css class", 80, SbmDbDfn.ColumnIdx.Constituent_Required);
|
|
columnDfn.DataName = "RequiredCssClass"; // Not related to database. Do not change!
|
|
break;
|
|
case SbmConstituent.Column.Required_Today:
|
|
SetConstituentColDfn(columnDfn, "Required today", 100, SbmDbDfn.ColumnIdx.Constituent_Required);
|
|
columnDfn.DateFormat = "d-MMM-yyyy";
|
|
columnDfn.DataName = "RequiredToday"; // Not related to database. Do not change!
|
|
break;
|
|
case SbmConstituent.Column.Completed_Date:
|
|
SetConstituentColDfn(columnDfn, "Completed", 65, SbmDbDfn.ColumnIdx.Constituent_Completed, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmConstituent.Column.Completed_DateFmt:
|
|
SetConstituentColDfn(columnDfn, "Completed", 80, SbmDbDfn.ColumnIdx.Constituent_Completed);
|
|
columnDfn.DateFormat = "d-MMM-yyyy";
|
|
//columnDfn.DataName = "CompletedDateFmt"; // Not related to database. Do not change!
|
|
break;
|
|
case SbmConstituent.Column.Completed_Time:
|
|
SetConstituentColDfn(columnDfn, "at", 60, SbmDbDfn.ColumnIdx.Constituent_Completed, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
break;
|
|
case SbmConstituent.Column.TaskNumber:
|
|
SetConstituentColDfn(columnDfn, "Task no", 80, SbmDbDfn.ColumnIdx.Constituent_TaskNumber, ColumnAlignment.Center);
|
|
break;
|
|
case SbmConstituent.Column.Priority:
|
|
SetConstituentColDfn(columnDfn, "Priority", 60, SbmDbDfn.ColumnIdx.Constituent_Priority, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.Quantity:
|
|
SetConstituentColDfn(columnDfn, "Quantity", 60, SbmDbDfn.ColumnIdx.Constituent_Quantity, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmConstituent.Column.Hours:
|
|
SetConstituentColDfn(columnDfn, "Hours", 60, SbmDbDfn.ColumnIdx.Constituent_Quantity, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
//columnDfn.NumDecimals = prm.iDecimals_Time;
|
|
break;
|
|
case SbmConstituent.Column.UnitCost:
|
|
SetConstituentColDfn(columnDfn, "Unit cost", 60, SbmDbDfn.ColumnIdx.Constituent_UnitCost, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmConstituent.Column.AmountEst:
|
|
SetConstituentColDfn(columnDfn, "Estimate", 60, SbmDbDfn.ColumnIdx.Constituent_AmountEst, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmConstituent.Column.AmountNet:
|
|
SetConstituentColDfn(columnDfn, "Net", 60, SbmDbDfn.ColumnIdx.Constituent_AmountNet, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmConstituent.Column.TaxRate:
|
|
SetConstituentColDfn(columnDfn, "Tax %", 60, SbmDbDfn.ColumnIdx.Constituent_TaxRate, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmConstituent.Column.AmountTax:
|
|
SetConstituentColDfn(columnDfn, "Tax", 60, SbmDbDfn.ColumnIdx.Constituent_AmountTax, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
case SbmConstituent.Column.AmountTot:
|
|
SetConstituentColDfn(columnDfn, "Total", 60, SbmDbDfn.ColumnIdx.Constituent_AmountTot, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
break;
|
|
|
|
// Common properties.
|
|
case SbmConstituent.Column.Notes:
|
|
SetConstituentColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.Constituent_Notes);
|
|
break;
|
|
case SbmConstituent.Column.Flag:
|
|
SetConstituentColDfn(columnDfn, "Flags", 40, SbmDbDfn.ColumnIdx.Constituent_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SbmConstituent.Column.Status:
|
|
SetConstituentColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Constituent_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmConstituent.Column.Status_Desc:
|
|
SetConstituentColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Constituent_Status);
|
|
break;
|
|
case SbmConstituent.Column.Status_Ind:
|
|
SetConstituentColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.Constituent_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmConstituent.Column.CreateOn_Date:
|
|
SetConstituentColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.Constituent_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmConstituent.Column.UpdateOn_Date:
|
|
SetConstituentColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.Constituent_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
}
|
|
if (!String.IsNullOrEmpty(caption))
|
|
columnDfn.Caption = caption;
|
|
if (width > 0)
|
|
columnDfn.Width = width;
|
|
return columnDfn;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Constituent query filter.
|
|
public override List<string> GetConstituentQueryFilter(SbmConstituent.Params prm)
|
|
{
|
|
List<String> filter = new List<String>();
|
|
|
|
// Constituent Id.
|
|
String includedIds = prm.IdsIncluded.Concat(",");
|
|
String colConstituent_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Id, aliasConstituent);
|
|
if (!includedIds.IsEmpty())
|
|
filter.Add(colConstituent_Id + " IN (" + includedIds + ")");
|
|
String excludedIds = prm.IdsExcluded.Concat(",");
|
|
if (!excludedIds.IsEmpty())
|
|
filter.Add(colConstituent_Id + " NOT IN (" + excludedIds + ")");
|
|
|
|
// Affiliate Owner.
|
|
String colConstituent_AffIdOwner = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdOwner, aliasConstituent);
|
|
filter.Add(colConstituent_AffIdOwner + "=" + SysId.ToString(AffiliateId_Owner));
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Associated items Ids.
|
|
if (SysId.IsValid(prm.AffIdTarget))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget, aliasConstituent) + "=" + prm.AffIdTarget.ToString());
|
|
if (SysId.IsValid(prm.AssocId))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AssocId, aliasConstituent) + "=" + prm.AssocId.ToString());
|
|
if (SysId.IsValid(prm.TransId))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_TransId, aliasConstituent) + "=" + prm.TransId.ToString());
|
|
if (SysId.IsValid(prm.ReqntId))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ReqntId, aliasConstituent) + "=" + prm.ReqntId.ToString());
|
|
if (SysId.IsValid(prm.ConstId))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ConstId, aliasConstituent) + "=" + prm.ConstId.ToString());
|
|
if (SysId.IsValid(prm.AssetId))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AssetId, aliasConstituent) + "=" + prm.AssetId.ToString());
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
//Constituent Type.
|
|
String colConstituent_Type = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Type, aliasConstituent);
|
|
if (prm.ConstituentType > 0)
|
|
filter.Add(colConstituent_Type + "=" + ((int)prm.ConstituentType).ToString());
|
|
|
|
// DescBrief Partial.
|
|
String colConstituent_DescBrief = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_DescBrief, aliasConstituent);
|
|
if (!prm.DescBriefPartial.IsEmpty())
|
|
filter.Add(colConstituent_DescBrief + " LIKE '" + DbQuery.FormatForLike(prm.DescBriefPartial) + "%'");
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Asset serial number.
|
|
if (!StringUtil.IsEmpty(prm.AssetSerialFull) || !StringUtil.IsEmpty(prm.AssetSerialPartial) && Database.TableExists(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset)))
|
|
{
|
|
// Restrict to constituents associated with the specified asset(s):
|
|
DbQuery qryAsset = new DbQuery(Database.DbmsType);
|
|
String colAsset_SerialNumber = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.SaAsset_SerialNumber);
|
|
String colConstituent_AssetId = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AssetId);
|
|
qryAsset.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.SaAsset));
|
|
qryAsset.Columns.Add(colConstituent_AssetId);
|
|
if (!StringUtil.IsEmpty(prm.AssetSerialFull))
|
|
qryAsset.Filters.Add(colAsset_SerialNumber + "='" + DbQuery.FormatForCondition(prm.AssetSerialFull) + "'");
|
|
else if (!StringUtil.IsEmpty(prm.AssetSerialPartial))
|
|
qryAsset.Filters.Add(colAsset_SerialNumber + " LIKE '" + DbQuery.FormatForLike(prm.AssetSerialPartial) + "'");
|
|
filter.Add(colConstituent_AssetId + " IN (" + qryAsset.BuildQuery() + ")");
|
|
}
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Effective Date.
|
|
if (DateUtil.IsValid(prm.EffectiveFrom) || DateUtil.IsValid(prm.EffectiveTo))
|
|
{
|
|
String colEffective = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Effective, aliasConstituent);
|
|
if (DateUtil.IsValid(prm.EffectiveFrom))
|
|
filter.Add(colEffective + "<" + DbQuery.FormatForCondition(prm.EffectiveTo.ToLongDateString() + 1));
|
|
if (DateUtil.IsValid(prm.EffectiveTo))
|
|
filter.Add(colEffective + ">=" + DbQuery.FormatForCondition(prm.EffectiveFrom.ToString()));
|
|
}
|
|
|
|
// Status Category.
|
|
if (prm.StatusCat == SbmConstituent.StatusCat.NotDeleted)
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status, aliasConstituent) + "<>'" + StatusDeleted + "'");
|
|
else if (prm.StatusCat == SbmConstituent.StatusCat.NotCancelled)
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status, aliasConstituent) + "<>'" + StatusCancelled + "'");
|
|
else if (!StringUtil.IsEmpty(ConstituentStatusCats.GetCodeForType(prm.StatusCat)))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_StatusCat, aliasConstituent) + "='" + ConstituentStatusCats.GetCodeForType(prm.StatusCat) + "'");
|
|
|
|
// Updated Since.
|
|
if (DateUtil.IsValid(prm.UpdatedSince))
|
|
filter.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_UpdateOn, aliasConstituent) + ">=" + DbQuery.FormatForCondition(prm.UpdatedSince.ToString()));
|
|
|
|
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
|
return filter;
|
|
}
|
|
|
|
// Constituent sort columns.
|
|
public List<String> GetConstituentSortColumns(SbmConstituent.Params prm)
|
|
{
|
|
// Sort sequence:
|
|
List<String> sortColumnCodes = new List<String>();
|
|
foreach (var columnDfn in prm.SortColumns)
|
|
{
|
|
// Need to ensure correct alias used for Constituent columns in case of conflict.
|
|
String sortCol = String.Empty;
|
|
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.Constituent)
|
|
{
|
|
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, aliasConstituent);
|
|
}
|
|
else
|
|
{
|
|
sortCol = columnDfn.DataName;
|
|
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
|
|
sortCol = columnDfn.SortDataName;
|
|
}
|
|
if (!sortCol.IsEmpty())
|
|
{
|
|
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
|
|
sortColumnCodes.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
|
}
|
|
}
|
|
sortColumnCodes.RemoveBlanks();
|
|
if (sortColumnCodes.IsEmpty())
|
|
{
|
|
// Default sort columns:
|
|
sortColumnCodes.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Type, aliasConstituent) + " ASC");
|
|
}
|
|
return sortColumnCodes;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Constituent count.
|
|
private long GetConstituentCount(String filter)
|
|
{
|
|
ClearErrorState();
|
|
return Database.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent) + " As " + aliasConstituent, filter);
|
|
}
|
|
public override long GetConstituentCount(SbmConstituent.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
return GetConstituentCount(GetConstituentQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Constituent list.
|
|
public override List<SbmConstituent> GetConstituentList(SbmConstituent.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
List<SbmConstituent> constituents = new List<SbmConstituent>();
|
|
DbQuery qry = new DbQuery(Database.DbmsType);
|
|
qry.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), aliasConstituent);
|
|
Constituent_Db dbConstituent = new Constituent_Db(DbInfo);
|
|
qry.Columns.AddRange(dbConstituent.ExistingColumnNames);
|
|
qry.Filters.AddRange(GetConstituentQueryFilter(prm));
|
|
qry.OrderBy.AddRange(GetConstituentSortColumns(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())
|
|
{
|
|
dbConstituent = new Constituent_Db(DbInfo);
|
|
dbConstituent.PopulateFrom(dbDataReader);
|
|
constituents.Add(CreateConstituent(dbConstituent));
|
|
}
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return constituents;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Constituent query execution.
|
|
public override DbResultSet ExecuteConstituentQuery(List<ColumnDfn> columns, SbmConstituent.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
//---------------------------------------------------------------------
|
|
// Construct build database query.
|
|
DbQuery query = new DbQuery(Database.DbmsType);
|
|
bool canViewSalesFinancials = UserCanViewCommoditySalesFinancials();
|
|
|
|
//---------------------------------------------------------------------
|
|
// Sort Column ~ lColSort?
|
|
//---------------------------------------------------------------------
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Constituent Properties - add columns as defined in query list.
|
|
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), aliasConstituent);
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Id));
|
|
if (columns.HasId((int)SbmConstituent.Column.AssocId))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AssocId));
|
|
if (columns.HasId((int)SbmConstituent.Column.AffIdTarget))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget));
|
|
if (columns.HasId((int)SbmConstituent.Column.TransId))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_TransId));
|
|
if (columns.HasId((int)SbmConstituent.Column.ReqntId))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ReqntId));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Type));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Effective));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Required));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Started));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Completed));
|
|
if (columns.HasId((int)SbmConstituent.Column.DescBrief) && ColumnExists(SbmDbDfn.ColumnIdx.Constituent_DescBrief))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_DescBrief));
|
|
if (columns.HasId((int)SbmConstituent.Column.DescOutline) && ColumnExists(SbmDbDfn.ColumnIdx.Constituent_DescOutline))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_DescOutline));
|
|
if (columns.HasId((int)SbmConstituent.Column.DescDetail) && ColumnExists(SbmDbDfn.ColumnIdx.Constituent_DescDetail))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_DescDetail));
|
|
if (columns.HasId((int)SbmConstituent.Column.Category))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Category));
|
|
if (columns.HasId((int)SbmConstituent.Column.Reference))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Reference));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_TaskNumber))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_TaskNumber));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_Priority))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Priority));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Quantity));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_Notes))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Notes));
|
|
if (canViewSalesFinancials)
|
|
{
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_UnitCost))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_UnitCost));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_AmountEst))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AmountEst));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_AmountNet))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AmountNet));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_TaxRate))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_TaxRate));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_AmountTax))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AmountTax));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_AmountTot))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AmountTot));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_TaxRateRebate))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_TaxRateRebate));
|
|
if (ColumnExists(SbmDbDfn.ColumnIdx.Constituent_AmountTaxRebate))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AmountTaxRebate));
|
|
}
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Referenced constituent.
|
|
bool hasConstCols = false;
|
|
if (!hasConstCols) hasConstCols = columns.HasId((int)SbmConstituent.Column.Const_DescBrief);
|
|
if (hasConstCols)
|
|
{
|
|
// Join to the Constituent table.
|
|
DbQueryJoin joinConst = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinConst.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Constituent), aliasConstituent_Constituent);
|
|
joinConst.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Id, aliasConstituent_Constituent) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ConstId));
|
|
query.Joins.Add(joinConst);
|
|
// Add the constituent columns.
|
|
List<SbmDbDfn.ColumnIdx> constituentCols = new List<SbmDbDfn.ColumnIdx>();
|
|
constituentCols.Add(SbmDbDfn.ColumnIdx.Constituent_DescBrief);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in constituentCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent), prefixConstituent_Constituent + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Affiliate Owner.
|
|
bool hasOwnerCols = false;
|
|
if (!hasOwnerCols) hasOwnerCols = columns.HasId((int)SbmConstituent.Column.Owner_Name);
|
|
if (hasOwnerCols)
|
|
{
|
|
// Join to the Owner affiliate.
|
|
DbQueryJoin joinAffOwner = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAffOwner.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasConstituent_AffiliateOwner);
|
|
joinAffOwner.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasConstituent_AffiliateOwner) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdOwner));
|
|
query.Joins.Add(joinAffOwner);
|
|
// Add the affiliate columns.
|
|
List<SbmDbDfn.ColumnIdx> affiliateOwnerCols = new List<SbmDbDfn.ColumnIdx>();
|
|
affiliateOwnerCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateOwnerCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_AffiliateOwner), prefixConstituent_AffiliateOwner + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Affiliate Target.
|
|
bool hasTargetCols = false;
|
|
if (!hasTargetCols) hasTargetCols = columns.HasId((int)SbmConstituent.Column.Target_Name);
|
|
if (hasTargetCols)
|
|
{
|
|
// Join to the Target affiliate.
|
|
DbQueryJoin joinAffTarget = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAffTarget.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasConstituent_AffiliateTarget);
|
|
joinAffTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasConstituent_AffiliateTarget) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AffIdTarget));
|
|
query.Joins.Add(joinAffTarget);
|
|
// Add the affiliate columns.
|
|
List<SbmDbDfn.ColumnIdx> affiliateTargetCols = new List<SbmDbDfn.ColumnIdx>();
|
|
affiliateTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in affiliateTargetCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_AffiliateTarget), prefixConstituent_AffiliateTarget + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Association.
|
|
bool hasAssocCols = false;
|
|
if (!hasAssocCols) hasAssocCols = columns.HasId((int)SbmConstituent.Column.Assoc_Code);
|
|
bool hasAssocTargetCols = false;
|
|
if (!hasAssocTargetCols) hasAssocTargetCols = columns.HasId((int)SbmConstituent.Column.Assoc_Target_Name);
|
|
if (hasAssocCols || hasAssocTargetCols)
|
|
{
|
|
// Join to the Association table.
|
|
DbQueryJoin joinAssoc = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAssoc.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasConstituent_Association);
|
|
joinAssoc.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasConstituent_Association) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_AssocId));
|
|
query.Joins.Add(joinAssoc);
|
|
// Add the affiliate columns.
|
|
List<SbmDbDfn.ColumnIdx> associationCols = new List<SbmDbDfn.ColumnIdx>();
|
|
associationCols.Add(SbmDbDfn.ColumnIdx.Association_Code);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in associationCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_Association), prefixConstituent_Association + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
if (hasAssocTargetCols)
|
|
{
|
|
// Join to the association's target affiliate.
|
|
DbQueryJoin joinAssocTarget = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAssocTarget.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasConstituent_AssociationTarget);
|
|
joinAssocTarget.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasConstituent_AssociationTarget) + "=" + aliasConstituent_Association + "." + SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Association_AffIdTarget));
|
|
query.Joins.Add(joinAssocTarget);
|
|
// Add the affiliate columns.
|
|
List<SbmDbDfn.ColumnIdx> assaffTargetCols = new List<SbmDbDfn.ColumnIdx>();
|
|
assaffTargetCols.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in assaffTargetCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_AssociationTarget), prefixConstituent_AssociationTarget + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
}
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Transaction.
|
|
bool hasTransCols = false;
|
|
if (!hasTransCols) hasTransCols = columns.HasId((int)SbmConstituent.Column.Trans_Ref);
|
|
if (!hasTransCols) hasTransCols = columns.HasId((int)SbmConstituent.Column.Trans_RefExt);
|
|
if (!hasTransCols) hasTransCols = columns.HasId((int)SbmConstituent.Column.Trans_DescBrief);
|
|
if (hasTransCols)
|
|
{
|
|
// Join to the Transaction table.
|
|
DbQueryJoin joinTrans = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinTrans.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Transaction), aliasConstituent_Transaction);
|
|
joinTrans.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Transaction_Id, aliasConstituent_Transaction) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_TransId));
|
|
query.Joins.Add(joinTrans);
|
|
// Add the transaction columns.
|
|
List<SbmDbDfn.ColumnIdx> transactionCols = new List<SbmDbDfn.ColumnIdx>();
|
|
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_Ref);
|
|
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_RefExt);
|
|
transactionCols.Add(SbmDbDfn.ColumnIdx.Transaction_DescBrief);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in transactionCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_Transaction), prefixConstituent_Transaction + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Requirement.
|
|
bool hasReqntCols = false;
|
|
if (!hasReqntCols) hasReqntCols = columns.HasId((int)SbmConstituent.Column.Reqnt_DescBrief);
|
|
if (!hasReqntCols) hasReqntCols = columns.HasId((int)SbmConstituent.Column.Reqnt_JobNumber);
|
|
if (!hasReqntCols) hasReqntCols = columns.HasId((int)SbmConstituent.Column.Reqnt_ProductCode);
|
|
if (hasReqntCols)
|
|
{
|
|
// Join to the requirement table.
|
|
DbQueryJoin joinReqnt = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinReqnt.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Requirement), aliasConstituent_Requirement);
|
|
joinReqnt.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Requirement_Id, aliasConstituent_Requirement) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_ReqntId));
|
|
query.Joins.Add(joinReqnt);
|
|
// Add the requirement columns.
|
|
List<SbmDbDfn.ColumnIdx> requirementCols = new List<SbmDbDfn.ColumnIdx>();
|
|
requirementCols.Add(SbmDbDfn.ColumnIdx.Requirement_ProductCode);
|
|
requirementCols.Add(SbmDbDfn.ColumnIdx.Requirement_DescBrief);
|
|
if (prm.UseJobNumber)
|
|
requirementCols.Add(SbmDbDfn.ColumnIdx.Requirement_JobNumber);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in requirementCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_Requirement), prefixConstituent_Requirement + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
// Unit of measure.
|
|
bool hasUomCols = false;
|
|
if (!hasUomCols) hasUomCols = columns.HasId((int)SbmConstituent.Column.Uom_Single);
|
|
if (hasUomCols)
|
|
{
|
|
// Join to the UnitOfMeasure table.
|
|
DbQueryJoin joinUom = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinUom.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.UnitMeasure), aliasConstituent_UnitMeasure);
|
|
joinUom.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.UnitMeasure_Id, aliasConstituent_UnitMeasure) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_UomId));
|
|
query.Joins.Add(joinUom);
|
|
// Add the UOM columns.
|
|
List<SbmDbDfn.ColumnIdx> unitMeasureCols = new List<SbmDbDfn.ColumnIdx>();
|
|
unitMeasureCols.Add(SbmDbDfn.ColumnIdx.UnitMeasure_Abbr);
|
|
unitMeasureCols.Add(SbmDbDfn.ColumnIdx.UnitMeasure_Single);
|
|
unitMeasureCols.Add(SbmDbDfn.ColumnIdx.UnitMeasure_Multiple);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in unitMeasureCols)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasConstituent_UnitMeasure), prefixConstituent_UnitMeasure + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
|
|
|
|
// Common Properties
|
|
if (columns.HasId((int)SbmConstituent.Column.Notes))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Notes, aliasConstituent));
|
|
if (columns.HasId((int)SbmConstituent.Column.Flag))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Flags, aliasConstituent));
|
|
if (columns.HasId((int)SbmConstituent.Column.Status) || columns.HasId((int)SbmConstituent.Column.Status_Desc) || columns.HasId((int)SbmConstituent.Column.Status_Ind))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_Status, aliasConstituent));
|
|
if (columns.HasId((int)SbmConstituent.Column.CreateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_CreateOn, aliasConstituent));
|
|
if (columns.HasId((int)SbmConstituent.Column.UpdateOn_Date))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Constituent_UpdateOn, aliasConstituent));
|
|
|
|
//---------------------------------------------------------------------
|
|
// Populate filter.
|
|
query.Filters.AddRange(GetConstituentQueryFilter(prm));
|
|
|
|
if (prm.IdsIncluded.Count != 1)
|
|
{
|
|
// Configure sort sequence.
|
|
foreach (String sortColumn in GetConstituentSortColumns(prm))
|
|
query.OrderBy.Add(sortColumn);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
//return new DbResultSet_DataTableReader(Database, query.BuildQuery());
|
|
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|