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 Saxonite.Base.App; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Text; namespace Saxonite.Net.Standard.Base.Mgr { //======================================================================= partial class SaxActivityMgr { //******************************************************************* // Activity Mgr - Article //******************************************************************* // Utilities. //------------------------------------------------------------------- // Create item. public abstract SaxArticle CreateArticle(SysId userAccountIdAuthor, SysId organisationId); //------------------------------------------------------------------- // Item exists. public bool ArticleExistsById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return false; SaxArticle.Params prmArticle = new SaxArticle.Params(); prmArticle.IdsIncluded.Add(id); prmArticle.StatusCat = SaxArticle.StatusCat.Any; return GetArticleCount(prmArticle) == 1; } //------------------------------------------------------------------- // Retrieve individual items. public abstract SaxArticle GetArticle(SaxArticle.Params prmArticle); public SaxArticle GetArticleById(SysId id) { ClearErrorState(); if (!SysId.IsValid(id)) return null; SaxArticle.Params prmArticle = new SaxArticle.Params(); prmArticle.IdsIncluded.Add(id); prmArticle.StatusCat = SaxArticle.StatusCat.Any; return GetArticle(prmArticle); } //------------------------------------------------------------------- // Validate item data. public bool IsValidArticle(SaxArticle article) { ClearErrorState(); if (article == null) return SetErrorState(ErrorMessage.ItemNotSpecified); return IsValidArticleData(article.GetData(), new SaxArticle.ErrField()); } public virtual bool IsValidArticleData(SaxArticle.Data data, SaxArticle.ErrField errField) { ClearErrorState(); // User Account - Author. if (errField.UserAccountIdAuthor != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.UserAccountIdAuthor)) { errField.UserAccountIdAuthor = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Author must be specified"); } // Primary Sport. if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.SportIdPrimary)) { errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Sport must be specified"); } // Primary Region. if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && !SysId.IsValid(data.RegionIdPrimary)) { errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Region must be specified"); } // Headline. if (errField.Headline != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Headline, "headline", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_Headline), true)) { errField.Headline = SacsHierarchyItem.ValidValue.Invalid; return false; } // Summary. if (errField.Summary != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Summary, "summary", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_Summary), true)) { errField.Summary = SacsHierarchyItem.ValidValue.Invalid; return false; } // Common properties. if (errField.Notes != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Notes, "notes", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_Notes))) { errField.Notes = SacsHierarchyItem.ValidValue.Invalid; return false; } if (errField.Status != SacsHierarchyItem.ValidValue.Ignore) { if (!IsValidValue(data.StatusCode, "status", (long)SaxDbDfn_Core.GetColTextLen(SaxDbDfn_Core.ColumnIdx.Article_Status), true, true)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return false; } if (!SaxArticle.ValidStatuses.Contains(data.Status)) { errField.Status = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState(ErrorMessage.InvalidStatus); } } //--------------------------------------------------------------- // Associated data - ignore for deleted items. if (!data.IsStatusDeleted) { // User Account - Author. if (errField.UserAccountIdAuthor != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.UserAccountIdAuthor)) { if (SysId.IsValid(data.OrganisationId)) { // Validate user. if (!AccountMgr.UserAccountExistsById(data.UserAccountIdAuthor)) { errField.UserAccountIdAuthor = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid Author specified"); } } else { // Organisation not specified - user must be a journalist. SaxUserAccount.Params prmUserAccount = new SaxUserAccount.Params(); prmUserAccount.IdsIncluded.Add(data.UserAccountIdAuthor); prmUserAccount.ActiveRoles.Add(App.Sax.UserRole.Journalist); prmUserAccount.StatusCat = SaxUserAccount.StatusCat.NotDeleted; if (AccountMgr.GetUserAccountCount(prmUserAccount) < 1) { errField.UserAccountIdAuthor = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("User must be active Journalist"); } } } // Organisation. if (errField.OrganisationId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.OrganisationId)) { // Validate organisation. if (!AccountMgr.OrganisationExistsById(data.OrganisationId)) { errField.OrganisationId = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid Organisation specified"); } } // Primary Sport. if (errField.SportIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.SportIdPrimary)) { SaxSport.Params prmSport = new SaxSport.Params(); prmSport.IdsIncluded.Add(data.SportIdPrimary); prmSport.StatusCat = SaxSport.StatusCat.NotDeleted; if (ReferenceMgr.GetSportCount(prmSport) < 1) { errField.SportIdPrimary = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid sport specified"); } } // Primary Region. if (errField.RegionIdPrimary != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdPrimary)) { SaxRegion.Params prmRegion = new SaxRegion.Params(); prmRegion.IdsIncluded.Add(data.RegionIdPrimary); prmRegion.StatusCat = SaxRegion.StatusCat.NotDeleted; if (ReferenceMgr.GetRegionCount(prmRegion) < 1) { errField.RegionIdPrimary = SacsHierarchyItem.ValidValue.Invalid; return SetErrorState("Invalid region specified"); } } } //--------------------------------------------------------------- return true; } //------------------------------------------------------------------- // Article database interface. public abstract bool InsertArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo); public abstract bool UpdateArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo); public virtual bool ArticleCanBeDeleted(SaxArticle article) { ClearErrorState(); return true; } public abstract bool DeleteArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo); //------------------------------------------------------------------- // Article list: public abstract ColumnDfn GetArticleColumnDfn(SaxArticle.Column columnId, String caption = "", int width = 0); public abstract List GetArticleQueryFilter(SaxArticle.Params prmArticle); public abstract long GetArticleCount(SaxArticle.Params prmArticle); public abstract List GetArticleList(SaxArticle.Params prmArticle); public abstract DbResultSet ExecuteArticleQuery(List columns, SaxArticle.Params prmArticle); //------------------------------------------------------------------- /// /// 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 GetArticleDataValue(ColumnDfn column, NamedValue.Map values) { DataValue value = new DataValue(); switch ((SaxArticle.Column)column.Id) { //----------------------------------------------------------- // Author display name. case SaxArticle.Column.Author_DisplayName: { String userTitle = values.GetValue(GetArticleColumnDfn(SaxArticle.Column.Author_Title).DataName).ToString(); String userFirstName = values.GetValue(GetArticleColumnDfn(SaxArticle.Column.Author_FirstName).DataName).ToString(); String userLastName = values.GetValue(GetArticleColumnDfn(SaxArticle.Column.Author_LastName).DataName).ToString(); value = new DataValue(SaxUserAccount.GetDisplayName(userTitle, userFirstName, userLastName)); } break; //----------------------------------------------------------- // Summary - limit to 200 chars. case SaxArticle.Column.Summary: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- // Notes - limit to 200 chars. case SaxArticle.Column.Notes: { value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200)); } break; //----------------------------------------------------------- // Status. case SaxArticle.Column.Status_Desc: case SaxArticle.Column.Status_Ind: { String statusCode = values.GetValue(column.DataName).ToString(); SaStatus status = SacsSystem.GetStatusForCode(statusCode); if (column.Id == (int)SaxArticle.Column.Status_Desc) value = new DataValue(SacsSystem.GetStatusDesc(status)); else if (column.Id == (int)SaxArticle.Column.Status_Ind) value = new DataValue(SaxArticle.GetStatusTriState(status)); } break; //----------------------------------------------------------- default: value = values.GetValue(column.DataName); break; } return value; } //------------------------------------------------------------------- } //======================================================================= }