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.ItemDocs { //======================================================================= public abstract class SaItemDocMgr : SacsItemMgr { //------------------------------------------------------------------- // Definitions. //------------------------------------------------------------------- // Data members. //------------------------------------------------------------------- // Static initialisation. static SaItemDocMgr () { } //------------------------------------------------------------------- // Construction. protected SaItemDocMgr () { } //------------------------------------------------------------------- // Properties. public abstract bool DatabaseIsValid { get; } public abstract bool CanUpdateDatabase { get; } //******************************************************************* // I t e m D o c s //******************************************************************* // Utilities. public abstract bool ItemHasDocs (ItemId itemId, bool ignoreDeleted = true); public abstract bool ItemHasDocs (ItemId itemId, SaItemDocConsole.Category category, bool ignoreDeleted = true); //------------------------------------------------------------------- // Retrieve individual item data entries. public abstract bool ItemDocExists (SysId id); public abstract SaItemDoc GetItemDoc (SysId id); public abstract SaItemDoc GetItemDoc (SaItemDoc.Params prmItemDoc); // Create Item Data. public abstract SaItemDoc CreateItemDoc (ItemId itemId, SaItemDocConsole.Category category); //------------------------------------------------------------------- // Validate Item Data. public bool IsValidItemDoc (SaItemDoc itemDoc) { ClearErrorState(); if (itemDoc == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidItemDocData(itemDoc.GetData(), new SaItemDoc.ErrField()); } public virtual bool IsValidItemDocData (SaItemDoc.Data itemDocData, SaItemDoc.ErrField errField) { ClearErrorState(); if ((int)itemDocData.ItemId.Type < 1) { errField.ItemType = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Item type must be supplied"); } if (!SysId.IsValid(itemDocData.ItemId.Id)) { errField.ItemId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Item Id must be supplied"); } if ((int)itemDocData.Category < 1) { errField.Category = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Category must be supplied"); } if (!IsValidValue(itemDocData.DocType, "Doc type", (long)SaItemDocsDbDfn.GetColTextLen(SaItemDocsDbDfn.ColumnIdx.SaItemDoc_Type), true)) { errField.DocType = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemDocData.DescBrief, "Desciption", (long)SaItemDocsDbDfn.GetColTextLen(SaItemDocsDbDfn.ColumnIdx.SaItemDoc_DescBrief))) { errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemDocData.Folder, "Folder", (long)SaItemDocsDbDfn.GetColTextLen(SaItemDocsDbDfn.ColumnIdx.SaItemDoc_Folder))) { errField.Folder = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemDocData.Filename, "Filename", (long)SaItemDocsDbDfn.GetColTextLen(SaItemDocsDbDfn.ColumnIdx.SaItemDoc_Filename), true)) { errField.Filename = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!IsValidValue(itemDocData.MimeType, "Mime", (long)SaItemDocsDbDfn.GetColTextLen(SaItemDocsDbDfn.ColumnIdx.SaItemDoc_MimeType))) { errField.MimeType = SacsHierarchyItem.ValidValue.Invalid; return false; } // Common properties. if (!IsValidValue(itemDocData.Notes, "notes", (long)SaItemDocsDbDfn.GetColTextLen(SaItemDocsDbDfn.ColumnIdx.SaItemDoc_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaItemDoc.ValidStatuses.Contains(itemDocData.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } return true; } //------------------------------------------------------------------- // Item Data database interface. public abstract bool InsertItemDoc (SaItemDoc itemDoc, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateItemDoc (SaItemDoc itemDoc, DbUpdateInfo dbUpdateInfo); public virtual bool ItemDocCanBeDeleted (SaItemDoc itemDoc) { ClearErrorState(); if (!SysId.IsValid(itemDoc.Id)) return SetErrorState(ErrorMessage.InvalidItemId); return true; } public abstract bool DeleteItemDoc (SaItemDoc itemDoc, DbUpdateInfo dbUpdateInfo); public abstract bool ClearItemDocs (ItemId itemId, DbUpdateInfo dbUpdateInfo); public abstract bool ClearItemDocs (ItemId itemId, SaItemDocConsole.Category category, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Item Data list. public abstract ColumnDfn GetItemDocColumnDfn (SaItemDoc.Column columnId, String caption = "", int width = 0); public abstract List GetItemDocQueryFilter (SaItemDoc.Params prm); public abstract long GetItemDocCount (SaItemDoc.Params prm); public abstract List GetItemDocList (SaItemDoc.Params prm); public abstract DbResultSet ExecuteItemDocQuery (List columns, SaItemDoc.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 GetItemDocDataValue (ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaItemDoc.Column)column.Id) { //----------------------------------------------------------- // Item type. case SaItemDoc.Column.ItemType_Desc: { short itemType = (short)values.GetValue(column.DataName).AsLong(); value = new DataValue(itemType.ToString()); } break; //----------------------------------------------------------- // Category. case SaItemDoc.Column.Category_Desc: { short category = (short)values.GetValue(column.DataName).AsLong(); value = new DataValue(category.ToString()); } break; //----------------------------------------------------------- // Document type. case SaItemDoc.Column.DocType_Desc: { short docType = (short)values.GetValue(column.DataName).AsLong(); value = new DataValue(docType.ToString()); } break; //----------------------------------------------------------- // Notes. case SaItemDoc.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- // Status. case SaItemDoc.Column.Status_Desc: case SaItemDoc.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaItemDoc.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode)); else if (column.Id == (int)SaItemDoc.Column.Status_Ind) value = new DataValue(SaItemDoc.GetStatusTriState(status)); } break; //----------------------------------------------------------- } return value; } //------------------------------------------------------------------- } //======================================================================= }