Skip to content

Commit 43d1975

Browse files
authored
Merge pull request #2142 from TechnologyEnhancedLearning/Develop/Fixes/TD-2503_mismatch_of_the_Admins_listed_on_Delegates_section_compared_to_Centre_administrators_section
TD-2503 Displayed admin account with inactive user account ,added filter for user account status and reactivate admin account
2 parents 716cc6f + fb70781 commit 43d1975

File tree

14 files changed

+178
-90
lines changed

14 files changed

+178
-90
lines changed

DigitalLearningSolutions.Data.Tests/DataServices/UserDataServiceTests/AdminUserDataServiceTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,10 @@ public void GetAdminUsersByCentreId_populates_correct_properties_on_admin()
167167
}
168168

169169
[Test]
170-
public void GetNumberOfActiveAdminsAtCentre_returns_expected_count()
170+
public void GetNumberOfAdminsAtCentre_returns_expected_count()
171171
{
172172
// When
173-
var count = userDataService.GetNumberOfActiveAdminsAtCentre(2);
173+
var count = userDataService.GetNumberOfAdminsAtCentre(2);
174174

175175
// Then
176176
count.Should().Be(3);

DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
namespace DigitalLearningSolutions.Data.DataServices.UserDataService
22
{
3+
using Dapper;
4+
using DigitalLearningSolutions.Data.Models.Centres;
5+
using DigitalLearningSolutions.Data.Models.User;
36
using System;
47
using System.Collections.Generic;
58
using System.Linq;
69
using System.Threading.Tasks;
7-
using Dapper;
8-
using DigitalLearningSolutions.Data.Models.Centres;
9-
using DigitalLearningSolutions.Data.Models.User;
1010

1111
public partial class UserDataService
1212
{
@@ -177,6 +177,21 @@ public IEnumerable<AdminEntity> GetActiveAdminsByCentreId(int centreId)
177177
);
178178
}
179179

180+
public IEnumerable<AdminEntity> GetAdminsByCentreId(int centreId)
181+
{
182+
var sql = $@"{BaseAdminEntitySelectQuery} WHERE aa.centreID = @centreId";
183+
184+
return connection.Query<AdminAccount, UserAccount, UserCentreDetails, AdminEntity>(
185+
sql,
186+
(adminAccount, userAccount, userCentreDetails) => new AdminEntity(
187+
adminAccount,
188+
userAccount,
189+
userCentreDetails
190+
),
191+
new { centreId }
192+
);
193+
}
194+
180195
[Obsolete("New code should use GetAdminById instead")]
181196
public AdminUser? GetAdminUserById(int id)
182197
{
@@ -210,10 +225,10 @@ public List<AdminUser> GetAdminUsersByCentreId(int centreId)
210225
return users;
211226
}
212227

213-
public int GetNumberOfActiveAdminsAtCentre(int centreId)
228+
public int GetNumberOfAdminsAtCentre(int centreId)
214229
{
215230
return (int)connection.ExecuteScalar(
216-
@"SELECT COUNT(*) FROM AdminUsers WHERE Active = 1 AND CentreID = @centreId",
231+
@"SELECT COUNT(*) FROM AdminUsers WHERE CentreID = @centreId",
217232
new { centreId }
218233
);
219234
}

DigitalLearningSolutions.Data/DataServices/UserDataService/UserDataService.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ public interface IUserDataService
2020

2121
IEnumerable<AdminEntity> GetActiveAdminsByCentreId(int centreId);
2222

23+
IEnumerable<AdminEntity> GetAdminsByCentreId(int centreId);
24+
2325
AdminUser? GetAdminUserById(int id);
2426

2527
List<AdminUser> GetAdminUsersByCentreId(int centreId);
2628

2729
AdminUser? GetAdminUserByEmailAddress(string emailAddress);
2830

29-
int GetNumberOfActiveAdminsAtCentre(int centreId);
31+
int GetNumberOfAdminsAtCentre(int centreId);
3032

3133
void UpdateAdminUserPermissions(
3234
int adminId,

DigitalLearningSolutions.Data/Models/User/AdminEntity.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public override string SearchableName
5959

6060
public string? CategoryName => AdminAccount.CategoryName;
6161
public bool IsLocked => UserAccount.FailedLoginCount >= AuthHelper.FailedLoginThreshold;
62+
public bool IsUserActive => UserAccount.Active;
6263
public bool IsCmsAdministrator => AdminAccount.IsCmsAdministrator;
6364
public bool IsCmsManager => AdminAccount.IsCmsManager;
6465
public bool IsCentreAdmin => AdminAccount.IsCentreAdmin;

DigitalLearningSolutions.Web.Tests/Helpers/FilterableTagHelperTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public void GetCurrentTagsForAdmin_should_return_correct_tags()
2828
new SearchableTagViewModel(AdminRoleFilterOptions.CmsAdministrator),
2929
new SearchableTagViewModel(AdminRoleFilterOptions.ContentCreatorLicense),
3030
new SearchableTagViewModel(AdminRoleFilterOptions.SuperAdmin),
31+
new SearchableTagViewModel(UserAccountStatusFilterOptions.Active),
3132
};
3233

3334
// When

DigitalLearningSolutions.Web.Tests/Services/DashboardInformationServiceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ int ticketCountForCentre
136136
adminUser!.CategoryId
137137
)
138138
).Returns(courseCount);
139-
A.CallTo(() => userDataService.GetNumberOfActiveAdminsAtCentre(CentreId)).Returns(adminCount);
139+
A.CallTo(() => userDataService.GetNumberOfAdminsAtCentre(CentreId)).Returns(adminCount);
140140
A.CallTo(() => centresService.GetCentreRankForCentre(CentreId)).Returns(centreRank);
141141
A.CallTo(() => supportTicketDataService.GetNumberOfUnarchivedTicketsForAdminId(AdminId))
142142
.Returns(ticketCountForAdmin);

DigitalLearningSolutions.Web/Controllers/TrackingSystem/Centre/Administrator/AdministratorController.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public IActionResult AllAdmins()
113113
var centreId = User.GetCentreIdKnownNotNull();
114114
var loggedInAdmin = userDataService.GetAdminById(User.GetAdminId()!.Value);
115115

116-
var adminsAtCentre = userDataService.GetActiveAdminsByCentreId(centreId);
116+
var adminsAtCentre = userDataService.GetAdminsByCentreId(centreId);
117117
var categories = courseCategoriesDataService.GetCategoriesForCentreAndCentrallyManagedCourses(centreId);
118118
var model = new AllAdminsViewModel(
119119
adminsAtCentre,
@@ -272,6 +272,17 @@ public IActionResult DeactivateOrDeleteAdmin(int adminId, DeactivateAdminViewMod
272272
return View("DeactivateOrDeleteAdminConfirmation");
273273
}
274274

275+
[Route("{adminId:int}/ReactivateAdmin")]
276+
[HttpGet]
277+
[ServiceFilter(typeof(VerifyAdminUserCanAccessAdminUser))]
278+
public IActionResult ReactivateAdmin(
279+
int adminId
280+
)
281+
{
282+
userService.ReactivateAdmin(adminId);
283+
return RedirectToAction("Index");
284+
}
285+
275286
private bool CurrentUserCanDeactivateAdmin(AdminAccount adminToDeactivate)
276287
{
277288
var loggedInAdmin = userDataService.GetAdminById(User.GetAdminId()!.GetValueOrDefault());

DigitalLearningSolutions.Web/Helpers/FilterOptions/AdminFilterOptions.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,21 @@ public static class AdminAccountStatusFilterOptions
8888
FilterStatus.Default
8989
);
9090
}
91+
92+
public static class UserAccountStatusFilterOptions
93+
{
94+
private const string Group = "UserStatus";
95+
96+
public static readonly FilterOptionModel Active = new FilterOptionModel(
97+
"Active",
98+
FilteringHelper.BuildFilterValueString(Group, nameof(AdminEntity.IsUserActive), "true"),
99+
FilterStatus.Default
100+
);
101+
102+
public static readonly FilterOptionModel Inactive = new FilterOptionModel(
103+
"Inactive",
104+
FilteringHelper.BuildFilterValueString(Group, nameof(AdminEntity.IsUserActive), "false"),
105+
FilterStatus.Default
106+
);
107+
}
91108
}

DigitalLearningSolutions.Web/Helpers/FilterableTagHelper.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ public static IEnumerable<SearchableTagViewModel> GetCurrentTagsForAdmin(AdminEn
7373
tags.Add(new SearchableTagViewModel(AdminRoleFilterOptions.ReportsViewer));
7474
}
7575

76+
if (admin.UserAccount.Active && admin.AdminAccount.Active)
77+
{
78+
tags.Add(new SearchableTagViewModel(UserAccountStatusFilterOptions.Active));
79+
}
80+
else
81+
{
82+
tags.Add(new SearchableTagViewModel(UserAccountStatusFilterOptions.Inactive));
83+
}
84+
7685
return tags;
7786
}
7887

DigitalLearningSolutions.Web/Services/DashboardInformationService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ ICentresDataService centresDataService
4747
centreId,
4848
adminUser.CategoryId
4949
);
50-
var adminCount = userDataService.GetNumberOfActiveAdminsAtCentre(centreId);
50+
var adminCount = userDataService.GetNumberOfAdminsAtCentre(centreId);
5151
var supportTicketCount = adminUser.IsCentreManager
5252
? ticketDataService.GetNumberOfUnarchivedTicketsForCentreId(centreId)
5353
: ticketDataService.GetNumberOfUnarchivedTicketsForAdminId(adminId);

0 commit comments

Comments
 (0)