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 interfaceProcessIds, DbUpdateInfo dbUpdateInfo); public abstract bool ClearInterfaceProcessDataItems (List 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 GetInterfaceProcessQueryFilter (SaInterfaceProcess.Params prm); public abstract long GetInterfaceProcessCount (SaInterfaceProcess.Params prm); public abstract List GetInterfaceProcessList (SaInterfaceProcess.Params prm); public abstract DbResultSet ExecuteInterfaceProcessQuery (List columns, SaInterfaceProcess.Params prm); //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// 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; } //------------------------------------------------------------------- } //======================================================================= }