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. public 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; } } public class RegionData_Full : RegionData_List { } 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; data.StatusCode = region.StatusCode; data.StatusDesc = region.StatusDesc; } private void PopulateRegionResponseData(SaxRegion region, RegionData_Full data) { PopulateRegionResponseData(region, data as RegionData_List); } //------------------------------------------------------------------- // Get Region List ajax request. //------------------------------------------------------------------- public class AjaxResponse_RegionList : AjaxResponse_Data { public List Regions { get; } = new List(); // Reference data. public List Statuses { get; } = new List(); 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(); // 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 columns = new List() { 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. //------------------------------------------------------------------- public class AjaxResponse_Region : AjaxResponse_Data { 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(); // 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(); // 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.RegionCountryIso2Code != null) region.CountryIso2Code = model.RegionCountryIso2Code; if (model.RegionName != null) region.Name = model.RegionName; 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); } //------------------------------------------------------------------- } //======================================================================= }