using System; using System.Collections.Generic; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Dbas; namespace Sarand.Net.Standard.Base.ItemOptions { //======================================================================= public abstract class SaItemOptionMgr : SacsItemMgr { //------------------------------------------------------------------- // Data members. private static readonly List itemOptionStatuses = new List(); //------------------------------------------------------------------- // Static initialisation. static SaItemOptionMgr () { // Item option statuses. itemOptionStatuses.Add(SaStatus.Current); itemOptionStatuses.Add(SaStatus.Deleted); } //------------------------------------------------------------------- // Construction. protected SaItemOptionMgr () { } //------------------------------------------------------------------- // Properties. public abstract bool DatabaseIsValid { get; } public abstract bool CanUpdateDatabase { get; } //******************************************************************* // I t e m O p t i o n s //******************************************************************* // Statuses. public static SaStatus ActiveItemOptionStatus { get { return SaStatus.Current; } } public static List ItemOptionStatuses { get { return itemOptionStatuses; } } //------------------------------------------------------------------- // Associated data. //------------------------------------------------------------------- // Retrieve individual item options. public abstract bool ItemOptionExists (SaItemOption itemOption); public abstract bool ItemOptionExists (ItemId itemId, String name, String context); public abstract SaItemOption GetItemOption (SaItemOption itemOption); public abstract SaItemOption GetItemOption (ItemId itemId, String name, String context); // Create Item Option. public abstract SaItemOption CreateItemOption (ItemId itemId, String name, String context); //------------------------------------------------------------------- // Validate Item Option. public bool IsValidItemOption (SaItemOption itemOption) { ClearErrorState(); if (itemOption == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidItemOptionData(itemOption.GetData(), new SaItemOption.ErrField()); } public virtual bool IsValidItemOptionData (SaItemOption.Data itemOptionData, SaItemOption.ErrField errField) { ClearErrorState(); if ((int)itemOptionData.ItemId.Type < 1) { errField.ItemType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.ItemTypeNotSpecified); } if (!SysId.IsValid(itemOptionData.ItemId.Id)) { errField.ItemId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.ItemIdNotSpecified); } if (!IsValidValue(itemOptionData.Name, "name", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name), true)) { errField.Name = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemOptionData.Context, "context", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context))) { errField.Context = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemOptionData.Value, "value", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value))) { errField.Value = SacsHierarchyItem.ValidValue.Invalid; return false; } // Common properties. if (!IsValidValue(itemOptionData.Notes, "notes", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!ItemOptionStatuses.Contains(itemOptionData.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } return true; } //------------------------------------------------------------------- // Database interface. public abstract bool InsertItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo); public virtual bool ItemOptionCanBeDeleted (SaItemOption itemOption) { ClearErrorState(); return true; } public abstract bool DeleteItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo); public abstract bool ClearItemOptionsForItem (ItemId itemId, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Item list. public abstract ColumnDfn GetItemOptionColumnDfn (SaItemOption.Column columnId, String caption = "", int width = 0); public abstract List GetItemOptionQueryFilter (SaItemOption.Params prm); public abstract long GetItemOptionCount (SaItemOption.Params prm); public abstract List GetItemOptionList (SaItemOption.Params prm); public abstract DbResultSet ExecuteItemOptionQuery (List columns, SaItemOption.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 DataValue GetItemOptionDataValue (ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaItemOption.Column)column.Id) { //----------------------------------------------------------- // Item type. case SaItemOption.Column.ItemType_Desc: { short itemType = (short)values.GetValue(column.DataName).AsLong(); value = new DataValue(itemType.ToString()); } break; //----------------------------------------------------------- // Notes. case SaItemOption.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- // Status. case SaItemOption.Column.Status_Desc: case SaItemOption.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaItemOption.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SaItemOption.Column.Status_Ind) value = new DataValue(SaItemOption.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }