237 lines
7.9 KiB
C#
237 lines
7.9 KiB
C#
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
|
|
{
|
|
public String Id { get; set; }
|
|
public String Name { get; set; }
|
|
public String StatusCode { get; set; }
|
|
public String StatusDesc { 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.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<SportData_List> Sports { get; } = new List<SportData_List>();
|
|
// Reference data.
|
|
public List<CodeDesc> Statuses { get; } = new List<CodeDesc>();
|
|
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.DataItemTotal = (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 colStatus = ReferenceMgr.GetSportColumnDfn(SaxSport.Column.Status);
|
|
List<ColumnDfn> columns = new List<ColumnDfn>()
|
|
{
|
|
colId,
|
|
colName,
|
|
colStatus
|
|
};
|
|
|
|
// Sort order.
|
|
prmSport.SortColumns.Add(colName);
|
|
|
|
// Query items.
|
|
model.DataItemCount = 0;
|
|
using (DbResultSet resultSet = ReferenceMgr.ExecuteSportQuery(columns, prmSport))
|
|
{
|
|
while (resultSet != null && resultSet.HasRows && resultSet.NextRecord())
|
|
{
|
|
model.DataItemCount++;
|
|
NamedValue.Map values = resultSet.GetRecordValues();
|
|
SportData_List sportData = new SportData_List()
|
|
{
|
|
Id = values.GetString(colId.DataName),
|
|
Name = values.GetString(colName.DataName),
|
|
StatusCode = values.GetString(colStatus.DataName),
|
|
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
|
|
};
|
|
responseData.Sports.Add(sportData);
|
|
}
|
|
}
|
|
|
|
// 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.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);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|