269 lines
9.7 KiB
C#
269 lines
9.7 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 RegionController
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Region data.
|
|
private class RegionData_List
|
|
{
|
|
public String Id { get; set; }
|
|
public String RegionTypeCode { get; set; }
|
|
public String RegionTypeDesc { get; set; }
|
|
public String CountryIso2Code { get; set; }
|
|
public String Name { get; set; }
|
|
public String ParentName { get; set; }
|
|
public String StatusCode { get; set; }
|
|
public String StatusDesc { get; set; }
|
|
}
|
|
private class RegionData_Full : RegionData_List
|
|
{
|
|
public int RegionIdParent { get; set; }
|
|
}
|
|
private void PopulateRegionResponseData(SaxRegion region, RegionData_List data)
|
|
{
|
|
data.Id = SysId.ToString(region.Id);
|
|
data.RegionTypeCode = RegionTypeCodes.GetCodeForType(region.RegionType);
|
|
data.RegionTypeDesc = RegionTypeCodes.GetDescForType(region.RegionType);
|
|
data.CountryIso2Code = region.CountryIso2Code;
|
|
data.Name = region.Name;
|
|
using (SaxRegion parentRegion = ReferenceMgr.GetRegionById(region.RegionIdParent))
|
|
{
|
|
if (parentRegion != null) data.ParentName = parentRegion.Name;
|
|
}
|
|
data.StatusCode = region.StatusCode;
|
|
data.StatusDesc = region.StatusDesc;
|
|
}
|
|
private void PopulateRegionResponseData(SaxRegion region, RegionData_Full data)
|
|
{
|
|
PopulateRegionResponseData(region, data as RegionData_List);
|
|
data.RegionIdParent = SysId.ToInt(region.RegionIdParent);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Region List ajax request.
|
|
//-------------------------------------------------------------------
|
|
private class AjaxResponse_RegionList : AjaxResponse_Data
|
|
{
|
|
// Construction.
|
|
public AjaxResponse_RegionList(SaxModel_Admin model) : base(model) { }
|
|
// Region list.
|
|
public List<RegionData_List> Regions { get; } = new List<RegionData_List>();
|
|
// Reference data.
|
|
public List<CodeDesc> Statuses { get; } = new List<CodeDesc>();
|
|
public String DefaultStatusCode { get; set; }
|
|
}
|
|
//-------------------------------------------------------------------
|
|
[HttpPost]
|
|
[Route("Region/Ajax/GetList")]
|
|
public IActionResult Ajax_GetList(Model_Region model)
|
|
{
|
|
String fn = GetType().Name + ".Ajax_GetList";
|
|
String messageTitle = Localiser["region.caption.regions"];
|
|
AjaxResponse_RegionList responseData = new AjaxResponse_RegionList(model);
|
|
|
|
// Validate session.
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Reference data - statuses.
|
|
foreach (SaStatus status in SaxRegion.ValidStatuses.FindAll(item => item != SaStatus.Deleted))
|
|
responseData.Statuses.Add(SacsSystem.GetStatusCode(status), Localiser.GetStatusCaption(status));
|
|
responseData.DefaultStatusCode = SacsSystem.GetStatusCode(SaxRegion.DefaultStatus);
|
|
|
|
// Item filter.
|
|
SaxRegion.Params prmRegion = new SaxRegion.Params();
|
|
prmRegion.RegionFilter = model.Filter.Region;
|
|
if (model.Filter.RegionTypeCode != null)
|
|
prmRegion.RegionType = model.FilterRegionType;
|
|
prmRegion.StatusCat = SaxRegion.StatusCat.NotDeleted;
|
|
model.DataItemTotal = (ulong)ReferenceMgr.GetRegionCount(prmRegion);
|
|
model.PopulatePagingTo(prmRegion.ResultsPaging);
|
|
|
|
// Item columns.
|
|
ColumnDfn colId = ReferenceMgr.GetRegionColumnDfn(SaxRegion.Column.Id);
|
|
ColumnDfn colType = ReferenceMgr.GetRegionColumnDfn(SaxRegion.Column.RegionType);
|
|
ColumnDfn colIso2Code = ReferenceMgr.GetRegionColumnDfn(SaxRegion.Column.CountryIso2Code);
|
|
ColumnDfn colName = ReferenceMgr.GetRegionColumnDfn(SaxRegion.Column.Name);
|
|
ColumnDfn colParentName = ReferenceMgr.GetRegionColumnDfn(SaxRegion.Column.Parent_Name);
|
|
ColumnDfn colStatus = ReferenceMgr.GetRegionColumnDfn(SaxRegion.Column.Status);
|
|
List<ColumnDfn> columns = new List<ColumnDfn>()
|
|
{
|
|
colId,
|
|
colType,
|
|
colIso2Code,
|
|
colName,
|
|
colParentName,
|
|
colStatus
|
|
};
|
|
|
|
// Sort order.
|
|
prmRegion.SortColumns.Add(colName);
|
|
|
|
// Query items.
|
|
model.DataItemCount = 0;
|
|
using (DbResultSet resultSet = ReferenceMgr.ExecuteRegionQuery(columns, prmRegion))
|
|
{
|
|
while (resultSet != null && resultSet.HasRows && resultSet.NextRecord())
|
|
{
|
|
model.DataItemCount++;
|
|
NamedValue.Map values = resultSet.GetRecordValues();
|
|
Sax.RegionType regionType = (Sax.RegionType)values.GetLong(colType.DataName);
|
|
RegionData_List regionData = new RegionData_List()
|
|
{
|
|
Id = values.GetString(colId.DataName),
|
|
RegionTypeCode = RegionTypeCodes.GetCodeForType(regionType),
|
|
RegionTypeDesc = RegionTypeCodes.GetDescForType(regionType),
|
|
CountryIso2Code = values.GetString(colIso2Code.DataName),
|
|
Name = values.GetString(colName.DataName),
|
|
ParentName = values.GetString(colParentName.DataName),
|
|
StatusCode = values.GetString(colStatus.DataName),
|
|
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
|
|
};
|
|
responseData.Regions.Add(regionData);
|
|
}
|
|
}
|
|
|
|
// Complete response.
|
|
responseData.SetPaging(model);
|
|
responseData.Success = true;
|
|
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Region ajax request.
|
|
//-------------------------------------------------------------------
|
|
private class AjaxResponse_Region : AjaxResponse_Data
|
|
{
|
|
// Construction.
|
|
public AjaxResponse_Region(SaxModel_Admin model) : base(model) { }
|
|
// Region details.
|
|
public RegionData_Full region { get; } = new RegionData_Full();
|
|
}
|
|
//-------------------------------------------------------------------
|
|
[HttpPost]
|
|
[Route("Region/Ajax/GetItem")]
|
|
public IActionResult Ajax_GetItem(Model_Region model)
|
|
{
|
|
String fn = GetType().Name + ".Ajax_GetItem";
|
|
String messageTitle = Localiser["region.caption.region"];
|
|
AjaxResponse_Region responseData = new AjaxResponse_Region(model);
|
|
|
|
// Validate session.
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Identify item.
|
|
SysId regionId = model.RegionId.ToSysId();
|
|
if (!SysId.IsValid(regionId))
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
|
|
|
|
// Retrieve item.
|
|
SaxRegion region = ReferenceMgr.GetRegionById(regionId);
|
|
if (region == null)
|
|
{
|
|
SaLogger.Warn(fn + " Failed to retrieve region for Id: '" + model.RegionId + "'");
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
|
|
}
|
|
|
|
// Construct response.
|
|
PopulateRegionResponseData(region, responseData.region);
|
|
|
|
// Complete response.
|
|
responseData.Success = true;
|
|
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Store Region ajax request.
|
|
//-------------------------------------------------------------------
|
|
[HttpPost]
|
|
[Route("Region/Ajax/StoreItem")]
|
|
public IActionResult Ajax_StoreItem(Model_Region model)
|
|
{
|
|
String fn = GetType().Name + ".Ajax_StoreItem";
|
|
String messageTitle = Localiser["region.caption.region"];
|
|
AjaxResponse_Region responseData = new AjaxResponse_Region(model);
|
|
|
|
// Validate session.
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Validate item properties.
|
|
model.ValidateRegionData(responseData);
|
|
if (responseData.HasControlErrors())
|
|
return Json(responseData);
|
|
|
|
// Retrieve existing item.
|
|
SysId regionId = model.RegionId.ToSysId();
|
|
SaxRegion region = ReferenceMgr.GetRegionById(regionId);
|
|
if (region == null && SysId.IsValid(regionId))
|
|
{
|
|
SaLogger.Warn(fn + " Failed to retrieve region for Id: '" + model.RegionId + "'");
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
|
|
}
|
|
|
|
// Create new item if required.
|
|
if (region == null)
|
|
region = ReferenceMgr.CreateRegion();
|
|
|
|
// Populate item properties.
|
|
if (model.RegionTypeCode != null)
|
|
region.RegionType = model.RegionType;
|
|
if (model.RegionCountryIso2Code != null)
|
|
region.CountryIso2Code = model.RegionCountryIso2Code;
|
|
if (model.RegionName != null)
|
|
region.Name = model.RegionName;
|
|
if (model.RegionIdParent != null)
|
|
region.RegionIdParent = model.RegionIdParent.ToSysId();
|
|
if (model.RegionStatusCode != null)
|
|
region.Status = model.RegionStatus;
|
|
|
|
// Store item.
|
|
if (!SysId.IsValid(region.Id))
|
|
{
|
|
if (!ReferenceMgr.InsertRegion(region, DbUpdateInfo))
|
|
{
|
|
SaLogger.Warn(fn + " Failed to insert region: " + ReferenceMgr.ErrorStateMessage);
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!ReferenceMgr.UpdateRegion(region, DbUpdateInfo))
|
|
{
|
|
SaLogger.Warn(fn + " Failed to update region [Id:" + SysId.ToString(region.Id) + "]: " + ReferenceMgr.ErrorStateMessage);
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage));
|
|
}
|
|
}
|
|
|
|
// Construct response.
|
|
PopulateRegionResponseData(region, responseData.region);
|
|
|
|
// Complete response.
|
|
responseData.Success = true;
|
|
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|