using Microsoft.AspNetCore.Mvc; 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.Net.Core.Web.Admin.Models; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Saxonite.Net.Core.Web.Admin.Controllers { //======================================================================= partial class SportController { //------------------------------------------------------------------- // Sport data. private class SportData_List : AjaxResponse_Data.ItemData_Base { public String Name { get; set; } public String SpecialityLabelCode { get; set; } public String SpecialityLabelDesc { get; set; } } private class SportData_Full : SportData_List { } private void PopulateSportResponseData(SaxSport sport, SportData_List data) { data.Id = SysId.ToString(sport.Id); data.Name = sport.Name; data.SpecialityLabelCode = SportSpecialityLabelCodes.GetCodeForType(sport.SpecialityLabel); data.SpecialityLabelDesc = SportSpecialityLabelCodes.GetDescForType(sport.SpecialityLabel); data.StatusCode = sport.StatusCode; data.StatusDesc = sport.StatusDesc; } private void PopulateSportResponseData(SaxSport sport, SportData_Full data) { PopulateSportResponseData(sport, data as SportData_List); } //------------------------------------------------------------------- // Get Sport List ajax request. //------------------------------------------------------------------- private class AjaxResponse_SportList : AjaxResponse_Data { // Construction. public AjaxResponse_SportList(SaxModel_Admin model) : base(model) { } // Sport list. public List Sports { get; } = new List(); // Reference data. public List Statuses { get; } = new List(); public String DefaultStatusCode { get; set; } } //------------------------------------------------------------------- [HttpPost] [Route("Sport/Ajax/GetList")] public IActionResult Ajax_GetList(Model_Sport model) { String fn = GetType().Name + ".Ajax_GetList"; String messageTitle = Localiser["sport.caption.sports"]; AjaxResponse_SportList responseData = new AjaxResponse_SportList(model); // Validate session. if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); // Reference data - statuses. foreach (SaStatus status in SaxSport.ValidStatuses.FindAll(item => item != SaStatus.Deleted)) responseData.Statuses.Add(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status)); responseData.DefaultStatusCode = SacsSystem.GetStatusCode(SaxSport.DefaultStatus); // Item filter. SaxSport.Params prmSport = new SaxSport.Params(); prmSport.SportFilter = model.Filter.Sport; prmSport.StatusCat = SaxSport.StatusCat.NotDeleted; model.Paging.ItemTotal = (ulong)ReferenceMgr.GetSportCount(prmSport); model.PopulatePagingTo(prmSport.ResultsPaging); // Item columns. ColumnDfn colId = ReferenceMgr.GetSportColumnDfn(SaxSport.Column.Id); ColumnDfn colName = ReferenceMgr.GetSportColumnDfn(SaxSport.Column.Name); ColumnDfn colSpecialityLabel = ReferenceMgr.GetSportColumnDfn(SaxSport.Column.SpecialityLabel); ColumnDfn colStatus = ReferenceMgr.GetSportColumnDfn(SaxSport.Column.Status); List columns = new List() { colId, colName, colSpecialityLabel, colStatus }; // Sort order. prmSport.SortColumns.Add(colName); // Query items. using (DbResultSet resultSet = ReferenceMgr.ExecuteSportQuery(columns, prmSport)) { while (resultSet != null && resultSet.HasRows && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); Sax.SportSpecialityLabel specialityLabel = (Sax.SportSpecialityLabel)values.GetLong(colSpecialityLabel.DataName); SportData_List sportData = new SportData_List() { Id = values.GetString(colId.DataName), Name = values.GetString(colName.DataName), SpecialityLabelCode = SportSpecialityLabelCodes.GetCodeForType(specialityLabel), SpecialityLabelDesc = SportSpecialityLabelCodes.GetDescForType(specialityLabel), StatusCode = values.GetString(colStatus.DataName), StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName)) }; responseData.Sports.Add(sportData); } } if (model.Paging.IsPaged) model.Paging.ItemCount = (ushort)responseData.Sports.Count; // Complete response. responseData.SetPaging(model); responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- // Get Sport ajax request. //------------------------------------------------------------------- private class AjaxResponse_Sport : AjaxResponse_Data { // Construction. public AjaxResponse_Sport(SaxModel_Admin model) : base(model) { } // Sport details. public SportData_Full sport { get; } = new SportData_Full(); } //------------------------------------------------------------------- [HttpPost] [Route("Sport/Ajax/GetItem")] public IActionResult Ajax_GetItem(Model_Sport model) { String fn = GetType().Name + ".Ajax_GetItem"; String messageTitle = Localiser["sport.caption.sport"]; AjaxResponse_Sport responseData = new AjaxResponse_Sport(model); // Validate session. if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); // Identify item. SysId sportId = model.SportId.ToSysId(); if (!SysId.IsValid(sportId)) return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); // Retrieve item. SaxSport sport = ReferenceMgr.GetSportById(sportId); if (sport == null) { SaLogger.Warn(fn + " Failed to retrieve sport for Id: '" + model.SportId + "'"); return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); } // Construct response. PopulateSportResponseData(sport, responseData.sport); // Complete response. responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- // Store Sport ajax request. //------------------------------------------------------------------- [HttpPost] [Route("Sport/Ajax/StoreItem")] public IActionResult Ajax_StoreItem(Model_Sport model) { String fn = GetType().Name + ".Ajax_StoreItem"; String messageTitle = Localiser["sport.caption.sport"]; AjaxResponse_Sport responseData = new AjaxResponse_Sport(model); // Validate session. if (!ValidUserSession) return GetAjaxResult_InvalidSession(responseData); // Validate item properties. model.ValidateSportData(responseData); if (responseData.HasControlErrors()) return Json(responseData); // Retrieve existing item. SysId sportId = model.SportId.ToSysId(); SaxSport sport = ReferenceMgr.GetSportById(sportId); if (sport == null && SysId.IsValid(sportId)) { SaLogger.Warn(fn + " Failed to retrieve sport for Id: '" + model.SportId + "'"); return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); } // Create new item if required. if (sport == null) sport = ReferenceMgr.CreateSport(); // Populate item properties. if (model.SportName != null) sport.Name = model.SportName; if (model.SportSpecialityLabelCode != null) sport.SpecialityLabel = model.SportSpecialityLabel; if (model.SportStatusCode != null) sport.Status = model.SportStatus; // Store item. if (!SysId.IsValid(sport.Id)) { if (!ReferenceMgr.InsertSport(sport, DbUpdateInfo)) { SaLogger.Warn(fn + " Failed to insert sport: " + ReferenceMgr.ErrorStateMessage); return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage)); } } else { if (!ReferenceMgr.UpdateSport(sport, DbUpdateInfo)) { SaLogger.Warn(fn + " Failed to update sport [Id:" + SysId.ToString(sport.Id) + "]: " + ReferenceMgr.ErrorStateMessage); return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage)); } } // Construct response. PopulateSportResponseData(sport, responseData.sport); // Complete response. responseData.Success = true; return Json(responseData); } //------------------------------------------------------------------- } //======================================================================= }