using System; using System.Collections.Generic; 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; namespace Sarand.Net.Standard.Base.Interfaces { //======================================================================= public partial class SaInterfaceMgr { //******************************************************************* // I n t e r f a c e D a t a I t e m s //******************************************************************* // Create Interface Data Item. public abstract SaInterfaceDataItem CreateInterfaceDataItem (SysId interfaceId, SaInterfaceProcessDirection direction, ItemId itemId, String externalReference); // Retrieve individual interface data items. public abstract bool InterfaceDataItemExistsById (SysId id); public abstract SaInterfaceDataItem GetInterfaceDataItemById (SysId id); public abstract SaInterfaceDataItem GetInterfaceDataItem (SaInterfaceDataItem.Params prm); //------------------------------------------------------------------- // Validate Interface Data Item. public bool IsValidInterfaceDataItem (SaInterfaceDataItem interfaceDataItem) { ClearErrorState(); if (interfaceDataItem == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidInterfaceDataItemData(interfaceDataItem.GetData(), new SaInterfaceDataItem.ErrField()); } public virtual bool IsValidInterfaceDataItemData (SaInterfaceDataItem.Data data, SaInterfaceDataItem.ErrField errField) { ClearErrorState(); // Interface. 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"); } // Data item. if (errField.ItemType != SacsHierarchyItem.ValidValue.Ignore && (data.ItemId == null || data.ItemId.Type < 1)) { errField.ItemType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid item type"); } if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore && (data.ItemId == null || !SysId.IsValid(data.ItemId.Id))) { errField.ItemId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid item id"); } if (errField.ExternalReference != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ExternalReference, "reference", (long)SaInterfaceDbDfn.GetColTextLen(SaInterfaceDbDfn.ColumnIdx.SaInterfaceDataItem_ExternalRef))) { errField.ExternalReference = SacsHierarchyItem.ValidValue.Invalid; return false; } // Process status. if (errField.ProcessStatus != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(SacsSystem.GetStatusCode(data.ProcessStatus), "process status", (long)SaInterfaceDbDfn.GetColTextLen(SaInterfaceDbDfn.ColumnIdx.SaInterfaceDataItem_ProcessStatus), true)) { errField.ProcessStatus = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaInterfaceDataItem.ValidProcessStatuses.Contains(data.ProcessStatus)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid process status"); } } // Item status. if (errField.ItemStatus != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(SacsSystem.GetStatusCode(data.ItemStatus), "item status", (long)SaInterfaceDbDfn.GetColTextLen(SaInterfaceDbDfn.ColumnIdx.SaInterfaceDataItem_ItemStatus), true)) { errField.ItemStatus = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaInterfaceDataItem.ValidItemStatuses.Contains(data.ItemStatus)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid item status"); } } // Common properties. if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaInterfaceDbDfn.GetColTextLen(SaInterfaceDbDfn.ColumnIdx.SaInterfaceDataItem_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } // NB No Status on Interface Data Item. return true; } //------------------------------------------------------------------- // Interface Data Item database interface. public abstract bool InsertInterfaceDataItem (SaInterfaceDataItem interfaceDataItem, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateInterfaceDataItem (SaInterfaceDataItem interfaceDataItem, DbUpdateInfo dbUpdateInfo); public virtual bool InterfaceDataItemCanBeDeleted (SaInterfaceDataItem interfaceDataItem) { ClearErrorState(); return true; } public abstract bool DeleteInterfaceDataItem (SaInterfaceDataItem interfaceDataItem, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Interface Data Item list. public abstract ColumnDfn GetInterfaceDataItemColumnDfn (SaInterfaceDataItem.Column columnId, String caption = "", int width = 0); public abstract List GetInterfaceDataItemQueryFilter (SaInterfaceDataItem.Params prm); public abstract long GetInterfaceDataItemCount (SaInterfaceDataItem.Params prm); public abstract List GetInterfaceDataItemList (SaInterfaceDataItem.Params prm); public abstract DbResultSet ExecuteInterfaceDataItemQuery (List columns, SaInterfaceDataItem.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 GetInterfaceDataItemDataValue (ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaInterfaceDataItem.Column)column.Id) { //----------------------------------------------------------- // Category. case SaInterfaceDataItem.Column.Direction_Desc: { SaInterfaceProcessDirection direction = (SaInterfaceProcessDirection)StringUtil.ToInt(values.GetValue(column.DataName).ToString()); value = new DataValue(ProcessDirections.GetCodeForType(direction, direction.ToString())); } break; //----------------------------------------------------------- // Item Type. case SaInterfaceDataItem.Column.ItemType_Desc: { short itemType = StringUtil.ToShort(values.GetValue(column.DataName).ToString()); String itemTypeDesc = InterfaceConsole.GetItemTypeDesc(itemType); value = new DataValue(itemTypeDesc); } break; //----------------------------------------------------------- // Item Type. case SaInterfaceDataItem.Column.Item_Caption: { short itemType = StringUtil.ToShort(values.GetValue(GetInterfaceProcessMessageColumnDfn(SaInterfaceProcessMessage.Column.ItemType).DataName).ToString()); SysId itemId = new SysId(StringUtil.ToInt(values.GetValue(column.DataName).ToString())); String itemTypeDesc = InterfaceConsole.GetItemCaption(new ItemId(itemType,itemId)); value = new DataValue(itemTypeDesc); } break; //----------------------------------------------------------- // Process Status. case SaInterfaceDataItem.Column.ProcessStatus_Desc: case SaInterfaceDataItem.Column.ProcessStatus_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaInterfaceDataItem.Column.ProcessStatus_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SaInterfaceDataItem.Column.ProcessStatus_Ind) value = new DataValue(SaInterfaceDataItem.GetProcessStatusTriState(status)); } break; //----------------------------------------------------------- // Item Status. case SaInterfaceDataItem.Column.ItemStatus_Desc: case SaInterfaceDataItem.Column.ItemStatus_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaInterfaceDataItem.Column.ItemStatus_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SaInterfaceDataItem.Column.ItemStatus_Ind) value = new DataValue(SaInterfaceDataItem.GetItemStatusTriState(status)); } break; //----------------------------------------------------------- // Notes. case SaInterfaceDataItem.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }