Files
Saxonite/SaxoniteCoreWebAdmin/Admin/Controllers/HomeController-Ajax-AwaitingActivation.cs
T
2021-10-14 21:08:07 +01:00

117 lines
4.3 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
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 Sarand.Net.Standard.Dbas.Data;
using Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Saxonite.Net.Core.Web.Admin.Controllers
{
//=======================================================================
// Home - Ajax - Awaiting Activation controller
//=======================================================================
partial class HomeController
{
//-------------------------------------------------------------------
// Items Awaiting Activation data.
private class ActivationItemData
{
public String ItemType { get; set; }
public String ItemTypeDesc { get; set; }
public String ItemTypeDescPlural { get; set; }
public long ItemCount { get; set; }
public String ViewLink { get; set; }
}
//-------------------------------------------------------------------
// Get Items Awaiting Activation ajax request.
//-------------------------------------------------------------------
private class AjaxResponse_ItemsAwaitingActivation : AjaxResponse_Data
{
// Construction.
public AjaxResponse_ItemsAwaitingActivation(SaxModel_Admin model) : base(model) { }
// Table list.
public List<ActivationItemData> Items { get; } = new List<ActivationItemData>();
}
//-------------------------------------------------------------------
[HttpPost]
[Route("Home/Ajax/GetItemsAwaitingActivation")]
public IActionResult Ajax_GetItemsAwaitingActivation(Model_Sport model)
{
String fn = GetType().Name + ".Ajax_GetItemsAwaitingActivation";
String messageTitle = Localiser["home.caption.application"];
AjaxResponse_ItemsAwaitingActivation responseData = new AjaxResponse_ItemsAwaitingActivation(model);
// Validate session.
if (!ValidUserSession)
return GetAjaxResult_InvalidSession(responseData);
// Core Database connection.
ISacsDatabase db = SaxGlobals.App.GetCoreDatabase(SessionContext);
// Query to count items awaiting activation.
Dictionary<String, int> tableRowCounts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
List<String> query = new List<string>()
{
// User accounts.
"SELECT",
"ItemType = '" + DbQuery.FormatForCondition(nameof(Sax.DataItemType.UserAccount)) + "',",
"ItemCount = Count(*)",
"FROM UserAccount ua",
"WHERE ua.Status = 'AWA'",
// Organisations.
"UNION SELECT",
"ItemType = '" + DbQuery.FormatForCondition(nameof(Sax.DataItemType.Organisation)) + "',",
"ItemCount = Count(*)",
"FROM Organisation org",
"WHERE org.Status = 'AWA'",
};
using (DbResultSet dbResultSet = DbResultSet_DataReader.ExecuteQuery(db, query.Concat("\n")))
{
while (dbResultSet != null && dbResultSet.NextRecord())
{
Sax.DataItemType itemType = EnumUtil.ParseEnum(dbResultSet.GetRecordValues().GetValue("ItemType").ToString(), Sax.DataItemType.Unknown);
String itemTypeDesc = nameof(itemType);
String itemTypeDescPlural = itemTypeDesc;
String viewLink = "";
switch (itemType)
{
case Sax.DataItemType.UserAccount:
itemTypeDesc = "User Account";
itemTypeDescPlural = "User Accounts";
viewLink = Url.Action("", "User", new RouteValueDictionary() { { "sta", "Await" } }).TrimStart('/');
break;
case Sax.DataItemType.Organisation:
itemTypeDesc = "Organisation";
itemTypeDescPlural = "Organisations";
viewLink = Url.Action("", "Organisation", new RouteValueDictionary() { { "sta", "Await" } }).TrimStart('/');
break;
}
ActivationItemData activationItem = new ActivationItemData()
{
ItemType = nameof(itemType),
ItemTypeDesc = itemTypeDesc,
ItemTypeDescPlural = itemTypeDescPlural,
ItemCount = dbResultSet.GetRecordValues().GetValue("ItemCount").AsLong(),
ViewLink = viewLink,
};
responseData.Items.Add(activationItem);
}
}
// Complete response.
responseData.Success = true;
return Json(responseData);
}
//-------------------------------------------------------------------
}
//=======================================================================
}