This commit is contained in:
2022-04-20 17:46:16 +01:00
parent acd070dbc6
commit 9a8dc99d85
63 changed files with 1965 additions and 308 deletions
@@ -28,7 +28,8 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
public String LastName { get; set; }
public String RegionNameCountry { get; set; }
public String RegionNameProvince { get; set; }
public int UserRoleCount { get; set; }
public int? UserSportCount { get; set; } = null;
public int? UserRoleCount { get; set; } = null;
public bool? SystemAdmin { get; set; } = null;
public String LastOnlineLoginAt { get; set; }
public String LastAdminLoginAt { get; set; }
@@ -37,9 +38,17 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{
public String RegionIdCountry { get; set; }
public String RegionIdProvince { get; set; }
// User sports.
public class UserSportData
{
public String SportId { get; set; }
public String SportName { get; set; }
}
public List<UserSportData> Sports { get; set; }
// User roles.
public List<String> userRoleCodes { get; } = new List<string>();
}
private void PopulateUserResponseData(SaxModel_Admin model, UserData_List data, SaxUserAccount user, List<SaxUserRole> userRoles)
private void PopulateUserResponseData(SaxModel_Admin model, UserData_List data, SaxUserAccount user, List<SaxUserSport> userSports, List<SaxUserRole> userRoles)
{
data.Id = SysId.ToString(user.Id);
data.EmailAddress = user.EmailAddress;
@@ -49,7 +58,10 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
data.LastName = user.LastName;
data.RegionNameCountry = model.GetRegionName(user.RegionIdCountry);
data.RegionNameProvince = model.GetRegionName(user.RegionIdProvince);
data.UserRoleCount = userRoles?.GetUserRolesByStatus(SaStatus.Active).Count ?? 0;
// User sports.
// User roles.
if (userRoles?.GetUserRolesByStatus(SaStatus.Active).Count > 0)
data.UserRoleCount = userRoles.GetUserRolesByStatus(SaStatus.Active).Count;
data.SystemAdmin = (userRoles != null && userRoles.Exists(item => item.UserRole == Sax.UserRole.SystemAdmin) ? true : (bool?)null);
data.LastOnlineLoginAt = model.FormatDateTimeForDisplay(user.LastLoginAt);
data.StatusCode = user.StatusCode;
@@ -59,13 +71,31 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userRole_SystemAdmin != null)
data.LastAdminLoginAt = model.FormatDateTimeForDisplay(userRole_SystemAdmin.LastLoginAt);
}
private void PopulateUserResponseData(SaxModel_Admin model, UserData_Full data, SaxUserAccount user, List<SaxUserRole> userRoles)
private void PopulateUserResponseData(SaxModel_Admin model, UserData_Full data, SaxUserAccount user, List<SaxUserSport> userSports, List<SaxUserRole> userRoles)
{
PopulateUserResponseData(model, data as UserData_List, user, userRoles);
PopulateUserResponseData(model, data as UserData_List, user, userSports, userRoles);
data.RegionIdCountry = SysId.ToString(user.RegionIdCountry);
data.RegionIdProvince = SysId.ToString(user.RegionIdProvince);
// User sports.
if (userSports != null && !userSports.IsEmpty())
{
data.Sports = new List<UserData_Full.UserSportData>();
List<SaxSport> sports = ReferenceMgr.GetSportListByIds(userSports.GetSportIds());
foreach (SaxUserSport userSport in userSports)
{
SaxSport sport = sports.GetSportById(userSport.SportId);
UserData_Full.UserSportData userSportData = new UserData_Full.UserSportData()
{
SportId = SysId.ToString(userSport.SportId),
SportName = sport?.Name ?? null
};
data.Sports.Add(userSportData);
}
}
// User roles.
if (userRoles != null)
{
foreach (SaxUserRole userRole in userRoles.GetUserRolesByStatus(SaStatus.Active))
@@ -75,6 +105,14 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
//-------------------------------------------------------------------
// Utilities.
private List<SaxUserSport> GetUserSports(SysId userAccountId, SaxUserSport.StatusCat statusCat = SaxUserSport.StatusCat.NotDeleted)
{
if (!SysId.IsValid(userAccountId)) return new List<SaxUserSport>();
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
prmUserSport.UserAccountIdsIncluded.Add(userAccountId);
prmUserSport.StatusCat = statusCat;
return AccountMgr.GetUserSportList(prmUserSport);
}
private List<SaxUserRole> GetUserRoles(SysId userAccountId, SaxUserRole.StatusCat statusCat = SaxUserRole.StatusCat.NotDeleted)
{
if (!SysId.IsValid(userAccountId)) return new List<SaxUserRole>();
@@ -142,6 +180,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
ColumnDfn colProvinceName = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.RegionProvince_Name);
ColumnDfn colUserRoleCount = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.UserRoleCount);
ColumnDfn colSystemAdminUser = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.SystemAdminUser);
ColumnDfn colUserSportCount = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.UserSportCount_Active);
ColumnDfn colLastLogin = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.LastLoginAt);
ColumnDfn colAdminLastLogin = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.LastAdminLoginAt);
ColumnDfn colStatus = AccountMgr.GetUserAccountColumnDfn(SaxUserAccount.Column.Status);
@@ -149,8 +188,9 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{
colId, colEmail, colTitle, colFirstName, colLastName,
colCountryName, colProvinceName,
colUserRoleCount, colSystemAdminUser,
colLastLogin, colAdminLastLogin, colStatus
colUserSportCount, colUserRoleCount,
colSystemAdminUser, colLastLogin, colAdminLastLogin,
colStatus
};
// Query items.
@@ -168,6 +208,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
LastName = values.GetString(colLastName.DataName),
RegionNameCountry = values.GetString(colCountryName.DataName),
RegionNameProvince = values.GetString(colProvinceName.DataName),
UserSportCount = StringUtil.ToInt(values.GetString(colUserSportCount.DataName)),
UserRoleCount = StringUtil.ToInt(values.GetString(colUserRoleCount.DataName)),
SystemAdmin = StringUtil.ToBool(values.GetString(colSystemAdminUser.DataName)),
LastOnlineLoginAt = model.FormatDateTimeForDisplay(values.GetDateTime(colLastLogin.DataName)),
@@ -175,6 +216,9 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
StatusCode = values.GetString(colStatus.DataName),
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
};
if (userData.UserSportCount < 1) userData.UserSportCount = null;
if (userData.UserRoleCount < 1) userData.UserRoleCount = null;
if (userData.SystemAdmin == false) userData.SystemAdmin = null;
userData.DisplayName = SaxUserAccount.GetDisplayName(userData.Title, userData.FirstName, userData.LastName);
responseData.Users.Add(userData);
}
@@ -231,8 +275,16 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
}
// User Sports.
List<SaxUserSport> userSports = GetUserSports(user.Id, SaxUserSport.StatusCat.ActiveOnly);
disposableItems.AddRange(userSports);
// User Roles.
List<SaxUserRole> userRoles = GetUserRoles(user.Id, SaxUserRole.StatusCat.ActiveOnly);
disposableItems.AddRange(userRoles);
// Construct response.
PopulateUserResponseData(model, responseData.user, user, GetUserRoles(user.Id).GetUserRolesByStatus(SaStatus.Active));
PopulateUserResponseData(model, responseData.user, user, userSports, userRoles);
responseData.Success = true;
}
return Json(responseData);
@@ -275,8 +327,16 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData);
}
// User Sports.
List<SaxUserSport> userSports = GetUserSports(user.Id, SaxUserSport.StatusCat.ActiveOnly);
disposableItems.AddRange(userSports);
// User Roles.
List<SaxUserRole> userRoles = GetUserRoles(user.Id, SaxUserRole.StatusCat.ActiveOnly);
disposableItems.AddRange(userRoles);
// Construct response.
PopulateUserResponseData(model, responseData.user, user, GetUserRoles(user.Id).GetUserRolesByStatus(SaStatus.Active));
PopulateUserResponseData(model, responseData.user, user, userSports, userRoles);
responseData.Success = true;
}
return Json(responseData);
@@ -407,8 +467,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
}
}
// User Sports.
List<SaxUserSport> userSports = GetUserSports(user.Id, SaxUserSport.StatusCat.ActiveOnly);
disposableItems.AddRange(userSports);
// Construct response.
PopulateUserResponseData(model, responseData.user, user, userRoles.GetUserRolesByStatus(SaStatus.Active));
PopulateUserResponseData(model, responseData.user, user, userSports, userRoles.GetUserRolesByStatus(SaStatus.Active));
responseData.Success = true;
}
return Json(responseData);
@@ -479,8 +543,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
emailsSentCount++;
}
// User Sports.
List<SaxUserSport> userSports = GetUserSports(userAccount.Id, SaxUserSport.StatusCat.ActiveOnly);
disposableItems.AddRange(userSports);
// Construct response.
PopulateUserResponseData(model, responseData.user, userAccount, userRoles.GetUserRolesByStatus(SaStatus.Active));
PopulateUserResponseData(model, responseData.user, userAccount, userSports, userRoles.GetUserRolesByStatus(SaStatus.Active));
responseData.SetNotification(messageTitle, "Emails sent: " + emailsSentCount);
responseData.Success = true;
}
@@ -118,7 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="company.name" xml:space="preserve">
<value>Solum Forti</value>
<value>Sportierre</value>
</data>
<data name="copyright.symbol.year.html" xml:space="preserve">
<value>&amp;copy; {0}</value>
@@ -162,6 +162,9 @@
<data name="label.address" xml:space="preserve">
<value>Address</value>
</data>
<data name="label.admin" xml:space="preserve">
<value>Admin</value>
</data>
<data name="label.any" xml:space="preserve">
<value>Any</value>
</data>
@@ -378,6 +381,9 @@
<data name="label.sport" xml:space="preserve">
<value>Sport</value>
</data>
<data name="label.sports" xml:space="preserve">
<value>Sports</value>
</data>
<data name="label.status" xml:space="preserve">
<value>Status</value>
</data>
+5 -2
View File
@@ -138,8 +138,11 @@
<div class="col-sm-4 right"><span class="UserRegionNameCountry"></span></div>
</div>
<div class="row">
<div class="col-sm-4"><div class="sax-note UserRoles">Roles: <span class="UserRoleCount"></span></div></div>
<div class="col-sm-4 center"><div class="sax-note UserLastAdminLogin">Admin:&nbsp;<span class="UserLastAdminLoginAt"></span></div></div>
<div class="col-sm-4">
<span class="sax-note UserSports">@Localiser["label.sports"]: <span class="UserSportCount"></span>&nbsp;</span>
<span class="sax-note UserRoles">@Localiser["label.roles"]: <span class="UserRoleCount"></span></span>
</div>
<div class="col-sm-4 center"><div class="sax-note UserLastAdminLogin">@Localiser["label.admin"]:&nbsp;<span class="UserLastAdminLoginAt"></span></div></div>
<div class="col-sm-4 right"><div class="sax-note StatusDesc"></div></div>
</div>
</div>
@@ -4,6 +4,15 @@
/* Users - User dialog panel */
}
<style>
#dlgUser #frmUser .UserSports .Sports
{
max-height: 64px;
padding: 4px 8px;
border: 1px solid #b0b0b0;
overflow-y: scroll;
}
</style>
<script type="text/javascript">
sax.dlg.title.createUser = '@Localiser.GetJavascriptText("user.caption.user.create")';
sax.dlg.title.updateUser = '@Localiser.GetJavascriptText("user.caption.user.update")';
@@ -134,6 +143,20 @@
</div>
*@
@* User Sports *@
<div class="sax-form-control UserSports">
<div class="row">
<div class="col-sm-3">
<div class="sax-label">
<label><span>@Localiser["label.sports"]</span>&nbsp;<span class="UserSportCount"></span></label>
</div>
</div>
<div class="col-sm">
<div class="Sports"></div>
</div>
</div>
</div>
@* User roles *@
<div class="sax-form-control UserRoles">
<div class="row">
@@ -63,6 +63,8 @@
$('.UserLastName', $item).text(item.lastName);
$('.UserRegionNameCountry', $item).text(item.regionNameCountry);
$('.UserRegionNameProvince', $item).text(item.regionNameProvince);
$('.UserSportCount', $item).text(item.userSportCount);
$('.UserSports', $item).toggle(!!item.userSportCount);
$('.UserRoleCount', $item).text(item.userRoleCount);
$('.UserRoles', $item).toggle(!!item.userRoleCount);
$('.UserLastOnlineLoginAt', $item).text(item.lastOnlineLoginAt);
@@ -275,6 +277,7 @@
let frm = $frm.user;
$('.UserId,.UserRegionIdCountry,.UserRegionIdProvince,.UserRoleCodes,input[type="text"],textarea,select', frm).val('');
$('.UserStatus', frm).val(sax.data.defaultStatusCode);
$('div.UserSports', frm).hide();
sax.clearControlErrors();
sax.userAccount = { userRoleCodes: [] };
}
@@ -304,6 +307,13 @@
$('.UserRegionCaptionProvince', frm).val(item.regionNameProvince);
$('.UserRoles', frm).val(sax.getSelectedUserRoleDescs().join('\n'));
$('#ifUserRoleCodes').val(item.userRoleCodes.join(sax.data.userRoleCodeDelim));
if (item.sports && item.sports.length)
{
let $sports = $('div.UserSports', frm).show();
$('.UserSportCount', $sports).text('[' + item.sports.length + ']');
for (const sport of item.sports)
$('.Sports', $sports).append($('<div>').text(sport.sportName));
}
$('.UserStatus', frm).val(item.statusCode);
$dlg.user.dialog('option', 'title', sax.dlg.title.updateUser);
sax.openDialog($dlg.user, 600, 480);