Files
Common-VS2019/SacsBusinessBase/Base/Interfaces/SaInterfaceMgr-InterfaceProcesses.cs
T

239 lines
11 KiB
C#

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.Net.Standard.Base.Interfaces
{
//=======================================================================
public partial class SaInterfaceMgr
{
//*******************************************************************
// I n t e r f a c e P r o c e s s e s
//*******************************************************************
// Data members.
protected static readonly String colInterfaceProcess_MessageStatusErr = "IntPrcMessageStatusErr";
protected static readonly String colInterfaceProcess_MessageStatusWrn = "IntPrcMessageStatusWrn";
protected static readonly String colInterfaceProcess_MessageStatusInf = "IntPrcMessageStatusInf";
//-------------------------------------------------------------------
// Associated data.
public abstract int GetInterfaceProcessMessageCount (SysId id);
public abstract bool InterfaceProcessHasMessages (SysId id);
public abstract int GetInterfaceProcessDataItemCount (SysId id);
public abstract bool InterfaceProcessHasDataItems (SysId id);
//-------------------------------------------------------------------
// Retrieve individual interface processes.
public abstract bool InterfaceProcessExistsById (SysId id);
public abstract SaInterfaceProcess GetInterfaceProcessById (SysId id);
public abstract SaInterfaceProcess GetInterfaceProcess (SaInterfaceProcess.Params prm);
// Create Interface Process.
public abstract SaInterfaceProcess CreateInterfaceProcess (SysId interfaceId, SaInterfaceProcessDirection direction, String reference, int sequence);
//-------------------------------------------------------------------
// Validate Interface Process.
public bool IsValidInterfaceProcess (SaInterfaceProcess interfaceProcess)
{
ClearErrorState();
if (interfaceProcess == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidInterfaceProcessData(interfaceProcess.GetData(), new SaInterfaceProcess.ErrField());
}
public virtual bool IsValidInterfaceProcessData (SaInterfaceProcess.Data data, SaInterfaceProcess.ErrField errField)
{
ClearErrorState();
if (errField.InterfaceId != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.InterfaceId))
{
errField.InterfaceId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Interface must be supplied");
}
if (errField.Direction != SacsHierarchyItem.ValidValue.Ignore && (int)data.Direction < 1)
{
errField.Direction = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Direction must be supplied");
}
if (errField.Reference != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Reference, "reference", (long)SaInterfaceDbDfn.GetColTextLen(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcRef)))
{
errField.Reference = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Sequence != SacsHierarchyItem.ValidValue.Ignore && data.Sequence < 1)
{
errField.Sequence = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Sequence must be supplied");
}
// Common properties.
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore && !SaInterfaceProcess.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
return true;
}
//-------------------------------------------------------------------
// Interface Process database interface.
public abstract bool InsertInterfaceProcess (SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateInterfaceProcess (SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo);
public virtual bool InterfaceProcessCanBeDeleted (SaInterfaceProcess interfaceProcess)
{
ClearErrorState();
if (InterfaceProcessHasMessages(interfaceProcess.Id)) return SetErrorState("Process has messages");
if (InterfaceProcessHasDataItems(interfaceProcess.Id)) return SetErrorState("Process has data items");
return true;
}
public abstract bool ClearInterfaceProcessMessages (List<SysId> interfaceProcessIds, DbUpdateInfo dbUpdateInfo);
public abstract bool ClearInterfaceProcessDataItems (List<SysId> interfaceProcessIds, DbUpdateInfo dbUpdateInfo);
public abstract bool DeleteInterfaceProcess (SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Interface Process list.
public abstract ColumnDfn GetInterfaceProcessColumnDfn (SaInterfaceProcess.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetInterfaceProcessQueryFilter (SaInterfaceProcess.Params prm);
public abstract long GetInterfaceProcessCount (SaInterfaceProcess.Params prm);
public abstract List<SaInterfaceProcess> GetInterfaceProcessList (SaInterfaceProcess.Params prm);
public abstract DbResultSet ExecuteInterfaceProcessQuery (List<ColumnDfn> columns, SaInterfaceProcess.Params prm);
//-------------------------------------------------------------------
/// <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 virtual DataValue GetInterfaceProcessDataValue (ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaInterfaceProcess.Column)column.Id)
{
//-----------------------------------------------------------
// Category.
case SaInterfaceProcess.Column.Interface_Category_Desc:
{
SaInterfaceCategory category = (SaInterfaceCategory)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
value = new DataValue(interfaceCategories.GetCodeForType(category, category.ToString()));
break;
}
//-----------------------------------------------------------
// Type.
case SaInterfaceProcess.Column.Interface_Type_Desc:
{
String context = values.GetValue(GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column.Interface_Context).DataName).ToString();
SaInterfaceCategory category = (SaInterfaceCategory)StringUtil.ToInt(values.GetValue(GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column.Interface_Category).DataName).ToString());
short type = StringUtil.ToShort(values.GetValue(column.DataName).ToString());
String typeDesc = InterfaceConsole.GetInterfaceTypeDesc(context,category,type);
if (StringUtil.IsEmpty(typeDesc)) typeDesc = type.ToString();
value = new DataValue(typeDesc);
break;
}
//-----------------------------------------------------------
// Process Direction.
case SaInterfaceProcess.Column.ProcessDirection_Desc:
{
SaInterfaceProcessDirection direction = (SaInterfaceProcessDirection)StringUtil.ToInt(values.GetValue(column.DataName).ToString());
value = new DataValue(processDirections.GetCodeForType(direction, direction.ToString()));
break;
}
//-----------------------------------------------------------
// Processed & Batch DateTimes.
case SaInterfaceProcess.Column.ProcessAt:
case SaInterfaceProcess.Column.ProcessAt_Date:
case SaInterfaceProcess.Column.ProcessAt_Time:
{
// Skip if 'ProcessAt' db column exists.
if (ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt)) break;
int processDate = (int)values.GetValue(GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column.ProcessAt_Date).DataName).AsLong();
int processTime = (int)values.GetValue(GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column.ProcessAt_Time).DataName).AsLong();
DateTime processAt = DateUtil.Int32ToDate(processDate);
processAt = processAt.SetTime(DateUtil.Int32ToTime(processTime));
value = new DataValue(processAt);
break;
}
case SaInterfaceProcess.Column.BatchAt:
case SaInterfaceProcess.Column.BatchAt_Date:
case SaInterfaceProcess.Column.BatchAt_Time:
{
// Skip if 'BatchAt' db column exists.
if (ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt)) break;
int batchDate = (int)values.GetValue(GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column.BatchAt_Date).DataName).AsLong();
int batchTime = (int)values.GetValue(GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column.BatchAt_Time).DataName).AsLong();
DateTime batchAt = DateUtil.Int32ToDate(batchDate);
batchAt = batchAt.SetTime(DateUtil.Int32ToTime(batchTime));
value = new DataValue(batchAt);
break;
}
//-----------------------------------------------------------
// Elapsed time.
case SaInterfaceProcess.Column.Elapsed_Fmt:
{
int elapsedSecs = StringUtil.ToInt(values.GetValue(column.DataName).ToString());
value = new DataValue(DateUtil.FormatNumberOfSeconds(elapsedSecs));
break;
}
//-----------------------------------------------------------
// Status.
case SaInterfaceProcess.Column.Message_Status_Desc:
case SaInterfaceProcess.Column.Message_Status_Ind:
{
long messageCountErr = values.GetValue(colInterfaceProcess_MessageStatusErr).AsLong();
long messageCountWrn = values.GetValue(colInterfaceProcess_MessageStatusWrn).AsLong();
long messageCountInf = values.GetValue(colInterfaceProcess_MessageStatusInf).AsLong();
if (column.Id == (int)SaInterfaceProcess.Column.Message_Status_Desc)
{
String statusDesc = "";
if (messageCountErr > 0) statusDesc = messageLevels.GetCodeForType(SaMessageLevel.Error, "Error");
else if (messageCountWrn > 0) statusDesc = messageLevels.GetCodeForType(SaMessageLevel.Warning, "Warning");
else if (messageCountInf > 0) statusDesc = messageLevels.GetCodeForType(SaMessageLevel.Info, "Info");
value = new DataValue(statusDesc);
}
else if (column.Id == (int)SaInterfaceProcess.Column.Message_Status_Ind)
{
DataValue.TriStateType triState = DataValue.TriStateType.Unknown;
if (messageCountErr > 0) triState = DataValue.TriStateType.Red;
else if (messageCountWrn > 0) triState = DataValue.TriStateType.Amber;
else if (messageCountInf > 0) triState = DataValue.TriStateType.Green;
value = new DataValue(triState);
}
break;
}
//-----------------------------------------------------------
// Notes.
case SaInterfaceProcess.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
}
//-----------------------------------------------------------
// Status.
case SaInterfaceProcess.Column.Status_Desc:
case SaInterfaceProcess.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaInterfaceProcess.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SaInterfaceProcess.Column.Status_Ind)
value = new DataValue(SaInterfaceProcess.GetStatusTriState(status));
break;
}
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}