Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmCommodityMgr_Container.cs
T

235 lines
9.5 KiB
C#

using Sarand.BusinessMgr.Net.Standard.Base.App;
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
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 System;
using System.Collections.Generic;
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
{
//=======================================================================
// Commodity Manager - Container.
//=======================================================================
partial class SbmCommodityMgr
{
//-------------------------------------------------------------------
// Utilities.
// Associated data.
public abstract bool ContainerHasItems(SysId containerId);
public abstract bool ContainerHasMovements(SysId containerId);
public abstract bool ContainerHasActionedMovements(SysId containerId);
//-------------------------------------------------------------------
// Retrieve individual containers.
//-------------------------------------------------------------------
// Container exists.
public bool ContainerExistsById(SysId containerId)
{
ClearErrorState();
if (!SysId.IsValid(containerId)) return false;
SbmContainer.Params prmContainer = new SbmContainer.Params();
prmContainer.IdsIncluded.Add(containerId);
return GetContainerCount(prmContainer) == 1;
}
public bool ContainerExistsByReference(Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType, String reference)
{
ClearErrorState();
if ((int)containerCategory < 1 && (int)containerType < 1 && StringUtil.IsEmpty(reference)) return false;
SbmContainer.Params prmContainer = new SbmContainer.Params();
prmContainer.ContainerCategory = containerCategory;
prmContainer.ContainerType = containerType;
prmContainer.Reference = reference;
prmContainer.ContainerType = Sbm.ContainerType.Any;
return GetContainerCount(prmContainer) == 1;
}
//-------------------------------------------------------------------
// Get containers.
public abstract SbmContainer GetContainer(SbmContainer.Params prm);
public SbmContainer GetContainerById(SysId containerId)
{
ClearErrorState();
if (!SysId.IsValid(containerId)) return null;
SbmContainer.Params prmContainer = new SbmContainer.Params();
prmContainer.IdsIncluded.Add(containerId);
return GetContainer(prmContainer);
}
public SbmContainer GetContainerByReference(Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType, String reference)
{
ClearErrorState();
if ((int)containerCategory < 1 && (int)containerType < 1 && StringUtil.IsEmpty(reference)) return null;
SbmContainer.Params prmContainer = new SbmContainer.Params();
prmContainer.ContainerCategory = containerCategory;
prmContainer.ContainerType = containerType;
prmContainer.Reference = reference;
prmContainer.ContainerType = Sbm.ContainerType.Any;
return GetContainer(prmContainer);
}
//-------------------------------------------------------------------
// Create containers.
public abstract SbmContainer CreateContainer(Sbm.ContainerCategory containerCategory, Sbm.ContainerType containerType);
//-------------------------------------------------------------------
// Validate Container data.
public bool IsValidContainer(SbmContainer container)
{
ClearErrorState();
if (container == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidContainerData(container.GetData(), new SbmContainer.ErrField());
}
public virtual bool IsValidContainerData(SbmContainer.Data data, SbmContainer.ErrField errField)
{
ClearErrorState();
//Validate the identity.
if (!SysId.IsValid(data.AffiliateIdOwner))
{
errField.AffiliateIdOwner = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid owner");
}
if ((int)data.ContainerCategory < 1)
{
errField.ContainerCategory = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid category");
}
if ((int)data.ContainerType < 1)
{
errField.ContainerType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid type");
}
if (!SysId.IsValid(data.AssIdSupplier))
{
errField.AssIdSupplier = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid association supplier");
}
if (!SysId.IsValid(data.AssIdCustomer))
{
errField.AssIdCustomer = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid association customer");
}
// Validate the text attributes.
if (errField.Reference != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Reference, "reference", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Container_Reference), true))
{
errField.Reference = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "description brief", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Container_DescBrief), true))
{
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.TagId != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.TagId.ToString(), "tag Id", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Container_TagId), true))
{
errField.TagId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("invalid TagId");
}
if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Container_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)Internals.GetColTextLen(SbmDbDfn.ColumnIdx.Container_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmContainer.ContainerStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
return true;
}
//-------------------------------------------------------------------
// Container database interface.
public abstract bool InsertContainer(SbmContainer container, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateContainer(SbmContainer container, DbUpdateInfo dbUpdateInfo);
public virtual bool ContainerCanBeDeleted(SbmContainer container)
{
ClearErrorState();
return true;
}
public abstract bool DeleteContainer(SbmContainer container, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Container list.
public abstract ColumnDfn GetContainerColumnDfn(SbmContainer.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetContainerQueryFilter(SbmContainer.Params prm);
public abstract long GetContainerCount(SbmContainer.Params prm);
public abstract List<SbmContainer> GetContainerList(SbmContainer.Params prm);
public abstract DbResultSet ExecuteContainerQuery(List<ColumnDfn> columns, SbmContainer.Params prm);
//-------------------------------------------------------------------
// D a t a V a l u e s
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public DataValue GetContainerDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmContainer.Column)column.Id)
{
//-----------------------------------------------------------
// Container TypeDesc.
case SbmContainer.Column.Type_Desc:
{
Sbm.ContainerType containerType = (Sbm.ContainerType)ContainerTypes.GetTypeForCode(values.GetValue(column.DataName).AsString());
value = new DataValue(ContainerTypes.GetDescForType(containerType, ((int)containerType).ToString()));
break;
}
// Container CategoryDesc.
case SbmContainer.Column.Category_Desc:
{
Sbm.ContainerCategory containerCategory = (Sbm.ContainerCategory)values.GetValue(column.DataName).AsLong();
value = new DataValue(ContainerCategories.GetDescForType(containerCategory, ((int)containerCategory).ToString()));
break;
}
//-----------------------------------------------------------
// Notes.
case SbmContainer.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status.
case SbmContainer.Column.Status_Desc:
case SbmContainer.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmContainer.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SbmContainer.Column.Status_Ind)
value = new DataValue(SbmContainer.GetStatusTriState(status));
break;
}
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}