From 33890c4c83a318810b91d39a72fcf99c246e1f34 Mon Sep 17 00:00:00 2001 From: Daniel Manta Date: Tue, 1 Mar 2022 17:25:32 +0000 Subject: [PATCH 1/3] DLSV2-513 Create a nominated supervisor role --- ...AddNominatedSupervisorToAdminUsersTable.cs | 18 +++ .../AdminUserDataServiceTests.cs | 3 +- .../Models/AdminRegistrationModelTests.cs | 3 +- .../Services/RegistrationServiceTests.cs | 8 +- .../Services/UserServiceTests.cs | 8 +- .../RegistrationModelTestHelper.cs | 4 + .../DataServices/RegistrationDataService.cs | 9 +- .../UserDataService/AdminUserDataService.cs | 7 + .../UserDataService/UserDataService.cs | 1 + .../Mappers/AdminUserMap.cs | 69 +++++----- .../Models/AdminRoles.cs | 3 + .../Models/CentreContractAdminUsage.cs | 2 + .../Models/Register/AdminRegistrationModel.cs | 9 +- .../Models/User/AdminUser.cs | 1 + .../Services/RegistrationService.cs | 1 + .../Services/UserService.cs | 1 + .../Administrator/EditRolesViewModelTests.cs | 10 +- .../SupervisorController/Supervisor.cs | 13 +- .../SupervisorController.cs | 126 +++++++++--------- .../Helpers/RegistrationMappingHelper.cs | 1 + .../ViewModels/Common/AdminRolesFormData.cs | 2 + .../ViewModels/Common/AdminRolesViewModel.cs | 6 +- .../DelegateSelfAssessmentsViewModel.cs | 23 ++-- .../Supervisor/MyStaffListViewModel.cs | 6 +- .../Centre/Administrator/AdminRoleInputs.cs | 6 + .../Administrator/EditRolesViewModel.cs | 1 + .../PromoteToAdmin/PromoteToAdminViewModel.cs | 1 + .../DelegateProfileAssessments.cshtml | 95 ++++++------- .../Views/Supervisor/MyStaffList.cshtml | 61 +++++---- 29 files changed, 292 insertions(+), 206 deletions(-) create mode 100644 DigitalLearningSolutions.Data.Migrations/202202281322_AddNominatedSupervisorToAdminUsersTable.cs diff --git a/DigitalLearningSolutions.Data.Migrations/202202281322_AddNominatedSupervisorToAdminUsersTable.cs b/DigitalLearningSolutions.Data.Migrations/202202281322_AddNominatedSupervisorToAdminUsersTable.cs new file mode 100644 index 0000000000..d805dfcde4 --- /dev/null +++ b/DigitalLearningSolutions.Data.Migrations/202202281322_AddNominatedSupervisorToAdminUsersTable.cs @@ -0,0 +1,18 @@ +namespace DigitalLearningSolutions.Data.Migrations +{ + using FluentMigrator; + + [Migration(202202281322)] + public class AddNominatedSupervisorToAdminUsersTable : Migration + { + public override void Up() + { + Alter.Table("AdminUsers").AddColumn("NominatedSupervisor").AsBoolean().NotNullable().WithDefaultValue(false); + } + + public override void Down() + { + Delete.Column("NominatedSupervisor").FromTable("AdminUsers"); + } + } +} diff --git a/DigitalLearningSolutions.Data.Tests/DataServices/UserDataServiceTests/AdminUserDataServiceTests.cs b/DigitalLearningSolutions.Data.Tests/DataServices/UserDataServiceTests/AdminUserDataServiceTests.cs index 80653d7d37..59e33ae48d 100644 --- a/DigitalLearningSolutions.Data.Tests/DataServices/UserDataServiceTests/AdminUserDataServiceTests.cs +++ b/DigitalLearningSolutions.Data.Tests/DataServices/UserDataServiceTests/AdminUserDataServiceTests.cs @@ -162,12 +162,13 @@ public void UpdateAdminUserPermissions_updates_user() try { // When - userDataService.UpdateAdminUserPermissions(7, true, true, true, true, true, true, 1); + userDataService.UpdateAdminUserPermissions(7, true, true, true, true, true, true, true, 1); var updatedUser = userDataService.GetAdminUserById(7)!; // Then updatedUser.IsCentreAdmin.Should().BeTrue(); updatedUser.IsSupervisor.Should().BeTrue(); + updatedUser.IsNominatedSupervisor.Should().BeTrue(); updatedUser.IsTrainer.Should().BeTrue(); updatedUser.IsContentCreator.Should().BeTrue(); updatedUser.IsContentManager.Should().BeTrue(); diff --git a/DigitalLearningSolutions.Data.Tests/Models/AdminRegistrationModelTests.cs b/DigitalLearningSolutions.Data.Tests/Models/AdminRegistrationModelTests.cs index 770687ee13..0fe4b9b827 100644 --- a/DigitalLearningSolutions.Data.Tests/Models/AdminRegistrationModelTests.cs +++ b/DigitalLearningSolutions.Data.Tests/Models/AdminRegistrationModelTests.cs @@ -48,7 +48,7 @@ public void AdminRegistrationModel_without_isCmsManager_or_isCmsAdmin_populates_ public void GetNotificationRoles_returns_full_list_with_all_roles() { // Given - var expectedRoles = new List { 1, 2, 3, 4, 6, 7 }; + var expectedRoles = new List { 1, 2, 3, 4, 6, 7, 8 }; var adminRegistrationModel = new AdminRegistrationModel( "Test", "Name", @@ -64,6 +64,7 @@ public void GetNotificationRoles_returns_full_list_with_all_roles() true, true, true, + true, true ); diff --git a/DigitalLearningSolutions.Data.Tests/Services/RegistrationServiceTests.cs b/DigitalLearningSolutions.Data.Tests/Services/RegistrationServiceTests.cs index 5a3a306ee5..641bb6fabd 100644 --- a/DigitalLearningSolutions.Data.Tests/Services/RegistrationServiceTests.cs +++ b/DigitalLearningSolutions.Data.Tests/Services/RegistrationServiceTests.cs @@ -683,7 +683,7 @@ public void PromoteDelegateToAdmin_throws_AdminCreationFailedException_if_delega { // Given var delegateUser = UserTestHelper.GetDefaultDelegateUser(firstName: null); - var adminRoles = new AdminRoles(true, true, true, true, true, true); + var adminRoles = new AdminRoles(true, true, true, true, true, true, true); A.CallTo(() => userDataService.GetDelegateUserById(A._)).Returns(delegateUser); // When @@ -700,7 +700,7 @@ public void PromoteDelegateToAdmin_throws_AdminCreationFailedException_if_delega { // Given var delegateUser = UserTestHelper.GetDefaultDelegateUser(emailAddress: null); - var adminRoles = new AdminRoles(true, true, true, true, true, true); + var adminRoles = new AdminRoles(true, true, true, true, true, true, true); A.CallTo(() => userDataService.GetDelegateUserById(A._)).Returns(delegateUser); // When @@ -718,7 +718,7 @@ public void PromoteDelegateToAdmin_throws_email_in_use_AdminCreationFailedExcept // Given var delegateUser = UserTestHelper.GetDefaultDelegateUser(); var adminUser = UserTestHelper.GetDefaultAdminUser(); - var adminRoles = new AdminRoles(true, true, true, true, true, true); + var adminRoles = new AdminRoles(true, true, true, true, true, true, true); A.CallTo(() => userDataService.GetDelegateUserById(A._)).Returns(delegateUser); A.CallTo(() => userDataService.GetAdminUserByEmailAddress(A._)).Returns(adminUser); @@ -736,7 +736,7 @@ public void PromoteDelegateToAdmin_calls_data_service_with_expected_value() { // Given var delegateUser = UserTestHelper.GetDefaultDelegateUser(); - var adminRoles = new AdminRoles(true, true, true, true, true, true); + var adminRoles = new AdminRoles(true, true, true, true, true, true, true); A.CallTo(() => userDataService.GetDelegateUserById(A._)).Returns(delegateUser); A.CallTo(() => userDataService.GetAdminUserByEmailAddress(A._)).Returns(null); diff --git a/DigitalLearningSolutions.Data.Tests/Services/UserServiceTests.cs b/DigitalLearningSolutions.Data.Tests/Services/UserServiceTests.cs index 5e250c5ff3..1dc82083b4 100644 --- a/DigitalLearningSolutions.Data.Tests/Services/UserServiceTests.cs +++ b/DigitalLearningSolutions.Data.Tests/Services/UserServiceTests.cs @@ -693,7 +693,7 @@ public void UpdateAdminUserPermissions_edits_roles_when_spaces_available() ); var numberOfAdmins = CentreContractAdminUsageTestHelper.GetDefaultNumberOfAdministrators(); GivenAdminDataReturned(numberOfAdmins, currentAdminUser); - var adminRoles = new AdminRoles(true, true, true, true, true, true); + var adminRoles = new AdminRoles(true, true, true, true, true, true, true); // When userService.UpdateAdminUserPermissions(currentAdminUser.Id, adminRoles, 0); @@ -719,7 +719,7 @@ bool importOnly var numberOfAdmins = GetFullCentreContractAdminUsage(); GivenAdminDataReturned(numberOfAdmins, currentAdminUser); - var adminRoles = new AdminRoles(true, true, true, true, true, importOnly); + var adminRoles = new AdminRoles(true, true, true, true, true, true, importOnly); // When userService.UpdateAdminUserPermissions(currentAdminUser.Id, adminRoles, 0); @@ -748,7 +748,7 @@ bool newImportOnly ); var numberOfAdmins = GetFullCentreContractAdminUsage(); GivenAdminDataReturned(numberOfAdmins, currentAdminUser); - var adminRoles = new AdminRoles(true, true, newIsContentCreator, newIsTrainer, true, newImportOnly); + var adminRoles = new AdminRoles(true, true, newIsContentCreator, true, newIsTrainer, true, newImportOnly); // Then Assert.Throws( @@ -1105,6 +1105,7 @@ int categoryId adminId, adminRoles.IsCentreAdmin, adminRoles.IsSupervisor, + adminRoles.IsNominatedSupervisor, adminRoles.IsTrainer, adminRoles.IsContentCreator, adminRoles.IsContentManager, @@ -1125,6 +1126,7 @@ private void AssertAdminPermissionUpdateMustNotHaveHappened() A._, A._, A._, + A._, A._ ) ).MustNotHaveHappened(); diff --git a/DigitalLearningSolutions.Data.Tests/TestHelpers/RegistrationModelTestHelper.cs b/DigitalLearningSolutions.Data.Tests/TestHelpers/RegistrationModelTestHelper.cs index 6644ff447e..2f381389e3 100644 --- a/DigitalLearningSolutions.Data.Tests/TestHelpers/RegistrationModelTestHelper.cs +++ b/DigitalLearningSolutions.Data.Tests/TestHelpers/RegistrationModelTestHelper.cs @@ -20,6 +20,7 @@ public static AdminRegistrationModel GetDefaultCentreManagerRegistrationModel( bool isCentreAdmin=true, bool isCentreManager=true, bool isSupervisor= false, + bool isNominatedSupervisor= false, bool isTrainer= false, bool isContentCreator= false, bool isCmsAdmin= false, @@ -38,6 +39,7 @@ public static AdminRegistrationModel GetDefaultCentreManagerRegistrationModel( isCentreAdmin, isCentreManager, isSupervisor, + isNominatedSupervisor, isTrainer, isContentCreator, isCmsAdmin, @@ -57,6 +59,7 @@ public static AdminRegistrationModel GetDefaultAdminRegistrationModel( bool isCentreAdmin = true, bool isCentreManager = true, bool isSupervisor = true, + bool isNominatedSupervisor = true, bool isTrainer = true, bool isContentCreator = true, bool isCmsAdmin = true, @@ -75,6 +78,7 @@ public static AdminRegistrationModel GetDefaultAdminRegistrationModel( isCentreAdmin, isCentreManager, isSupervisor, + isNominatedSupervisor, isTrainer, isContentCreator, isCmsAdmin, diff --git a/DigitalLearningSolutions.Data/DataServices/RegistrationDataService.cs b/DigitalLearningSolutions.Data/DataServices/RegistrationDataService.cs index bcf2d2325b..004abf718e 100644 --- a/DigitalLearningSolutions.Data/DataServices/RegistrationDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/RegistrationDataService.cs @@ -73,7 +73,8 @@ public int RegisterAdmin(AdminRegistrationModel registrationModel) contentManager = registrationModel.IsContentManager, importOnly = registrationModel.ImportOnly, trainer = registrationModel.IsTrainer, - supervisor = registrationModel.IsSupervisor + supervisor = registrationModel.IsSupervisor, + nominatedSupervisor = registrationModel.IsNominatedSupervisor }; using var transaction = new TransactionScope(); @@ -95,7 +96,8 @@ public int RegisterAdmin(AdminRegistrationModel registrationModel) ContentManager, ImportOnly, Trainer, - Supervisor + Supervisor, + NominatedSupervisor ) OUTPUT Inserted.AdminID VALUES @@ -114,7 +116,8 @@ OUTPUT Inserted.AdminID @contentManager, @importOnly, @trainer, - @supervisor + @supervisor, + @nominatedSupervisor )", values ); diff --git a/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs b/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs index a0cb589848..2419c24f83 100644 --- a/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/UserDataService/AdminUserDataService.cs @@ -34,6 +34,7 @@ public partial class UserDataService ELSE cc.CategoryName END AS CategoryName, au.Supervisor AS IsSupervisor, + au.NominatedSupervisor AS IsNominatedSupervisor, au.Trainer AS IsTrainer, au.IsFrameworkDeveloper, au.ProfileImage, @@ -80,6 +81,7 @@ FROM AdminUsers AS au ELSE cc.CategoryName END AS CategoryName, au.Supervisor AS IsSupervisor, + au.NominatedSupervisor AS IsNominatedSupervisor, au.Trainer AS IsTrainer, au.IsFrameworkDeveloper, au.ProfileImage, @@ -124,6 +126,7 @@ FROM AdminUsers AS au ELSE cc.CategoryName END AS CategoryName, au.Supervisor AS IsSupervisor, + au.NominatedSupervisor AS IsNominatedSupervisor, au.Trainer AS IsTrainer, au.IsFrameworkDeveloper, au.ProfileImage, @@ -169,6 +172,7 @@ public List GetAdminUsersByCentreId(int centreId) ELSE cc.CategoryName END AS CategoryName, au.Supervisor AS IsSupervisor, + au.NominatedSupervisor AS IsNominatedSupervisor, au.Trainer AS IsTrainer, au.IsFrameworkDeveloper, au.ProfileImage, @@ -214,6 +218,7 @@ public void UpdateAdminUserPermissions( int adminId, bool isCentreAdmin, bool isSupervisor, + bool isNominatedSupervisor, bool isTrainer, bool isContentCreator, bool isContentManager, @@ -226,6 +231,7 @@ int categoryId SET CentreAdmin = @isCentreAdmin, Supervisor = @isSupervisor, + NominatedSupervisor = @isNominatedSupervisor, Trainer = @isTrainer, ContentCreator = @isContentCreator, ContentManager = @isContentManager, @@ -236,6 +242,7 @@ int categoryId { isCentreAdmin, isSupervisor, + isNominatedSupervisor, isTrainer, isContentCreator, isContentManager, diff --git a/DigitalLearningSolutions.Data/DataServices/UserDataService/UserDataService.cs b/DigitalLearningSolutions.Data/DataServices/UserDataService/UserDataService.cs index 1f6bc1cfa2..6aaddb6dec 100644 --- a/DigitalLearningSolutions.Data/DataServices/UserDataService/UserDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/UserDataService/UserDataService.cs @@ -30,6 +30,7 @@ void UpdateAdminUserPermissions( int adminId, bool isCentreAdmin, bool isSupervisor, + bool isNominatedSupervisor, bool isTrainer, bool isContentCreator, bool isContentManager, diff --git a/DigitalLearningSolutions.Data/Mappers/AdminUserMap.cs b/DigitalLearningSolutions.Data/Mappers/AdminUserMap.cs index 35ea083571..0b2a641931 100644 --- a/DigitalLearningSolutions.Data/Mappers/AdminUserMap.cs +++ b/DigitalLearningSolutions.Data/Mappers/AdminUserMap.cs @@ -1,34 +1,35 @@ -namespace DigitalLearningSolutions.Data.Mappers -{ - using Dapper.FluentMap.Mapping; - using DigitalLearningSolutions.Data.Models.User; - - public class AdminUserMap : EntityMap - { - public AdminUserMap() - { - // Columns derived from User abstract class - Map(adminUser => adminUser.Id).ToColumn("AdminID"); - Map(adminUser => adminUser.CentreId).ToColumn("CentreID"); - Map(adminUser => adminUser.CentreName).ToColumn("CentreName"); - Map(adminUser => adminUser.FirstName).ToColumn("Forename"); - Map(adminUser => adminUser.LastName).ToColumn("Surname"); - Map(adminUser => adminUser.EmailAddress).ToColumn("Email"); - Map(adminUser => adminUser.Password).ToColumn("Password"); - Map(adminUser => adminUser.ResetPasswordId).ToColumn("ResetPasswordID"); - - // Columns specific to AdminUser class - Map(adminUser => adminUser.IsCentreAdmin).ToColumn("IsCentreAdmin"); - Map(adminUser => adminUser.IsCentreManager).ToColumn("IsCentreManager"); - Map(adminUser => adminUser.IsContentCreator).ToColumn("IsContentCreator"); - Map(adminUser => adminUser.IsContentManager).ToColumn("IsContentManager"); - Map(adminUser => adminUser.PublishToAll).ToColumn("PublishToAll"); - Map(adminUser => adminUser.SummaryReports).ToColumn("SummaryReports"); - Map(adminUser => adminUser.IsUserAdmin).ToColumn("IsUserAdmin"); - Map(adminUser => adminUser.CategoryId).ToColumn("CategoryID"); - Map(adminUser => adminUser.IsSupervisor).ToColumn("IsSupervisor"); - Map(adminUser => adminUser.IsTrainer).ToColumn("IsTrainer"); - Map(adminUser => adminUser.IsFrameworkDeveloper).ToColumn("IsFrameworkDeveloper"); - } - } -} +namespace DigitalLearningSolutions.Data.Mappers +{ + using Dapper.FluentMap.Mapping; + using DigitalLearningSolutions.Data.Models.User; + + public class AdminUserMap : EntityMap + { + public AdminUserMap() + { + // Columns derived from User abstract class + Map(adminUser => adminUser.Id).ToColumn("AdminID"); + Map(adminUser => adminUser.CentreId).ToColumn("CentreID"); + Map(adminUser => adminUser.CentreName).ToColumn("CentreName"); + Map(adminUser => adminUser.FirstName).ToColumn("Forename"); + Map(adminUser => adminUser.LastName).ToColumn("Surname"); + Map(adminUser => adminUser.EmailAddress).ToColumn("Email"); + Map(adminUser => adminUser.Password).ToColumn("Password"); + Map(adminUser => adminUser.ResetPasswordId).ToColumn("ResetPasswordID"); + + // Columns specific to AdminUser class + Map(adminUser => adminUser.IsCentreAdmin).ToColumn("IsCentreAdmin"); + Map(adminUser => adminUser.IsCentreManager).ToColumn("IsCentreManager"); + Map(adminUser => adminUser.IsContentCreator).ToColumn("IsContentCreator"); + Map(adminUser => adminUser.IsContentManager).ToColumn("IsContentManager"); + Map(adminUser => adminUser.PublishToAll).ToColumn("PublishToAll"); + Map(adminUser => adminUser.SummaryReports).ToColumn("SummaryReports"); + Map(adminUser => adminUser.IsUserAdmin).ToColumn("IsUserAdmin"); + Map(adminUser => adminUser.CategoryId).ToColumn("CategoryID"); + Map(adminUser => adminUser.IsSupervisor).ToColumn("IsSupervisor"); + Map(adminUser => adminUser.IsNominatedSupervisor).ToColumn("IsNominatedSupervisor"); + Map(adminUser => adminUser.IsTrainer).ToColumn("IsTrainer"); + Map(adminUser => adminUser.IsFrameworkDeveloper).ToColumn("IsFrameworkDeveloper"); + } + } +} diff --git a/DigitalLearningSolutions.Data/Models/AdminRoles.cs b/DigitalLearningSolutions.Data/Models/AdminRoles.cs index 3bedf9b90d..d0a69d71db 100644 --- a/DigitalLearningSolutions.Data/Models/AdminRoles.cs +++ b/DigitalLearningSolutions.Data/Models/AdminRoles.cs @@ -5,6 +5,7 @@ public class AdminRoles public AdminRoles( bool isCentreAdmin, bool isSupervisor, + bool isNominatedSupervisor, bool isContentCreator, bool isTrainer, bool isContentManager, @@ -13,6 +14,7 @@ bool importOnly { IsCentreAdmin = isCentreAdmin; IsSupervisor = isSupervisor; + IsNominatedSupervisor = isNominatedSupervisor; IsContentCreator = isContentCreator; IsTrainer = isTrainer; IsContentManager = isContentManager; @@ -21,6 +23,7 @@ bool importOnly public bool IsCentreAdmin { get; set; } public bool IsSupervisor { get; set; } + public bool IsNominatedSupervisor { get; set; } public bool IsTrainer { get; set; } public bool IsContentCreator { get; set; } public bool IsContentManager { get; set; } diff --git a/DigitalLearningSolutions.Data/Models/CentreContractAdminUsage.cs b/DigitalLearningSolutions.Data/Models/CentreContractAdminUsage.cs index d2d9d11f46..68d34807d6 100644 --- a/DigitalLearningSolutions.Data/Models/CentreContractAdminUsage.cs +++ b/DigitalLearningSolutions.Data/Models/CentreContractAdminUsage.cs @@ -13,6 +13,7 @@ public CentreContractAdminUsage(Centre centreDetails, List adminUsers { AdminCount = adminUsers.Count(a => a.IsCentreAdmin); SupervisorCount = adminUsers.Count(a => a.IsSupervisor); + NominatedSupervisorCount = adminUsers.Count(a => a.IsNominatedSupervisor); TrainerCount = adminUsers.Count(a => a.IsTrainer); CmsAdministratorCount = adminUsers.Count(a => a.IsCmsAdministrator); CmsManagerCount = adminUsers.Count(a => a.IsCmsManager); @@ -25,6 +26,7 @@ public CentreContractAdminUsage(Centre centreDetails, List adminUsers public int AdminCount { get; set; } public int SupervisorCount { get; set; } + public int NominatedSupervisorCount { get; set; } public int TrainerCount { get; set; } public int CmsAdministratorCount { get; set; } public int CmsManagerCount { get; set; } diff --git a/DigitalLearningSolutions.Data/Models/Register/AdminRegistrationModel.cs b/DigitalLearningSolutions.Data/Models/Register/AdminRegistrationModel.cs index 31c040772b..ed21ae1244 100644 --- a/DigitalLearningSolutions.Data/Models/Register/AdminRegistrationModel.cs +++ b/DigitalLearningSolutions.Data/Models/Register/AdminRegistrationModel.cs @@ -16,6 +16,7 @@ public AdminRegistrationModel( bool isCentreAdmin, bool isCentreManager, bool isSupervisor, + bool isNominatedSupervisor, bool isTrainer, bool isContentCreator, bool isCmsAdmin, @@ -27,6 +28,7 @@ public AdminRegistrationModel( IsCentreAdmin = isCentreAdmin; IsCentreManager = isCentreManager; IsSupervisor = isSupervisor; + IsNominatedSupervisor = isNominatedSupervisor; IsTrainer = isTrainer; IsContentCreator = isContentCreator; ProfileImage = profileImage; @@ -53,7 +55,7 @@ public AdminRegistrationModel( public bool IsCentreManager { get; set; } public bool IsSupervisor { get; set; } - + public bool IsNominatedSupervisor { get; set; } public bool IsTrainer { get; set; } public bool ImportOnly { get; set; } @@ -100,6 +102,11 @@ public IEnumerable GetNotificationRoles() roles.Add(7); } + if (IsNominatedSupervisor) + { + roles.Add(8); + } + return roles; } } diff --git a/DigitalLearningSolutions.Data/Models/User/AdminUser.cs b/DigitalLearningSolutions.Data/Models/User/AdminUser.cs index a78e42a6dd..70b9a59de0 100644 --- a/DigitalLearningSolutions.Data/Models/User/AdminUser.cs +++ b/DigitalLearningSolutions.Data/Models/User/AdminUser.cs @@ -27,6 +27,7 @@ public class AdminUser : User public string? CategoryName { get; set; } public bool IsSupervisor { get; set; } + public bool IsNominatedSupervisor { get; set; } public bool IsTrainer { get; set; } diff --git a/DigitalLearningSolutions.Data/Services/RegistrationService.cs b/DigitalLearningSolutions.Data/Services/RegistrationService.cs index 3d14b3b941..bee8ce316e 100644 --- a/DigitalLearningSolutions.Data/Services/RegistrationService.cs +++ b/DigitalLearningSolutions.Data/Services/RegistrationService.cs @@ -237,6 +237,7 @@ public void PromoteDelegateToAdmin(AdminRoles adminRoles, int categoryId, int de adminRoles.IsCentreAdmin, false, adminRoles.IsSupervisor, + adminRoles.IsNominatedSupervisor, adminRoles.IsTrainer, adminRoles.IsContentCreator, adminRoles.IsCmsAdministrator, diff --git a/DigitalLearningSolutions.Data/Services/UserService.cs b/DigitalLearningSolutions.Data/Services/UserService.cs index e9b332f49a..d735b3d435 100644 --- a/DigitalLearningSolutions.Data/Services/UserService.cs +++ b/DigitalLearningSolutions.Data/Services/UserService.cs @@ -322,6 +322,7 @@ int categoryId adminId, adminRoles.IsCentreAdmin, adminRoles.IsSupervisor, + adminRoles.IsNominatedSupervisor, adminRoles.IsTrainer, adminRoles.IsContentCreator, adminRoles.IsContentManager, diff --git a/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModelTests.cs b/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModelTests.cs index d400f9d09b..21dbb25efe 100644 --- a/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModelTests.cs +++ b/DigitalLearningSolutions.Web.Tests/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModelTests.cs @@ -101,7 +101,7 @@ public void EditRolesViewModel_sets_up_all_checkboxes_and_inputs_when_under_limi // Then using (new AssertionScope()) { - result.Checkboxes.Count.Should().Be(4); + result.Checkboxes.Count.Should().Be(5); result.Radios.Count.Should().Be(3); result.Checkboxes.Contains(AdminRoleInputs.CentreAdminCheckbox).Should().BeTrue(); result.Checkboxes.Contains(AdminRoleInputs.SupervisorCheckbox).Should().BeTrue(); @@ -130,7 +130,7 @@ public void // Then using (new AssertionScope()) { - result.Checkboxes.Count.Should().Be(3); + result.Checkboxes.Count.Should().Be(4); result.Checkboxes.Contains(AdminRoleInputs.TrainerCheckbox).Should().BeFalse(); result.NotAllRolesDisplayed.Should().BeTrue(); } @@ -150,7 +150,7 @@ public void EditRolesViewModel_does_set_up_Trainer_checkbox_when_its_limit_is_re // Then using (new AssertionScope()) { - result.Checkboxes.Count.Should().Be(4); + result.Checkboxes.Count.Should().Be(5); result.Checkboxes.Contains(AdminRoleInputs.TrainerCheckbox).Should().BeTrue(); result.NotAllRolesDisplayed.Should().BeFalse(); } @@ -171,7 +171,7 @@ public void // Then using (new AssertionScope()) { - result.Checkboxes.Count.Should().Be(3); + result.Checkboxes.Count.Should().Be(4); result.Checkboxes.Contains(AdminRoleInputs.ContentCreatorCheckbox).Should().BeFalse(); result.NotAllRolesDisplayed.Should().BeTrue(); } @@ -192,7 +192,7 @@ public void // Then using (new AssertionScope()) { - result.Checkboxes.Count.Should().Be(4); + result.Checkboxes.Count.Should().Be(5); result.Checkboxes.Contains(AdminRoleInputs.ContentCreatorCheckbox).Should().BeTrue(); result.NotAllRolesDisplayed.Should().BeFalse(); } diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index aac6ea6957..444d21b829 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -41,7 +41,9 @@ public IActionResult MyStaffList( ) { var adminId = GetAdminID(); + var loggedInUserId = User.GetAdminId(); var centreId = GetCentreId(); + var loggedInAdminUser = userDataService.GetAdminUserById(loggedInUserId!.GetValueOrDefault()); var centreCustomPrompts = centreCustomPromptsService.GetCustomPromptsForCentreByCentreId(centreId); var supervisorDelegateDetails = supervisorService.GetSupervisorDelegateDetailsForAdminId(adminId); var supervisorDelegateDetailViewModels = supervisorDelegateDetails.Select( @@ -49,6 +51,7 @@ public IActionResult MyStaffList( ); sortBy ??= DefaultSortByOptions.Name.PropertyName; var model = new MyStaffListViewModel( + loggedInAdminUser, supervisorDelegateDetailViewModels, centreCustomPrompts, searchString, @@ -163,12 +166,14 @@ public IActionResult RemoveSupervisorDelegate(SupervisorDelegateViewModel superv [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessments")] public IActionResult DelegateProfileAssessments(int supervisorDelegateId) { - var superviseDelegate = - supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminID(), 0); - var delegateSelfAssessments = - supervisorService.GetSelfAssessmentsForSupervisorDelegateId(supervisorDelegateId, GetAdminID()); + var adminId = GetAdminID(); + var superviseDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, adminId, 0); + var loggedInUserId = User.GetAdminId(); + var loggedInAdminUser = userDataService.GetAdminUserById(loggedInUserId!.GetValueOrDefault()); + var delegateSelfAssessments = supervisorService.GetSelfAssessmentsForSupervisorDelegateId(supervisorDelegateId, adminId); var model = new DelegateSelfAssessmentsViewModel() { + IsNominatedSupervisor = loggedInAdminUser?.IsNominatedSupervisor ?? false, SupervisorDelegateDetail = superviseDelegate, DelegateSelfAssessments = delegateSelfAssessments }; diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs index f8079e527d..3524e70d65 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/SupervisorController.cs @@ -1,61 +1,65 @@ -namespace DigitalLearningSolutions.Web.Controllers.SupervisorController -{ - using DigitalLearningSolutions.Data.Services; - using DigitalLearningSolutions.Web.Helpers; - using Microsoft.AspNetCore.Authorization; - using Microsoft.AspNetCore.Mvc; - using Microsoft.Extensions.Configuration; - using Microsoft.Extensions.Logging; - - [Authorize(Policy = CustomPolicies.UserSupervisor)] - public partial class SupervisorController : Controller - { - private readonly ISupervisorService supervisorService; - private readonly ICommonService commonService; - private readonly IFrameworkNotificationService frameworkNotificationService; - private readonly ISelfAssessmentService selfAssessmentService; - private readonly IConfigService configService; - private readonly ICentreCustomPromptsService centreCustomPromptsService; - private readonly ILogger logger; - private readonly IConfiguration config; - public SupervisorController( - ISupervisorService supervisorService, - ICommonService commonService, - IFrameworkNotificationService frameworkNotificationService, - ISelfAssessmentService selfAssessmentService, - IConfigService configService, - ICentreCustomPromptsService centreCustomPromptsService, - ILogger logger, - IConfiguration config) - { - this.supervisorService = supervisorService; - this.commonService = commonService; - this.frameworkNotificationService = frameworkNotificationService; - this.selfAssessmentService = selfAssessmentService; - this.configService = configService; - this.centreCustomPromptsService = centreCustomPromptsService; - this.logger = logger; - this.config = config; - } - private int GetCentreId() - { - return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserCentreId); - } - private int GetAdminID() - { - return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserAdminId); - } - private string GetUserEmail() - { - var userEmail = User.GetUserEmail(); - if (userEmail == null) - { - return ""; - } - else - { - return userEmail; - } - } - } -} +namespace DigitalLearningSolutions.Web.Controllers.SupervisorController +{ + using DigitalLearningSolutions.Data.DataServices.UserDataService; + using DigitalLearningSolutions.Data.Services; + using DigitalLearningSolutions.Web.Helpers; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + + [Authorize(Policy = CustomPolicies.UserSupervisor)] + public partial class SupervisorController : Controller + { + private readonly ISupervisorService supervisorService; + private readonly ICommonService commonService; + private readonly IFrameworkNotificationService frameworkNotificationService; + private readonly ISelfAssessmentService selfAssessmentService; + private readonly IConfigService configService; + private readonly ICentreCustomPromptsService centreCustomPromptsService; + private readonly IUserDataService userDataService; + private readonly ILogger logger; + private readonly IConfiguration config; + public SupervisorController( + ISupervisorService supervisorService, + ICommonService commonService, + IFrameworkNotificationService frameworkNotificationService, + ISelfAssessmentService selfAssessmentService, + IConfigService configService, + ICentreCustomPromptsService centreCustomPromptsService, + IUserDataService userDataService, + ILogger logger, + IConfiguration config) + { + this.supervisorService = supervisorService; + this.commonService = commonService; + this.frameworkNotificationService = frameworkNotificationService; + this.selfAssessmentService = selfAssessmentService; + this.configService = configService; + this.centreCustomPromptsService = centreCustomPromptsService; + this.userDataService = userDataService; + this.logger = logger; + this.config = config; + } + private int GetCentreId() + { + return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserCentreId); + } + private int GetAdminID() + { + return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserAdminId); + } + private string GetUserEmail() + { + var userEmail = User.GetUserEmail(); + if (userEmail == null) + { + return ""; + } + else + { + return userEmail; + } + } + } +} diff --git a/DigitalLearningSolutions.Web/Helpers/RegistrationMappingHelper.cs b/DigitalLearningSolutions.Web/Helpers/RegistrationMappingHelper.cs index bf1ebca529..3a0a581d65 100644 --- a/DigitalLearningSolutions.Web/Helpers/RegistrationMappingHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/RegistrationMappingHelper.cs @@ -23,6 +23,7 @@ public static AdminRegistrationModel MapToCentreManagerAdminRegistrationModel(Re false, false, false, + false, false ); } diff --git a/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesFormData.cs b/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesFormData.cs index 95931e3062..ee6d2e4850 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesFormData.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesFormData.cs @@ -16,6 +16,7 @@ public AdminRolesFormData(User user) public string? FullName { get; set; } public bool IsCentreAdmin { get; set; } public bool IsSupervisor { get; set; } + public bool IsNominatedSupervisor { get; set; } public bool IsTrainer { get; set; } public bool IsContentCreator { get; set; } public ContentManagementRole ContentManagementRole { get; set; } @@ -27,6 +28,7 @@ public AdminRoles GetAdminRoles() return new AdminRoles( IsCentreAdmin, IsSupervisor, + IsNominatedSupervisor, IsContentCreator, IsTrainer, ContentManagementRole.IsContentManager, diff --git a/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesViewModel.cs index 412c33cb9d..a03e41ea66 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Common/AdminRolesViewModel.cs @@ -10,11 +10,13 @@ public abstract class AdminRolesViewModel : AdminRolesFormData { private const int MaxNumberOfCmsRoleRadios = 3; private const int MinNumberOfCmsRoleRadios = 1; - private const int MaxNumberOfRoleCheckboxes = 4; + private const int MaxNumberOfRoleCheckboxes = 5; public readonly List Checkboxes = new List { - AdminRoleInputs.CentreAdminCheckbox, AdminRoleInputs.SupervisorCheckbox + AdminRoleInputs.CentreAdminCheckbox, + AdminRoleInputs.SupervisorCheckbox, + AdminRoleInputs.NominatedSupervisorCheckbox }; public readonly List Radios = new List(); diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/DelegateSelfAssessmentsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/DelegateSelfAssessmentsViewModel.cs index a0a3371fa9..2de717e025 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/DelegateSelfAssessmentsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/DelegateSelfAssessmentsViewModel.cs @@ -1,11 +1,12 @@ -namespace DigitalLearningSolutions.Web.ViewModels.Supervisor -{ - using DigitalLearningSolutions.Data.Models.Supervisor; - using System.Collections.Generic; - - public class DelegateSelfAssessmentsViewModel - { - public SupervisorDelegateDetail SupervisorDelegateDetail { get; set; } - public IEnumerable DelegateSelfAssessments { get; set; } - } -} +namespace DigitalLearningSolutions.Web.ViewModels.Supervisor +{ + using DigitalLearningSolutions.Data.Models.Supervisor; + using System.Collections.Generic; + + public class DelegateSelfAssessmentsViewModel + { + public bool IsNominatedSupervisor { get; set; } + public SupervisorDelegateDetail SupervisorDelegateDetail { get; set; } + public IEnumerable DelegateSelfAssessments { get; set; } + } +} diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs index 8eec4b3eda..6caa9fd6a5 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs @@ -8,10 +8,12 @@ using System.ComponentModel.DataAnnotations; using DigitalLearningSolutions.Web.Attributes; using DigitalLearningSolutions.Web.Helpers; + using DigitalLearningSolutions.Data.Models.User; public class MyStaffListViewModel : BaseSearchablePageViewModel { public MyStaffListViewModel( + AdminUser adminUser, IEnumerable supervisorDelegateDetailViewModels, CentreCustomPrompts centreCustomPrompts, string? searchString, @@ -20,6 +22,7 @@ public MyStaffListViewModel( int page ) : base(searchString, page, false, sortBy, sortDirection, searchLabel: "Search administrators") { + IsNominatedSupervisor = adminUser?.IsNominatedSupervisor ?? false; CentreCustomPrompts = centreCustomPrompts; var sortedItems = GenericSortingHelper.SortAllItems( supervisorDelegateDetailViewModels.AsQueryable(), @@ -33,7 +36,7 @@ int page SuperviseDelegateDetailViewModels = paginatedItems; } - public MyStaffListViewModel() : this(Enumerable.Empty(), new CentreCustomPrompts(), null, string.Empty, string.Empty, 1) + public MyStaffListViewModel() : this(null, Enumerable.Empty(), new CentreCustomPrompts(), null, string.Empty, string.Empty, 1) { } @@ -46,6 +49,7 @@ int page }; public CentreCustomPrompts CentreCustomPrompts { get; set; } + public bool IsNominatedSupervisor { get; set; } public override bool NoDataFound => !SuperviseDelegateDetailViewModels.Any() && NoSearchOrFilter; diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/AdminRoleInputs.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/AdminRoleInputs.cs index d1ce9c025d..805448899b 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/AdminRoleInputs.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/AdminRoleInputs.cs @@ -17,6 +17,12 @@ public class AdminRoleInputs "Oversees individual and groups of delegates. Assigns and reviews self-assessments. Arranges supervision sessions." ); + public static CheckboxListItemViewModel NominatedSupervisorCheckbox = new CheckboxListItemViewModel( + nameof(EditRolesViewModel.IsNominatedSupervisor), + "Nominated Supervisor", + "Confirms self-assessment results for learners." + ); + public static CheckboxListItemViewModel TrainerCheckbox = new CheckboxListItemViewModel( nameof(EditRolesViewModel.IsTrainer), "Trainer", diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModel.cs index 5136109d0e..6eaa348575 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Administrator/EditRolesViewModel.cs @@ -23,6 +23,7 @@ public EditRolesViewModel( { IsCentreAdmin = user.IsCentreAdmin; IsSupervisor = user.IsSupervisor; + IsNominatedSupervisor = user.IsNominatedSupervisor; IsTrainer = user.IsTrainer; IsContentCreator = user.IsContentCreator; ReturnPage = returnPage; diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/PromoteToAdmin/PromoteToAdminViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/PromoteToAdmin/PromoteToAdminViewModel.cs index ed5052fcdf..4f2266d022 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/PromoteToAdmin/PromoteToAdminViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Delegates/PromoteToAdmin/PromoteToAdminViewModel.cs @@ -25,6 +25,7 @@ CentreContractAdminUsage numberOfAdmins IsCentreAdmin = false; IsSupervisor = false; + IsNominatedSupervisor = false; IsTrainer = false; IsContentCreator = false; ContentManagementRole = ContentManagementRole.NoContentManagementRole; diff --git a/DigitalLearningSolutions.Web/Views/Supervisor/DelegateProfileAssessments.cshtml b/DigitalLearningSolutions.Web/Views/Supervisor/DelegateProfileAssessments.cshtml index 00f7e81c2a..41a56da60c 100644 --- a/DigitalLearningSolutions.Web/Views/Supervisor/DelegateProfileAssessments.cshtml +++ b/DigitalLearningSolutions.Web/Views/Supervisor/DelegateProfileAssessments.cshtml @@ -1,46 +1,49 @@ -@using DigitalLearningSolutions.Web.ViewModels.Supervisor; -@model DelegateSelfAssessmentsViewModel; -@{ - ViewData["Title"] = "My Staff List"; - ViewData["Application"] = "Supervisor"; -} - - -@section NavMenuItems { - -} -@section NavBreadcrumbs { - -} -
- -

- @Model.SupervisorDelegateDetail.FirstName @Model.SupervisorDelegateDetail.LastName -

-
-
- -
-
- @if (Model.DelegateSelfAssessments.Any()) - { - - } - else - { -

You are not supervising any profile assessments for this member of staff, yet.

- } - - Enrol on new assessment - +@using DigitalLearningSolutions.Web.ViewModels.Supervisor; +@model DelegateSelfAssessmentsViewModel; +@{ + ViewData["Title"] = "My Staff List"; + ViewData["Application"] = "Supervisor"; +} + + +@section NavMenuItems { + +} +@section NavBreadcrumbs { + +} +
+ +

+ @Model.SupervisorDelegateDetail.FirstName @Model.SupervisorDelegateDetail.LastName +

+
+
+ +
+
+@if (Model.DelegateSelfAssessments.Any()) +{ + +} +else +{ +

You are not supervising any profile assessments for this member of staff, yet.

+} +@if (!Model.IsNominatedSupervisor) +{ + + Enrol on new assessment + +} diff --git a/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml b/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml index a7ba5299b9..0588694b82 100644 --- a/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml +++ b/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml @@ -28,9 +28,9 @@
@if (errorHasOccurred) - { - - } + { + + }

My Staff

@@ -72,34 +72,37 @@ }
-
-
-
- -
-
- + @if (!Model.IsNominatedSupervisor) + { +
+
+ + +
+
+ +
-
- - @Html.HiddenFor(m => m.SearchString) - @Html.HiddenFor(m => m.SortBy) - @Html.HiddenFor(m => m.SortDirection) - @Html.HiddenFor(m => m.Page) - + + @Html.HiddenFor(m => m.SearchString) + @Html.HiddenFor(m => m.SortBy) + @Html.HiddenFor(m => m.SortDirection) + @Html.HiddenFor(m => m.Page) + +
-
+ }
From 0d0be3c7edd21986c22f9feb24c0abe6d74d9ba2 Mon Sep 17 00:00:00 2001 From: Daniel Manta Date: Wed, 2 Mar 2022 13:55:59 +0000 Subject: [PATCH 2/3] DLSV2-513 Ensure that a supervisor has full access to MyStaffList --- .../ViewModels/Supervisor/MyStaffListViewModel.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs index 6caa9fd6a5..2d0e8b3b08 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/MyStaffListViewModel.cs @@ -22,7 +22,7 @@ public MyStaffListViewModel( int page ) : base(searchString, page, false, sortBy, sortDirection, searchLabel: "Search administrators") { - IsNominatedSupervisor = adminUser?.IsNominatedSupervisor ?? false; + AdminUser = adminUser; CentreCustomPrompts = centreCustomPrompts; var sortedItems = GenericSortingHelper.SortAllItems( supervisorDelegateDetailViewModels.AsQueryable(), @@ -49,7 +49,13 @@ int page }; public CentreCustomPrompts CentreCustomPrompts { get; set; } - public bool IsNominatedSupervisor { get; set; } + public bool IsNominatedSupervisor + { + get + { + return AdminUser?.IsSupervisor == true ? false : AdminUser?.IsNominatedSupervisor ?? false; + } + } public override bool NoDataFound => !SuperviseDelegateDetailViewModels.Any() && NoSearchOrFilter; @@ -58,5 +64,7 @@ int page [EmailAddress(ErrorMessage = CommonValidationErrorMessages.InvalidEmail)] [NoWhitespace(CommonValidationErrorMessages.WhitespaceInEmail)] public string? DelegateEmail { get; set; } + + private AdminUser AdminUser; } } From da3115bfcaea2bcc10e62beb2ae8400d5d3238e3 Mon Sep 17 00:00:00 2001 From: Daniel Manta Date: Wed, 2 Mar 2022 14:22:00 +0000 Subject: [PATCH 3/3] DLSV2-513 Hide add multiple staff members button for nominated supervisors --- .../Views/Supervisor/MyStaffList.cshtml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml b/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml index 0588694b82..666e224fe2 100644 --- a/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml +++ b/DigitalLearningSolutions.Web/Views/Supervisor/MyStaffList.cshtml @@ -102,14 +102,14 @@
- } - @section scripts {