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 System; using System.Collections.Generic; using System.Text; namespace Sarand.Net.Standard.Base.ItemData { //======================================================================= public abstract class SaItemDataMgr : SacsItemMgr { //------------------------------------------------------------------- // Definitions. //------------------------------------------------------------------- // Data members. //------------------------------------------------------------------- // Static initialisation. static SaItemDataMgr () { } //------------------------------------------------------------------- // Construction. protected SaItemDataMgr () { } //------------------------------------------------------------------- // Properties. public abstract bool DatabaseIsValid { get; } public abstract bool CanUpdateDatabase { get; } //******************************************************************* // I t e m D a t a //******************************************************************* // Utilities. public abstract bool ItemHasData (ItemId itemId, bool ignoreDeleted = true); public abstract bool ItemHasData (ItemId itemId, String dataType, bool ignoreDeleted = true); //------------------------------------------------------------------- // Retrieve individual item data entries. public abstract bool ItemDataExists (SysId id); public abstract bool ItemDataExists (ItemId itemId, String dataType, bool ignoreDeleted = true); public abstract SaItemData GetItemData (SysId id); public abstract SaItemData GetItemData (ItemId itemId, String dataType); public abstract SaItemData GetItemData (SaItemData.Params prmItemData); // Create Item Data. public abstract SaItemData CreateItemData (ItemId itemId); //------------------------------------------------------------------- // Validate Item Data. public bool IsValidItemData (SaItemData itemData) { ClearErrorState(); if (itemData == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidItemDataData(itemData.GetData(), new SaItemData.ErrField()); } public virtual bool IsValidItemDataData (SaItemData.Data itemDataData, SaItemData.ErrField errField) { ClearErrorState(); if ((int)itemDataData.ItemId.Type < 1) { errField.ItemType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Item type must be supplied"); } if (!SysId.IsValid(itemDataData.ItemId.Id)) { errField.ItemId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Item Id must be supplied"); } if (!IsValidValue(itemDataData.DataType, "Data type", (long)SaItemDataDbDfn.GetColTextLen(SaItemDataDbDfn.ColumnIdx.SaItemData_DataType), true)) { errField.DataType = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemDataData.ItemData, "Item data", (long)SaItemDataDbDfn.GetColTextLen(SaItemDataDbDfn.ColumnIdx.SaItemData_ItemData))) { errField.ItemData = SacsHierarchyItem.ValidValue.Invalid; return false; } // Common properties. if (!IsValidValue(itemDataData.Notes, "notes", (long)SaItemDataDbDfn.GetColTextLen(SaItemDataDbDfn.ColumnIdx.SaItemData_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaItemData.ValidStatuses.Contains(itemDataData.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } return true; } //------------------------------------------------------------------- // Item Data database interface. public abstract bool InsertItemData (SaItemData itemData, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateItemData (SaItemData itemData, DbUpdateInfo dbUpdateInfo); public virtual bool ItemDataCanBeDeleted (SaItemData itemData) { ClearErrorState(); if (!SysId.IsValid(itemData.Id)) return SetErrorState(ErrorMessage.InvalidItemId); return true; } public abstract bool DeleteItemData (SaItemData itemData, DbUpdateInfo dbUpdateInfo); public abstract bool ClearItemData (ItemId itemId, DbUpdateInfo dbUpdateInfo); public abstract bool ClearItemData (ItemId itemId, String dataType, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Item Data list. public abstract ColumnDfn GetItemDataColumnDfn (SaItemData.Column columnId, String caption = "", int width = 0); public abstract List GetItemDataQueryFilter (SaItemData.Params prm); public abstract long GetItemDataCount (SaItemData.Params prm); public abstract List GetItemDataList (SaItemData.Params prm); public abstract DbResultSet ExecuteItemDataQuery (List columns, SaItemData.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 GetItemDataDataValue (ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaItemData.Column)column.Id) { //----------------------------------------------------------- // Item type. case SaItemData.Column.ItemType_Desc: { short itemType = (short)values.GetValue(column.DataName).AsLong(); value = new DataValue(itemType.ToString()); } break; //----------------------------------------------------------- // Notes. case SaItemData.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- // Status. case SaItemData.Column.Status_Desc: case SaItemData.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaItemData.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SaItemData.Column.Status_Ind) value = new DataValue(SaItemData.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }