963 lines
57 KiB
C#
963 lines
57 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.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
|
|
{
|
|
//=======================================================================
|
|
partial class SbmCommodityMgr_Dbas
|
|
{
|
|
//*******************************************************************
|
|
// C o n t a i n e r I t e m s
|
|
//*******************************************************************
|
|
// Utilities.
|
|
private List<StringPair> GetLogProperties(SbmContainerItem containerItem)
|
|
{
|
|
return new List<StringPair>()
|
|
{
|
|
new StringPair("Id",SysId.ToString(containerItem.Id)),
|
|
new StringPair("ItemSeq", containerItem.ItemSeq.ToString()),
|
|
new StringPair("Status",containerItem.StatusCode)
|
|
};
|
|
}
|
|
public override String GetItemSource(Sbm.ItemType itemType, SysId itemId, bool brief = false)
|
|
{
|
|
String itemSource = "";
|
|
// identify the source item and retrieve its caption:
|
|
switch (itemType)
|
|
{
|
|
case Sbm.ItemType.Requirement:
|
|
{
|
|
SbmRequirement requirement = TransactionMgr.GetRequirementById(itemId);
|
|
if (requirement != null)
|
|
{
|
|
SbmTransaction transaction = TransactionMgr.GetTransactionById(requirement.TransactionId);
|
|
if (transaction != null)
|
|
itemSource =
|
|
(brief ? "" : GetTransTypeDesc(transaction.TransactionType) + ": ") + transaction.Ref + " " +
|
|
AccountMgr.GetAssociationTargetName(transaction.AssociationId) + (brief ? "" : " [" + transaction.Raised.Date.ToString() + "]");
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return itemSource;
|
|
}
|
|
public override ushort GetMaxItemSeq(SysId containerId, Sbm.ItemType itemType, SysId itemId)
|
|
{
|
|
ClearErrorState();
|
|
ISacsDatabase db = SbmGlobals.Application.GetBusMgrDatabase(SessionContext);
|
|
if (!HasErrorState())
|
|
{
|
|
String tableContainerItem = SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem);
|
|
String colContainerItem_ItemSeq = SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ItemSeq);
|
|
List<String> filters = new List<String>();
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId) + "=" + containerId.ToString());
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ItemType) + "=" + ((int)itemType).ToString());
|
|
filters.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.ContainerItem_ItemId) + "=" + itemId.ToString());
|
|
|
|
return (ushort)db.GetRowValue(tableContainerItem, colContainerItem_ItemSeq, filters.Concat(" AND ", "(", ")")).AsLong();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get ContainerItem.
|
|
public override SbmContainerItem GetContainerItem(SbmContainerItem.Params prm)
|
|
{
|
|
return GetContainerItem(GetContainerItemQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
private SbmContainerItem GetContainerItem(String filter)
|
|
{
|
|
ClearErrorState();
|
|
long count = GetContainerItemCount(filter);
|
|
if (count == 0) return null;
|
|
if (count != 1)
|
|
{
|
|
SetErrorState("Multiple ContainerItem found");
|
|
return null;
|
|
}
|
|
SbmContainerItem containerItem = null;
|
|
// Query data.
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
ContainerItem_Db dbContainerItem = new ContainerItem_Db(DbInfo);
|
|
dbContainerItem.PopulateFrom(dbCommand, aliasContainerItem, filter);
|
|
containerItem = CreateContainerItem(dbContainerItem);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn(GetType().Name + ".GetContainerItem\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message);
|
|
}
|
|
}
|
|
return containerItem;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create ContainerItem.
|
|
public override SbmContainerItem CreateContainerItem(SysId containerItemId, Sbm.ItemType itemType, SysId itemId)
|
|
{
|
|
return new SbmContainerItem_Dbas(Internals, containerItemId, itemType, itemId, 0);
|
|
}
|
|
private SbmContainerItem_Dbas CreateContainerItem(ContainerItem_Db dbContainerItem)
|
|
{
|
|
ClearErrorState();
|
|
SbmContainerItem_Dbas containerItem = new SbmContainerItem_Dbas(Internals, new SysId(dbContainerItem._ContainerId), (Sbm.ItemType)dbContainerItem._ItemType, new SysId(dbContainerItem._ItemId), (ushort)dbContainerItem._Flags);
|
|
PopulateFrom(dbContainerItem, containerItem);
|
|
return containerItem;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate ContainerItem.
|
|
public override bool IsValidContainerItemData(SbmContainerItem.Data data, SbmContainerItem.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.IsValidContainerItemData(data, errField)) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Insert ContainerItem.
|
|
public override bool InsertContainerItem(SbmContainerItem containerItem, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
String fn = GetType().Name + ".InsertContainerItem";
|
|
ClearErrorState();
|
|
if (!IsValidContainerItem(containerItem)) return false;
|
|
if (SysId.IsValid(containerItem.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
ContainerItem_Db dbContainerItem = new ContainerItem_Db(DbInfo);
|
|
PopulateTo(dbContainerItem, containerItem, dbUpdateInfo);
|
|
if (ContainerItem_Db.FieldsNonId.Contains("Id"))
|
|
{
|
|
// Generate next Id.
|
|
dbContainerItem._ContainerId = SysId.ToInt(db.GetNextId("ContainerItem", dbUpdateInfo));
|
|
}
|
|
dbContainerItem.ExecuteInsertCommand(dbCommand);
|
|
containerItem.Id = new SysId(dbContainerItem._ContainerId);
|
|
containerItem.Changed = false;
|
|
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(containerItem).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Update ContainerItem.
|
|
public override bool UpdateContainerItem(SbmContainerItem containerItem, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
String fn = GetType().Name + ".UpdateContainerItem";
|
|
ClearErrorState();
|
|
if (!IsValidContainerItem(containerItem)) return false;
|
|
if (!SysId.IsValid(containerItem.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
|
if (!containerItem.Changed)
|
|
{
|
|
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(containerItem).Concat(": ").Concat("", "\n\t"));
|
|
return true;
|
|
}
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve ContainerItem.
|
|
dbConnection.Open();
|
|
ContainerItem_Db dbContainerItem = new ContainerItem_Db(DbInfo);
|
|
dbContainerItem.PopulateFrom(dbCommand, aliasContainerItem, "Id=" + SysId.ToString(containerItem.Id));
|
|
SbmUpdateLogItemMonitor_ContainerItem updateLogMonitor = new SbmUpdateLogItemMonitor_ContainerItem(Internals, CreateContainerItem(dbContainerItem));
|
|
|
|
// Update properties.
|
|
PopulateTo(dbContainerItem, containerItem, dbUpdateInfo);
|
|
dbContainerItem.ExecuteUpdateCommand(dbCommand);
|
|
containerItem.Changed = false;
|
|
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(containerItem).Concat(": ").Concat("", "\n\t"));
|
|
|
|
// Record updates.
|
|
updateLogMonitor.RecordUpdatedValues(containerItem);
|
|
updateLogMonitor.LogUpdates();
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Delete ContainerItem.
|
|
public override bool ContainerItemCanBeDeleted(SbmContainerItem containerItem)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.ContainerItemCanBeDeleted(containerItem)) return false;
|
|
return true;
|
|
}
|
|
public override bool DeleteContainerItem(SbmContainerItem containerItem, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
String fn = GetType().Name + ".DeleteContainerItem";
|
|
ClearErrorState();
|
|
if (!ContainerItemCanBeDeleted(containerItem)) return false;
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve ContainerItem.
|
|
dbConnection.Open();
|
|
ContainerItem_Db dbContainerItem = new ContainerItem_Db(DbInfo);
|
|
dbContainerItem.PopulateFrom(dbCommand, aliasContainerItem, "Id=" + containerItem.Id.ToString());
|
|
// Delete ContainerItem.
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
dbCommand.CommandText = "DELETE FROM " + SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem) + " WHERE Id=" + SysId.ToString(containerItem.Id) + ";";
|
|
dbCommand.ExecuteNonQuery();
|
|
containerItem.Changed = false;
|
|
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(containerItem).Concat(": ").Concat("", "\n\t"));
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Copy data properties to and from database.
|
|
private void PopulateTo(ContainerItem_Db dbContainerItem, SbmContainerItem containerItem, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
dbContainerItem._ContainerId = SysId.ToInt(containerItem.ContainerItemId);
|
|
dbContainerItem._ItemType = (short)containerItem.ItemType;
|
|
dbContainerItem._ItemId = SysId.ToInt(containerItem.ItemId);
|
|
dbContainerItem._ItemSeq = containerItem.ItemSeq;
|
|
dbContainerItem._ItemTypeSource = (short)containerItem.ItemTypeSource;
|
|
dbContainerItem._ItemIdSource = SysId.ToInt(containerItem.ItemIdSource);
|
|
dbContainerItem._Quantity = containerItem.Quantity;
|
|
// Common properties.
|
|
dbContainerItem._Notes = containerItem.Notes;
|
|
dbContainerItem._Flags = (short)containerItem.Flags;
|
|
dbContainerItem._Status = SacsSystem.GetStatusCode(containerItem.Status);
|
|
if (!SysId.IsValid(containerItem.Id))
|
|
{
|
|
dbContainerItem._CreateOn = DateTime.UtcNow;
|
|
dbContainerItem._CreateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbContainerItem._CreateHost = dbUpdateInfo.Host;
|
|
}
|
|
dbContainerItem._UpdateOn = DateTime.UtcNow;
|
|
dbContainerItem._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbContainerItem._UpdateHost = dbUpdateInfo.Host;
|
|
}
|
|
private void PopulateFrom(ContainerItem_Db dbContainerItem, SbmContainerItem containerItem)
|
|
{
|
|
containerItem.ContainerId = new SysId(dbContainerItem._ContainerId);
|
|
containerItem.ItemType = (Sbm.ItemType)dbContainerItem._ItemType;
|
|
containerItem.ItemId = new SysId(dbContainerItem._ItemId);
|
|
containerItem.ItemSeq = dbContainerItem._ItemSeq;
|
|
containerItem.ItemTypeSource = (Sbm.ItemType)dbContainerItem._ItemTypeSource;
|
|
containerItem.ItemIdSource = new SysId(dbContainerItem._ItemIdSource);
|
|
containerItem.Quantity = dbContainerItem._Quantity;
|
|
// Common properties.
|
|
containerItem.Notes = dbContainerItem._Notes;
|
|
containerItem.Status = SacsSystem.GetStatusForCode(dbContainerItem._Status);
|
|
containerItem.SetCreateStamp(dbContainerItem._CreateOn, new SysId(dbContainerItem._CreateBy), dbContainerItem._CreateHost);
|
|
containerItem.SetUpdateStamp(dbContainerItem._UpdateOn, new SysId(dbContainerItem._UpdateBy), dbContainerItem._UpdateHost);
|
|
containerItem.AcceptChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// ContainerItem alias & prefix.
|
|
private static readonly String aliasContainerItem = "aCntItm";
|
|
//private static readonly String prefixContainerItem = "CntItm_";
|
|
|
|
private static readonly String aliasContainerItem_Container = "aCntItmCon";
|
|
private static readonly String prefixContainerItem_Container = "CntItmCon_";
|
|
private static readonly String aliasContainerItem_Commodity = "aCntItmCmd";
|
|
private static readonly String prefixContainerItem_Commodity = "CntItmCmd_";
|
|
private static readonly String aliasContainerItem_TaxCode = "aCntItmTxc";
|
|
private static readonly String aliasContainerItem_AssocationSupplier = "aCntItmAssSupp";
|
|
private static readonly String prefixContainerItem_AssocationSupplier = "CntItmAssSupp_";
|
|
private static readonly String aliasContainerItem_AssocationCustomer = "aCntItmAssCust";
|
|
private static readonly String prefixContainerItem_AssocationCustomer = "CntItmAssCust_";
|
|
private static readonly String aliasContainerItem_AffiliateSupplier = "aCntItmAffSupp";
|
|
private static readonly String prefixContainerItem_AffiliateSupplier = "CntItmAffSupp_";
|
|
private static readonly String aliasContainerItem_AffiliateCustomer = "aCntItmAffCust";
|
|
private static readonly String prefixContainerItem_AffiliateCustomer = "CntItmAffCust_";
|
|
private static readonly String aliasTable_ItemsCount = "ItmCount";
|
|
private static readonly String aliasTable_MovementCount = "MoveCount";
|
|
private static readonly String dataName_Items = "CntItm_ItemCount";
|
|
private static readonly String dataName_Movements = "CntItm_MoveCount";
|
|
private static readonly String dataName_Rrp = "CntItm_Rrp";
|
|
private static readonly String dataName_ImagePath = "CntItm_ImgPath";
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Setting ContainerItem column definitions.
|
|
private void SetContainerItemColDfn
|
|
(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.ContainerItem)
|
|
alias = aliasContainerItem;
|
|
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 ContainerItem column definition.
|
|
public override ColumnDfn GetContainerItemColumnDfn(SbmContainerItem.Column columnId, string caption = "", int width = 0)
|
|
{
|
|
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
|
|
switch (columnId)
|
|
{
|
|
case SbmContainerItem.Column.Pos:
|
|
SetContainerItemColDfn(columnDfn, "Pos", 45, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
|
columnDfn.ReadOnly = true;
|
|
columnDfn.Resizable = false;
|
|
break;
|
|
|
|
// ContainerItem Properties.
|
|
case SbmContainerItem.Column.Id:
|
|
SetContainerItemColDfn(columnDfn, "Id", 60, SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmContainerItem.Column.ItemSeq:
|
|
SetContainerItemColDfn(columnDfn, "Item seq", 80, SbmDbDfn.ColumnIdx.ContainerItem_ItemSeq, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmContainerItem.Column.ItemType:
|
|
SetContainerItemColDfn(columnDfn, "Item type", 80, SbmDbDfn.ColumnIdx.ContainerItem_ItemType, ColumnAlignment.Center);
|
|
break;
|
|
case SbmContainerItem.Column.ItemId:
|
|
SetContainerItemColDfn(columnDfn, "Item Id", 80, SbmDbDfn.ColumnIdx.ContainerItem_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmContainerItem.Column.SourceItemType:
|
|
SetContainerItemColDfn(columnDfn, "Source item type", 120, SbmDbDfn.ColumnIdx.ContainerItem_ItemTypeSource, ColumnAlignment.Center);
|
|
break;
|
|
case SbmContainerItem.Column.SourceItemId:
|
|
SetContainerItemColDfn(columnDfn, "Source item Id", 100, SbmDbDfn.ColumnIdx.ContainerItem_ItemIdSource, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SbmContainerItem.Column.SourceItem:
|
|
SetContainerItemColDfn(columnDfn, "Source", 160, SbmDbDfn.ColumnIdx.Unknown);
|
|
break;
|
|
case SbmContainerItem.Column.Quantity:
|
|
SetContainerItemColDfn(columnDfn, "Quantity", 65, SbmDbDfn.ColumnIdx.ContainerItem_Quantity, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
columnDfn.NumDecimals = (byte)OrderQuantityDecimals;
|
|
break;
|
|
|
|
// Common properties.
|
|
case SbmContainerItem.Column.Notes:
|
|
SetContainerItemColDfn(columnDfn, "Notes", 200, SbmDbDfn.ColumnIdx.ContainerItem_Notes);
|
|
break;
|
|
case SbmContainerItem.Column.Status:
|
|
SetContainerItemColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.ContainerItem_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmContainerItem.Column.Status_Desc:
|
|
SetContainerItemColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.ContainerItem_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SbmContainerItem.Column.Status_Ind:
|
|
SetContainerItemColDfn(columnDfn, "Status", 50, SbmDbDfn.ColumnIdx.ContainerItem_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmContainerItem.Column.CreateOn_Date:
|
|
SetContainerItemColDfn(columnDfn, "Created", 65, SbmDbDfn.ColumnIdx.ContainerItem_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SbmContainerItem.Column.UpdateOn_Date:
|
|
SetContainerItemColDfn(columnDfn, "Updated", 65, SbmDbDfn.ColumnIdx.ContainerItem_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
|
|
//---------------------------------------------------------------
|
|
// Container details:
|
|
case SbmContainerItem.Column.Container_CategoryDesc:
|
|
SetContainerItemColDfn(columnDfn, "Container cat", 120, SbmDbDfn.ColumnIdx.Container_Category, ColumnAlignment.Center, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_TypeDesc:
|
|
SetContainerItemColDfn(columnDfn, "Container type", 120, SbmDbDfn.ColumnIdx.Container_Type, ColumnAlignment.Center, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_Reference:
|
|
SetContainerItemColDfn(columnDfn, "Container ref", 120, SbmDbDfn.ColumnIdx.Container_Reference, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_DescBrief:
|
|
SetContainerItemColDfn(columnDfn, "Container description", 120, SbmDbDfn.ColumnIdx.Container_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_TagId:
|
|
SetContainerItemColDfn(columnDfn, "Container Tag", 100, SbmDbDfn.ColumnIdx.Container_TagId, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_AssIdSupplier:
|
|
SetContainerItemColDfn(columnDfn, "Supp Id", 55, SbmDbDfn.ColumnIdx.Container_AssIdSupplier, ColumnAlignment.Right, DataValue.DataType.Long, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_SupplierName:
|
|
SetContainerItemColDfn(columnDfn, "Supplier", 140, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_AffiliateSupplier, prefixContainerItem_AffiliateSupplier);
|
|
break;
|
|
case SbmContainerItem.Column.Container_AssIdCustomer:
|
|
SetContainerItemColDfn(columnDfn, "Cust Id", 55, SbmDbDfn.ColumnIdx.Container_AssIdCustomer, ColumnAlignment.Right, DataValue.DataType.Long, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_CustomerName:
|
|
SetContainerItemColDfn(columnDfn, "Customer", 140, SbmDbDfn.ColumnIdx.Affiliate_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_AffiliateCustomer, prefixContainerItem_AffiliateCustomer);
|
|
break;
|
|
case SbmContainerItem.Column.Container_Expected:
|
|
SetContainerItemColDfn(columnDfn, "Expected", 75, SbmDbDfn.ColumnIdx.Container_Expected, ColumnAlignment.Center, DataValue.DataType.Date, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmContainerItem.Column.Container_Notes:
|
|
SetContainerItemColDfn(columnDfn, "Container notes", 200, SbmDbDfn.ColumnIdx.Container_Notes, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_StatusDesc:
|
|
SetContainerItemColDfn(columnDfn, "Status", 100, SbmDbDfn.ColumnIdx.Container_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
break;
|
|
case SbmContainerItem.Column.Container_StatusInd:
|
|
SetContainerItemColDfn(columnDfn, "Status", 55, SbmDbDfn.ColumnIdx.Container_Status, ColumnAlignment.Center, DataValue.DataType.TriState, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SbmContainerItem.Column.Container_CreateOn:
|
|
SetContainerItemColDfn(columnDfn, "Created", 110, SbmDbDfn.ColumnIdx.Container_CreateOn, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmContainerItem.Column.Container_UpdateOn:
|
|
SetContainerItemColDfn(columnDfn, "Updated", 110, SbmDbDfn.ColumnIdx.Container_UpdateOn, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasContainerItem_Container, prefixContainerItem_Container);
|
|
columnDfn.DateFormat = "d-MMM-yy";
|
|
break;
|
|
case SbmContainerItem.Column.Container_ItemCount:
|
|
SetContainerItemColDfn(columnDfn, "Items", 55, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = dataName_Items;
|
|
break;
|
|
case SbmContainerItem.Column.Container_MovementCount:
|
|
SetContainerItemColDfn(columnDfn, "Moves", 55, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = dataName_Movements;
|
|
break;
|
|
|
|
//---------------------------------------------------------------
|
|
// Commodity details:
|
|
case SbmContainerItem.Column.Commodity_Id:
|
|
SetContainerItemColDfn(columnDfn, "Item Id", 80, SbmDbDfn.ColumnIdx.Commodity_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_Code:
|
|
SetContainerItemColDfn(columnDfn, "Item code", 90, SbmDbDfn.ColumnIdx.Commodity_Code, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_DescBrief:
|
|
SetContainerItemColDfn(columnDfn, "Item", 120, SbmDbDfn.ColumnIdx.Commodity_DescBrief, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_Dimensions:
|
|
SetContainerItemColDfn(columnDfn, "Dimensions", 100, SbmDbDfn.ColumnIdx.Commodity_Dimensions, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_ICNTariffCode:
|
|
SetContainerItemColDfn(columnDfn, GetAttributeCaption(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, "ICN tariff"), 90, SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_CostPrice_Unit:
|
|
SetContainerItemColDfn(columnDfn, "Cost price", 100, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_CostPrice_Unit_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Cost price", 100, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_CostPrice_Total:
|
|
SetContainerItemColDfn(columnDfn, "Cost price", 100, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_CostPrice_Total_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Cost price", 100, SbmDbDfn.ColumnIdx.Commodity_CostPrice, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_MaterialCurrencyId:
|
|
SetContainerItemColDfn(columnDfn, "Material currency", 110, SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial, ColumnAlignment.Left, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_MaterialCost_Unit:
|
|
SetContainerItemColDfn(columnDfn, "Material cost", 110, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_MaterialCost_Unit_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Material cost", 110, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_MaterialCost_Total:
|
|
SetContainerItemColDfn(columnDfn, "Material cost", 110, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_MaterialCost_Total_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Material cost", 110, SbmDbDfn.ColumnIdx.Commodity_MaterialCost, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_SalesPrice_Unit:
|
|
SetContainerItemColDfn(columnDfn, "Sales price", 90, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_SalesPrice_Unit_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Sales price", 100, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_SalesPrice_Total:
|
|
SetContainerItemColDfn(columnDfn, "Sales price", 90, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_SalesPrice_Total_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Sales price", 100, SbmDbDfn.ColumnIdx.Commodity_SalesPrice, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_RetailPrice_Unit:
|
|
SetContainerItemColDfn(columnDfn, "Retail price", 90, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_RetailPrice_Unit_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Retail price", 100, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (unit)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_RetailPrice_Total:
|
|
SetContainerItemColDfn(columnDfn, "Retail price", 90, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.Double, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_RetailPrice_Total_Fmt:
|
|
SetContainerItemColDfn(columnDfn, "Retail price", 100, SbmDbDfn.ColumnIdx.Commodity_RetailPrice, ColumnAlignment.Right, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
columnDfn.Caption = columnDfn.Caption + " (total)";
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_RRP:
|
|
SetContainerItemColDfn(columnDfn, "RRP", 90, SbmDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right, DataValue.DataType.Double);
|
|
columnDfn.DataName = dataName_Rrp;
|
|
columnDfn.NumDecimals = CurrencyDecimalsDefault;
|
|
break;
|
|
case SbmContainerItem.Column.Commodity_Image:
|
|
SetContainerItemColDfn(columnDfn, "Image", 160, SbmDbDfn.ColumnIdx.Commodity_ImagePath, ColumnAlignment.Center, DataValue.DataType.String, aliasContainerItem_Commodity, prefixContainerItem_Commodity);
|
|
break;
|
|
}
|
|
if (!String.IsNullOrEmpty(caption))
|
|
columnDfn.Caption = caption;
|
|
if (width > 0)
|
|
columnDfn.Width = width;
|
|
return columnDfn;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Query filter.
|
|
public override List<string> GetContainerItemQueryFilter(SbmContainerItem.Params prm)
|
|
{
|
|
List<String> filters = new List<String>();
|
|
String tableAliasContainerItem = StringUtil.OnEmpty(prm.TableAlias, aliasContainerItem);
|
|
|
|
//---------------------------------------------------------------
|
|
// Item Ids.
|
|
String colContainerItem_Id = SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, tableAliasContainerItem);
|
|
String includedIds = prm.IncludedIds.Concat(",");
|
|
if (!includedIds.IsEmpty())
|
|
filters.Add(colContainerItem_Id + " IN (" + includedIds + ")");
|
|
String excludedIds = prm.ExcludedIds.Concat(",");
|
|
if (!excludedIds.IsEmpty())
|
|
filters.Add(colContainerItem_Id + " NOT IN (" + excludedIds + ")");
|
|
|
|
//---------------------------------------------------------------
|
|
// Container filters.
|
|
bool containerTablePresent = !StringUtil.IsEmpty(prm.TableAlias_Container);
|
|
String tableAliasContainer = StringUtil.OnEmpty(prm.TableAlias_Container, "aCont");
|
|
SbmContainer.Params prmContainer = new SbmContainer.Params(prm);
|
|
prmContainer.TableAlias = tableAliasContainer;
|
|
prmContainer.IncludeDefaultFilter = false;
|
|
List<String> containerFilter = GetContainerQueryFilter(prmContainer);
|
|
if (containerFilter.Count > 0)
|
|
{
|
|
if (containerTablePresent)
|
|
filters.AddRange(containerFilter);
|
|
else
|
|
{
|
|
DbQuery qryCont = new DbQuery(db.DbmsType);
|
|
qryCont.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container), tableAliasContainer);
|
|
qryCont.Columns.Add(SbmDbDfn.GetColumnName(SbmDbDfn.ColumnIdx.Container_Id), tableAliasContainer);
|
|
qryCont.Filters.Add(containerFilter.Concat(" And ", "(", ")"));
|
|
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, tableAliasContainerItem) + " In(" + qryCont.BuildQuery() + ")");
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Item.
|
|
if (prm.ItemType != Sbm.ItemType.Unknown)
|
|
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemType, tableAliasContainerItem) + "=" + ((int)prm.ItemType).ToString());
|
|
if (prm.ItemIds.Count > 0)
|
|
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, tableAliasContainerItem) + "In(" + prm.ItemIds.Concat(",") + ")");
|
|
|
|
//---------------------------------------------------------------------
|
|
// Source Item:
|
|
if (prm.ItemTypeSource != Sbm.ItemType.Unknown)
|
|
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemTypeSource, tableAliasContainerItem) + "=" + ((int)prm.ItemTypeSource).ToString());
|
|
if (prm.ItemIdsSource.Count > 0)
|
|
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemIdSource, tableAliasContainerItem) + "In(" + prm.ItemIdsSource.Concat(",") + ")");
|
|
|
|
//---------------------------------------------------------------------
|
|
// Active.
|
|
if (prm.StatusCat == SbmContainerItem.StatusCat.ActiveOnly)
|
|
filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Status, tableAliasContainerItem) + " In('" + StatusActive + "')");
|
|
|
|
if (filters.Count < 1) filters.Add("1=1");
|
|
return filters;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Sort columns.
|
|
public List<String> GetContainerItemSortColumns(SbmContainerItem.Params prm)
|
|
{
|
|
// Sort sequence.
|
|
String tableAliasContainerItem = StringUtil.OnEmpty(prm.TableAlias, aliasContainerItem);
|
|
List<String> sortColumnNames = new List<String>();
|
|
foreach (var columnDfn in prm.SortColumns)
|
|
{
|
|
// Need to ensure correct alias used for ContainerItem columns in case of conflict.
|
|
String sortCol = String.Empty;
|
|
if (SbmDbDfn.GetTableForColumn((SbmDbDfn.ColumnIdx)columnDfn.DbColumn) == SbmDbDfn.TableIdx.ContainerItem)
|
|
{
|
|
sortCol = SbmDbDfn.GetColumnNameQual((SbmDbDfn.ColumnIdx)columnDfn.DbColumn, tableAliasContainerItem);
|
|
}
|
|
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.ContainerItem_ItemType, tableAliasContainerItem) + " ASC");
|
|
}
|
|
return sortColumnNames;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Item count.
|
|
private long GetContainerItemCount(String filter)
|
|
{
|
|
ClearErrorState();
|
|
return db.GetRowCount(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem) + " As " + aliasContainerItem, filter);
|
|
}
|
|
public override long GetContainerItemCount(SbmContainerItem.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
return GetContainerItemCount(GetContainerItemQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Item list.
|
|
public override List<SbmContainerItem> GetContainerItemList(SbmContainerItem.Params prm)
|
|
{
|
|
List<SbmContainerItem> ContainerItemes = new List<SbmContainerItem>();
|
|
DbQuery DbQuery = new DbQuery(db.DbmsType);
|
|
DbQuery.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem), aliasContainerItem);
|
|
ContainerItem_Db dbContainerItem = new ContainerItem_Db(DbInfo);
|
|
DbQuery.Columns.AddRange(dbContainerItem.ExistingColumnNames);
|
|
DbQuery.Filters.AddRange(GetContainerItemQueryFilter(prm));
|
|
DbQuery.OrderBy.AddRange(GetContainerItemSortColumns(prm));
|
|
// Query data.
|
|
using (var dbConnection = db.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
dbCommand.CommandText = DbQuery.BuildQuery(prm.ResultsPaging);
|
|
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
|
{
|
|
while (dbDataReader.Read())
|
|
{
|
|
dbContainerItem = new ContainerItem_Db(DbInfo);
|
|
dbContainerItem.PopulateFrom(dbDataReader);
|
|
ContainerItemes.Add(CreateContainerItem(dbContainerItem));
|
|
}
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SaLogger.Warn(GetType().Name + ".GetContainerItemList\n\tQuery: " + dbCommand.CommandText + "\n\tException: " + exc.Message);
|
|
}
|
|
}
|
|
return ContainerItemes;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Execute query.
|
|
public override DbResultSet ExecuteContainerItemQuery(List<ColumnDfn> columns, SbmContainerItem.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
|
|
//---------------------------------------------------------------
|
|
// Construct query.
|
|
DbQuery query = new DbQuery(db.DbmsType);
|
|
query.Tables.Add(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem), aliasContainerItem);
|
|
|
|
//---------------------------------------------------------------
|
|
// ContainerItem Properties - add columns as defined in query list.
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, aliasContainerItem));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemType, aliasContainerItem));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId, aliasContainerItem));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemSeq, aliasContainerItem));
|
|
if (columns.HasId((int)SbmContainerItem.Column.SourceItemType) || columns.HasId((int)SbmContainerItem.Column.SourceItemId) || columns.HasId((int)SbmContainerItem.Column.SourceItem))
|
|
{
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemTypeSource));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemIdSource));
|
|
}
|
|
if (columns.HasId((int)SbmContainerItem.Column.Quantity) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Total_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Total_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Total_Fmt))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Quantity));
|
|
if (columns.HasId((int)SbmContainerItem.Column.Notes))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Notes));
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Flags));
|
|
if (columns.HasId((int)SbmContainerItem.Column.Status_Desc) || columns.HasId((int)SbmContainerItem.Column.Status_Ind))
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_Status));
|
|
|
|
//---------------------------------------------------------------------
|
|
// Container.
|
|
bool hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_CategoryDesc);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_TypeDesc);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_Reference);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_DescBrief);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_TagId);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_Expected);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_Notes);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_StatusDesc);
|
|
if (!hasContainerCols) hasContainerCols = columns.HasId((int)SbmContainerItem.Column.Container_StatusInd);
|
|
// Container supplier columns.
|
|
bool hasSupplierAssCols = false;
|
|
bool hasSupplierAffCols = false;
|
|
if (!hasSupplierAssCols) hasSupplierAssCols = (columns.HasId((int)SbmContainerItem.Column.Container_AssIdSupplier));
|
|
if (!hasSupplierAffCols) hasSupplierAffCols = (columns.HasId((int)SbmContainerItem.Column.Container_SupplierName));
|
|
// Container Customer columns.
|
|
bool hasCustomerAssCols = false;
|
|
bool hasCustomerAffCols = false;
|
|
if (!hasCustomerAssCols) hasCustomerAssCols = (columns.HasId((int)SbmContainerItem.Column.Container_AssIdCustomer));
|
|
if (!hasCustomerAffCols) hasCustomerAffCols = (columns.HasId((int)SbmContainerItem.Column.Container_CustomerName));
|
|
if (hasContainerCols)
|
|
{
|
|
// Join to the container.
|
|
prm.TableAlias_Container = aliasContainerItem_Container;
|
|
DbQueryJoin joinCont = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinCont.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Container), aliasContainerItem_Container);
|
|
joinCont.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_Id, aliasContainerItem_Container) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId));
|
|
query.Joins.Add(joinCont);
|
|
// Add the Container columns.
|
|
List<SbmDbDfn.ColumnIdx> ContainCol = new List<SbmDbDfn.ColumnIdx>()
|
|
{
|
|
SbmDbDfn.ColumnIdx.Container_Category,
|
|
SbmDbDfn.ColumnIdx.Container_Type,
|
|
SbmDbDfn.ColumnIdx.Container_Reference,
|
|
SbmDbDfn.ColumnIdx.Container_DescBrief,
|
|
SbmDbDfn.ColumnIdx.Container_TagId,
|
|
SbmDbDfn.ColumnIdx.Container_Expected,
|
|
SbmDbDfn.ColumnIdx.Container_Notes,
|
|
SbmDbDfn.ColumnIdx.Container_Status
|
|
};
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in ContainCol)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasContainerItem_Container), prefixContainerItem_Container + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
|
|
// Container supplier columns.
|
|
if (hasSupplierAssCols || hasSupplierAffCols
|
|
)
|
|
{
|
|
// Supplier association.
|
|
DbQueryJoin joinAss = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAss.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasContainerItem_AssocationSupplier);
|
|
joinAss.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasContainerItem_AssocationSupplier) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_AssIdSupplier, aliasContainerItem_Container));
|
|
query.Joins.Add(joinAss);
|
|
// Add the Association columns.
|
|
List<SbmDbDfn.ColumnIdx> AssociationCol = new List<SbmDbDfn.ColumnIdx>();
|
|
AssociationCol.Add(SbmDbDfn.ColumnIdx.Association_Code);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in AssociationCol)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasContainerItem_AssocationSupplier), prefixContainerItem_AssocationSupplier + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
|
|
if (hasSupplierAffCols)
|
|
{
|
|
// Supplier affiliate.
|
|
DbQueryJoin joinAff = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAff.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasContainerItem_AffiliateSupplier);
|
|
joinAff.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasContainerItem_AffiliateSupplier) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasContainerItem_AssocationSupplier));
|
|
query.Joins.Add(joinAff);
|
|
// Add the Affiliate columns.
|
|
List<SbmDbDfn.ColumnIdx> AffCol = new List<SbmDbDfn.ColumnIdx>();
|
|
AffCol.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in AffCol)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasContainerItem_AffiliateSupplier), prefixContainerItem_AffiliateSupplier + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
}
|
|
|
|
// Container Customer columns.
|
|
if (hasCustomerAssCols || hasCustomerAffCols)
|
|
{
|
|
// Customer association.
|
|
DbQueryJoin joinAss = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAss.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Association), aliasContainerItem_AssocationCustomer);
|
|
joinAss.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_Id, aliasContainerItem_AssocationCustomer) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Container_AssIdCustomer, aliasContainerItem_Container));
|
|
query.Joins.Add(joinAss);
|
|
// Add the Association columns.
|
|
List<SbmDbDfn.ColumnIdx> AssCol = new List<SbmDbDfn.ColumnIdx>();
|
|
AssCol.Add(SbmDbDfn.ColumnIdx.Association_Code);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in AssCol)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasContainerItem_AssocationCustomer), prefixContainerItem_AssocationCustomer + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
|
|
if (hasCustomerAffCols)
|
|
{
|
|
// Customer affiliate:
|
|
DbQueryJoin joinAff = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinAff.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Affiliate), aliasContainerItem_AffiliateCustomer);
|
|
joinAff.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Affiliate_Id, aliasContainerItem_AffiliateCustomer) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Association_AffIdTarget, aliasContainerItem_AssocationCustomer));
|
|
query.Joins.Add(joinAff);
|
|
// Add the Affiliate columns.
|
|
List<SbmDbDfn.ColumnIdx> AffCol = new List<SbmDbDfn.ColumnIdx>();
|
|
AffCol.Add(SbmDbDfn.ColumnIdx.Affiliate_Name);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in AffCol)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasContainerItem_AffiliateCustomer), prefixContainerItem_AffiliateCustomer + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
}
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Commodity:
|
|
bool hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_Id);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_Code);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_DescBrief);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_Dimensions);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_ICNTariffCode);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Unit);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Unit_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Total);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Total_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCurrencyId);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Unit);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Unit_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Unit);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Unit_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Total);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Total_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Unit);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Unit_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Total);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Total_Fmt);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_RRP);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_Image);
|
|
if (!hasCommodityCols) hasCommodityCols = columns.HasId((int)SbmContainerItem.Column.Commodity_Notes);
|
|
if (hasCommodityCols)
|
|
{
|
|
// Join to the Commodity:
|
|
DbQueryJoin joinCont = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinCont.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Commodity), aliasContainerItem_Commodity);
|
|
joinCont.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_Id, aliasContainerItem_Commodity) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ItemId));
|
|
query.Joins.Add(joinCont);
|
|
|
|
// Add the Commodity columns.
|
|
List<SbmDbDfn.ColumnIdx> CmdCol = new List<SbmDbDfn.ColumnIdx>();
|
|
CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_Id);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_Code)) CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_Code);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_DescBrief)) CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_DescBrief);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_Dimensions)) CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_Dimensions);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_ICNTariffCode)) CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_ICNTariffCode);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Unit) || columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Unit_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_CostPrice_Total_Fmt))
|
|
CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_CostPrice);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCurrencyId) || columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Unit_Fmt) || columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total_Fmt))
|
|
CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_CurrencyIdMaterial);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Unit) || columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Unit_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_MaterialCost_Total_Fmt))
|
|
CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_MaterialCost);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Unit) || columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Unit_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_SalesPrice_Total_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_RRP))
|
|
CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_SalesPrice);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Unit) || columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Unit_Fmt) ||
|
|
columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Total) || columns.HasId((int)SbmContainerItem.Column.Commodity_RetailPrice_Total_Fmt))
|
|
CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_RetailPrice);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_Image)) CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_ImagePath);
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_Notes)) CmdCol.Add(SbmDbDfn.ColumnIdx.Commodity_Notes);
|
|
foreach (SbmDbDfn.ColumnIdx dbColumn in CmdCol)
|
|
query.Columns.Add(SbmDbDfn.GetColumnNameQual(dbColumn, aliasContainerItem_Commodity), prefixContainerItem_Commodity + SbmDbDfn.GetColumnName(dbColumn, false));
|
|
|
|
// RRP requires tax rate:
|
|
if (columns.HasId((int)SbmContainerItem.Column.Commodity_RRP))
|
|
{
|
|
DbQueryJoin joinTax = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinTax.Table = new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.TaxCode), aliasContainerItem_TaxCode);
|
|
joinTax.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Id, aliasContainerItem_TaxCode) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_TaxCodeId, aliasContainerItem_Commodity));
|
|
joinTax.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_Status, aliasContainerItem_TaxCode) + "='" + StatusCurrent + "'");
|
|
query.Joins.Add(joinTax);
|
|
|
|
// Calculate RRP: SalesPrice + TaxRate%;
|
|
String colRRP = "(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Commodity_SalesPrice, aliasContainerItem_Commodity) + "*(1.0+(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.TaxCode_TaxRate, aliasContainerItem_TaxCode) + "/100.0)))";
|
|
query.Columns.Add(colRRP, dataName_Rrp);
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Count subordinate data items.
|
|
if (columns.HasId((int)SbmContainer.Column.ItemCount))
|
|
{
|
|
// Build sub query to directly return the number of associated items.
|
|
DbQuery qryItemCount = new DbQuery(db.DbmsType);
|
|
qryItemCount.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.ContainerItem), aliasTable_ItemsCount));
|
|
qryItemCount.Columns.Add("Count(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, aliasTable_ItemsCount) + ")");
|
|
qryItemCount.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId, aliasTable_ItemsCount) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId));
|
|
query.Columns.Add("(" + qryItemCount.BuildQuery() + ")", dataName_Items);
|
|
}
|
|
|
|
if (columns.HasId((int)SbmContainer.Column.MovementCount))
|
|
{
|
|
// Table aliases for linked Movement table & Build sub query to directly return the number of associated movements.
|
|
DbQuery qryMoveCount = new DbQuery(db.DbmsType);
|
|
qryMoveCount.Tables.Add(new StringPair(SbmDbDfn.GetTableName(SbmDbDfn.TableIdx.Movement), aliasTable_MovementCount));
|
|
qryMoveCount.Columns.Add("Count(" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_Id, aliasTable_MovementCount) + ")");
|
|
qryMoveCount.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemType, aliasTable_MovementCount) + "=" + ((int)Sbm.ItemType.Container).ToString());
|
|
qryMoveCount.Filters.Add(SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.Movement_ItemId, aliasTable_MovementCount) + "=" + SbmDbDfn.GetColumnNameQual(SbmDbDfn.ColumnIdx.ContainerItem_ContainerId));
|
|
query.Columns.Add("(" + qryMoveCount.BuildQuery() + ")", dataName_Movements);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
// Populate filter.
|
|
query.Filters.AddRange(GetContainerItemQueryFilter(prm));
|
|
if (prm.IncludedIds.Count != 1)
|
|
{
|
|
// Configure sort sequence.
|
|
foreach (String sortColumn in GetContainerItemSortColumns(prm))
|
|
query.OrderBy.Add(sortColumn);
|
|
}
|
|
|
|
//---------------------------------------------------------------
|
|
//return new DbResultSet_DataTableReader(db, query.BuildQuery());
|
|
return DbResultSet_DataReader.ExecuteQuery(db, query.BuildQuery(prm.ResultsPaging));
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|