From 6cf28ac7cc2f13f8e5d1cd7989feac6cf8d94fcb Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 7 Jan 2025 16:35:53 +0000 Subject: [PATCH 01/36] TD-5163 Process imported competencies --- .../ImportCompetencies.cs | 14 ---- .../Services/FrameworkService.cs | 2 + .../ImportCompetenciesFromFileService.cs | 69 ++++++------------- 3 files changed, 23 insertions(+), 62 deletions(-) diff --git a/DigitalLearningSolutions.Web/Controllers/FrameworksController/ImportCompetencies.cs b/DigitalLearningSolutions.Web/Controllers/FrameworksController/ImportCompetencies.cs index 886c0800f5..84f02d1ebf 100644 --- a/DigitalLearningSolutions.Web/Controllers/FrameworksController/ImportCompetencies.cs +++ b/DigitalLearningSolutions.Web/Controllers/FrameworksController/ImportCompetencies.cs @@ -245,23 +245,9 @@ public IActionResult ImportSummarySubmit() var workbook = new XLWorkbook(filePath); var results = importCompetenciesFromFileService.ProcessCompetenciesFromFile(workbook, adminId, data.FrameworkId, data.FrameworkVocubulary, data.ReorderCompetenciesOption, data.AddAssessmentQuestionsOption, data.AddCustomAssessmentQuestion ? (int)data.CustomAssessmentQuestionID : 0, data.AddDefaultAssessmentQuestions ? data.DefaultQuestionIDs : []); data.ImportCompetenciesResult = results; - //TO DO apply ordering changes if required: - if (data.ReorderCompetenciesOption == 2 && data.CompetenciesToReorderCount > 0) - { - - } setBulkUploadData(data); return RedirectToAction("UploadResults", "Frameworks", new { frameworkId = data.FrameworkId, tabname = data.TabName }); } - [Route("/Framework/{frameworkId}/{tabname}/Import/Results")] - public IActionResult UploadResults() - { - var data = GetBulkUploadData(); - FileHelper.DeleteFile(webHostEnvironment, data.CompetenciesFileName); - TempData.Clear(); - var model = new ImportCompetenciesResultsViewModel(data.ImportCompetenciesResult, data.FrameworkId, data.FrameworkName, data.FrameworkVocubulary); - return View("Developer/Import/UploadResults", model); - } [Route("CancelImport")] public IActionResult CancelImport() { diff --git a/DigitalLearningSolutions.Web/Services/FrameworkService.cs b/DigitalLearningSolutions.Web/Services/FrameworkService.cs index 78510692db..3b2bc6fbd0 100644 --- a/DigitalLearningSolutions.Web/Services/FrameworkService.cs +++ b/DigitalLearningSolutions.Web/Services/FrameworkService.cs @@ -119,12 +119,14 @@ bool zeroBased int InsertCompetencyGroup(string groupName, string? groupDescription, int adminId, int? frameworkId = null); + int InsertFrameworkCompetency(int competencyId, int? frameworkCompetencyGroupID, int adminId, int frameworkId, bool alwaysShowDescription = false); int InsertFrameworkCompetency(int competencyId, int? frameworkCompetencyGroupID, int adminId, int frameworkId, bool alwaysShowDescription = false); IEnumerable GetAllCompetenciesForAdminId(string name, int adminId); int InsertCompetency(string name, string? description, int adminId); + int InsertFrameworkCompetencyGroup(int groupId, int frameworkID, int adminId); int InsertFrameworkCompetencyGroup(int groupId, int frameworkID, int adminId); int AddCollaboratorToFramework(int frameworkId, string userEmail, bool canModify, int? centreID); diff --git a/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs b/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs index 02b8affac1..581d062209 100644 --- a/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs +++ b/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs @@ -20,6 +20,7 @@ public interface IImportCompetenciesFromFileService byte[] GetCompetencyFileForFramework(int frameworkId, bool isBlank, string vocabulary); public ImportCompetenciesResult PreProcessCompetenciesTable(IXLWorkbook workbook, string vocabulary, int frameworkId); public ImportCompetenciesResult ProcessCompetenciesFromFile(IXLWorkbook workbook, int adminUserId, int frameworkId, string vocabulary, int reorderCompetenciesOption, int addAssessmentQuestionsOption, int customAssessmentQuestionID, List defaultQuestionIds); + public ImportCompetenciesResult ProcessCompetenciesFromFile(IXLWorkbook workbook, int adminUserId, int frameworkId, string vocabulary, int reorderCompetenciesOption, int addAssessmentQuestionsOption, int customAssessmentQuestionID, List defaultQuestionIds); } public class ImportCompetenciesFromFileService : IImportCompetenciesFromFileService { @@ -71,11 +72,12 @@ private void PreProcessCompetencyRow(CompetencyTableRow competencyRow, List competencyRow.Validate(); } public ImportCompetenciesResult ProcessCompetenciesFromFile(IXLWorkbook workbook, int adminUserId, int frameworkId, string vocabulary, int reorderCompetenciesOption, int addAssessmentQuestionsOption, int customAssessmentQuestionID, List defaultQuestionIds) + public ImportCompetenciesResult ProcessCompetenciesFromFile(IXLWorkbook workbook, int adminUserId, int frameworkId, string vocabulary, int reorderCompetenciesOption, int addAssessmentQuestionsOption, int customAssessmentQuestionID, List defaultQuestionIds) { int maxFrameworkCompetencyId = frameworkService.GetMaxFrameworkCompetencyID(); int maxFrameworkCompetencyGroupId = frameworkService.GetMaxFrameworkCompetencyGroupID(); var table = OpenCompetenciesTable(workbook, vocabulary); - return ProcessCompetenciesTable(table, adminUserId, frameworkId, maxFrameworkCompetencyId, maxFrameworkCompetencyGroupId, addAssessmentQuestionsOption, reorderCompetenciesOption, customAssessmentQuestionID, defaultQuestionIds); + return ProcessCompetenciesTable(table, adminUserId, frameworkId, maxFrameworkCompetencyId, maxFrameworkCompetencyGroupId, addAssessmentQuestionsOption, customAssessmentQuestionID, defaultQuestionIds); } internal IXLTable OpenCompetenciesTable(IXLWorkbook workbook, string vocabulary) { @@ -92,7 +94,7 @@ internal IXLTable OpenCompetenciesTable(IXLWorkbook workbook, string vocabulary) } return table; } - internal ImportCompetenciesResult ProcessCompetenciesTable(IXLTable table, int adminUserId, int frameworkId, int maxFrameworkCompetencyId, int maxFrameworkCompetencyGroupId, int addAssessmentQuestionsOption, int reorderCompetenciesOption, int customAssessmentQuestionID, List defaultQuestionIds) + internal ImportCompetenciesResult ProcessCompetenciesTable(IXLTable table, int adminUserId, int frameworkId, int maxFrameworkCompetencyId, int maxFrameworkCompetencyGroupId, int addAssessmentQuestionsOption, int customAssessmentQuestionID, List defaultQuestionIds) { var competenciesRows = table.Rows().Skip(1).Select(row => new CompetencyTableRow(table, row)).ToList(); int rowCount = 0; @@ -120,7 +122,7 @@ internal ImportCompetenciesResult ProcessCompetenciesTable(IXLTable table, int a .Count(); foreach (var competencyRow in competenciesRows) { - maxFrameworkCompetencyGroupId = ProcessCompetencyRow(adminUserId, frameworkId, maxFrameworkCompetencyId, maxFrameworkCompetencyGroupId, addAssessmentQuestionsOption, reorderCompetenciesOption, customAssessmentQuestionID, defaultQuestionIds, competencyRow); + maxFrameworkCompetencyGroupId = ProcessCompetencyRow(adminUserId, frameworkId, maxFrameworkCompetencyId, maxFrameworkCompetencyGroupId, addAssessmentQuestionsOption, customAssessmentQuestionID, defaultQuestionIds, competencyRow); } // Check for changes to competency group order and apply them if appropriate: if (reorderCompetenciesOption == 2) @@ -159,7 +161,6 @@ private int ProcessCompetencyRow( int maxFrameworkCompetencyId, int maxFrameworkCompetencyGroupId, int addAssessmentQuestionsOption, - int reorderCompetenciesOption, int customAssessmentQuestionID, List defaultQuestionIds, CompetencyTableRow competencyRow @@ -169,13 +170,13 @@ CompetencyTableRow competencyRow { return maxFrameworkCompetencyGroupId; } + int newCompetencyGroupId = 0; int newCompetencyId = 0; - int newFrameworkCompetencyId = 0; //If competency group is set, check if competency group exists within framework and add if not and get the Framework Competency Group ID - int? frameworkCompetencyGroupId = null; + int ? frameworkCompetencyGroupId = null; if (competencyRow.CompetencyGroup != null) { - int newCompetencyGroupId = frameworkService.InsertCompetencyGroup(competencyRow.CompetencyGroup, competencyRow.GroupDescription, adminUserId, frameworkId); + newCompetencyGroupId = frameworkService.InsertCompetencyGroup(competencyRow.CompetencyGroup, competencyRow.GroupDescription, adminUserId); if (newCompetencyGroupId > 0) { frameworkCompetencyGroupId = frameworkService.InsertFrameworkCompetencyGroup(newCompetencyGroupId, frameworkId, adminUserId); @@ -193,10 +194,10 @@ CompetencyTableRow competencyRow if (frameworkCompetency != null) { newCompetencyId = frameworkCompetency.CompetencyID; - if (frameworkCompetency.Name != competencyRow.Competency || frameworkCompetency.Description != competencyRow.CompetencyDescription || frameworkCompetency.AlwaysShowDescription != competencyRow.AlwaysShowDescription) + if (frameworkCompetency.Name != competencyRow.Competency || frameworkCompetency.Description != competencyRow.CompetencyDescription || frameworkCompetency.AlwaysShowDescription != competencyRow.AlwaysShowDescription ) { frameworkService.UpdateFrameworkCompetency((int)competencyRow.ID, competencyRow.Competency, competencyRow.CompetencyDescription, adminUserId, competencyRow.AlwaysShowDescription ?? false); - competencyRow.RowStatus = (competencyRow.RowStatus == RowStatus.CompetencyGroupInserted ? RowStatus.CompetencyGroupAndCompetencyUpdated : RowStatus.CompetencyUpdated); + competencyRow.RowStatus = (competencyRow.RowStatus == RowStatus.CompetencyGroupInserted ? RowStatus.CompetencyGroupAndCompetencyUpdated: RowStatus.CompetencyUpdated); } else { @@ -210,7 +211,7 @@ CompetencyTableRow competencyRow newCompetencyId = frameworkService.InsertCompetency(competencyRow.Competency, competencyRow.CompetencyDescription, adminUserId); if (newCompetencyId > 0) { - newFrameworkCompetencyId = frameworkService.InsertFrameworkCompetency(newCompetencyId, frameworkCompetencyGroupId, adminUserId, frameworkId, competencyRow.AlwaysShowDescription ?? false); //including always show desc flag + var newFrameworkCompetencyId = frameworkService.InsertFrameworkCompetency(newCompetencyId, frameworkCompetencyGroupId, adminUserId, frameworkId, competencyRow.AlwaysShowDescription ?? false); //including always show desc flag if (newFrameworkCompetencyId > maxFrameworkCompetencyId) { competencyRow.RowStatus = (competencyRow.RowStatus == RowStatus.CompetencyGroupInserted ? RowStatus.CompetencyGroupAndCompetencyInserted : RowStatus.CompetencyInserted); @@ -224,12 +225,11 @@ CompetencyTableRow competencyRow // If flags are supplied, add them: - if (!string.IsNullOrWhiteSpace(competencyRow.FlagsCsv.Trim())) + if (competencyRow.FlagsCsv != null) { var flags = competencyRow.FlagsCsv.Split(','); - var flagIds = new List(); - foreach (var flag in flags) - { + int[] flagIds = []; + foreach (var flag in flags) { int flagId = 0; var frameworkFlags = frameworkService.GetCompetencyFlagsByFrameworkId(frameworkId, null, null); if (frameworkFlags.Any()) @@ -239,7 +239,6 @@ CompetencyTableRow competencyRow if (frameworkFlag.FlagName == flag) { flagId = frameworkFlag.FlagId; - break; } } } @@ -247,56 +246,30 @@ CompetencyTableRow competencyRow { flagId = frameworkService.AddCustomFlagToFramework(frameworkId, flag, "Flag", "nhsuk-tag--white"); } - flagIds.Add(flagId); + flagIds.Append(flagId); } - if (flagIds.Count > 0) - { - var updated = frameworkService.UpdateCompetencyFlags(frameworkId, newCompetencyId, [.. flagIds]); - if (updated > 0 && competencyRow.RowStatus == RowStatus.Skipped) - { - competencyRow.RowStatus = RowStatus.CompetencyUpdated; - } + if (flagIds.Any()) { + frameworkService.UpdateCompetencyFlags(frameworkId, newCompetencyId, flagIds); } } - // Reorder competencies if required: - if (reorderCompetenciesOption == 2) - { - var frameworkCompetencyId = (int)competencyRow.ID; - var frameworkCompetency = frameworkService.GetFrameworkCompetencyById(frameworkCompetencyId); - var placesToMove = Math.Abs(frameworkCompetency.Ordering - competencyRow.CompetencyOrderNumber); - - if (placesToMove > 0) - { - var direction = frameworkCompetency.Ordering > competencyRow.CompetencyOrderNumber ? "UP" : "DOWN"; - - for (int i = 0; i < placesToMove; i++) - { - frameworkService.MoveFrameworkCompetency(frameworkCompetencyId, true, direction); - } - - competencyRow.Reordered = true; - } - } // Add assessment questions if necessary: if (defaultQuestionIds.Count > 0 | customAssessmentQuestionID > 0) { if (competencyRow.RowStatus == RowStatus.CompetencyInserted | competencyRow.RowStatus == RowStatus.CompetencyGroupAndCompetencyInserted || addAssessmentQuestionsOption == 2 && competencyRow.RowStatus == RowStatus.CompetencyUpdated | competencyRow.RowStatus == RowStatus.CompetencyGroupAndCompetencyUpdated || addAssessmentQuestionsOption == 3) { - foreach (var id in defaultQuestionIds) + foreach(var id in defaultQuestionIds) { - frameworkService.AddCompetencyAssessmentQuestion(competencyRow.ID ?? newFrameworkCompetencyId, id, adminUserId); + frameworkService.AddCompetencyAssessmentQuestion((int)competencyRow.ID, id, adminUserId); } - if (customAssessmentQuestionID > 0) + if(customAssessmentQuestionID > 0) { - frameworkService.AddCompetencyAssessmentQuestion(competencyRow.ID ?? newFrameworkCompetencyId, customAssessmentQuestionID, adminUserId); + frameworkService.AddCompetencyAssessmentQuestion((int)competencyRow.ID, customAssessmentQuestionID, adminUserId); } } } - - return maxFrameworkCompetencyGroupId; } From a43b8625f6ed0fd62241220177124a5d12e2ea6f Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Wed, 8 Jan 2025 16:56:32 +0000 Subject: [PATCH 02/36] TD-5163 modifies the insert competency group method to take an optional framework id --- .../DataServices/FrameworkDataService.cs | 51 ++++++++++++++++++- .../ImportCompetenciesFromFileService.cs | 2 +- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs b/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs index b73bce21b8..fc259c4f4f 100644 --- a/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs @@ -123,6 +123,7 @@ bool zeroBased //INSERT DATA BrandedFramework CreateFramework(DetailFramework detailFramework, int adminId); + int InsertCompetencyGroup(string groupName, string? groupDescription, int adminId, int? frameworkId); int InsertCompetencyGroup(string groupName, string? groupDescription, int adminId, int? frameworkId); int InsertFrameworkCompetencyGroup(int groupId, int frameworkID, int adminId); @@ -476,6 +477,7 @@ public BrandedFramework CreateFramework(DetailFramework detailFramework, int adm return new BrandedFramework(); } + var existingFrameworks = connection.QuerySingle( var existingFrameworks = connection.QuerySingle( @"SELECT COUNT(*) FROM Frameworks WHERE FrameworkName = @frameworkName", new { frameworkName } @@ -549,6 +551,7 @@ int adminId return GetBrandedFrameworkByFrameworkId(frameworkId, adminId); } + public int InsertCompetencyGroup(string groupName, string? groupDescription, int adminId, int? frameworkId) public int InsertCompetencyGroup(string groupName, string? groupDescription, int adminId, int? frameworkId) { if ((groupName.Length == 0) | (adminId < 1)) @@ -581,7 +584,26 @@ OUTPUT INSERTED.Id VALUES (@groupName, @groupDescription, @adminId)", new { groupName, groupDescription, adminId } ); - + if (numberOfAffectedRows < 1) + { + logger.LogWarning( + "Not inserting competency group as db insert failed. " + + $"Group name: {groupName}, admin id: {adminId}" + ); + return -1; + } + + existingId = connection.QuerySingle( + @"SELECT COALESCE + ((SELECT TOP (1) ID + FROM CompetencyGroups + WHERE (Name = @groupName) AND EXISTS + (SELECT 1 AS Expr1 + FROM FrameworkCompetencyGroups + WHERE (CompetencyGroupID = CompetencyGroups.ID) AND (FrameworkID = @frameworkId) OR + (CompetencyGroupID = CompetencyGroups.ID) AND (@frameworkId IS NULL))), 0) AS CompetencyGroupID", + new { groupName, groupDescription } + ); return existingId; } @@ -595,6 +617,7 @@ public int InsertFrameworkCompetencyGroup(int groupId, int frameworkId, int admi return -2; } + var existingId = connection.QuerySingle( var existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID FROM FrameworkCompetencyGroups WHERE CompetencyGroupID = @groupID AND FrameworkID = @frameworkID), 0) AS FrameworkCompetencyGroupID", new { groupId, frameworkId } @@ -613,7 +636,19 @@ FROM [FrameworkCompetencyGroups] WHERE ([FrameworkID] = @frameworkId)), 0)+1, @frameworkId)", new { groupId, adminId, frameworkId } ); - + if (numberOfAffectedRows < 1) + { + logger.LogWarning( + "Not inserting framework competency group as db insert failed. " + + $"Group id: {groupId}, admin id: {adminId}, frameworkId: {frameworkId}" + ); + return -1; + } + + existingId = connection.QuerySingle( + @"SELECT COALESCE ((SELECT ID FROM FrameworkCompetencyGroups WHERE CompetencyGroupID = @groupID AND FrameworkID = @frameworkID), 0) AS FrameworkCompetencyGroupID", + new { groupId, frameworkId } + ); return existingId; } @@ -657,6 +692,7 @@ public int InsertFrameworkCompetency( var existingId = 0; if (frameworkCompetencyGroupID == null) { + existingId = connection.QuerySingle( existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID FROM FrameworkCompetencies WHERE [CompetencyID] = @competencyId AND FrameworkCompetencyGroupID IS NULL), 0) AS FrameworkCompetencyID", new { competencyId, frameworkCompetencyGroupID } @@ -664,6 +700,7 @@ public int InsertFrameworkCompetency( } else { + existingId = connection.QuerySingle( existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID FROM FrameworkCompetencies WHERE [CompetencyID] = @competencyId AND FrameworkCompetencyGroupID = @frameworkCompetencyGroupID), 0) AS FrameworkCompetencyID", new { competencyId, frameworkCompetencyGroupID } @@ -693,6 +730,7 @@ FROM [FrameworkCompetencies] if (frameworkCompetencyGroupID == null) { + existingId = connection.QuerySingle( existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID FROM FrameworkCompetencies WHERE [CompetencyID] = @competencyId AND FrameworkCompetencyGroupID IS NULL), 0) AS FrameworkCompetencyID", new { competencyId, frameworkCompetencyGroupID } @@ -700,6 +738,7 @@ FROM [FrameworkCompetencies] } else { + existingId = connection.QuerySingle( existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID FROM FrameworkCompetencies WHERE [CompetencyID] = @competencyId AND FrameworkCompetencyGroupID = @frameworkCompetencyGroupID), 0) AS FrameworkCompetencyID", new { competencyId, frameworkCompetencyGroupID } @@ -751,6 +790,7 @@ public int AddCollaboratorToFramework(int frameworkId, string? userEmail, bool c return -3; } + var existingId = connection.QuerySingle( var existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID @@ -801,6 +841,7 @@ FROM FrameworkCollaborators ); } + existingId = connection.QuerySingle( existingId = connection.QuerySingle( @"SELECT COALESCE ((SELECT ID @@ -989,6 +1030,7 @@ int adminId return; } + var usedElsewhere = connection.QuerySingle( var usedElsewhere = connection.QuerySingle( @"SELECT COUNT(*) FROM FrameworkCompetencyGroups WHERE CompetencyGroupId = @competencyGroupId @@ -1159,6 +1201,7 @@ public void DeleteFrameworkCompetencyGroup(int frameworkCompetencyGroupId, int c } //Check if used elsewhere and delete competency group if not: + var usedElsewhere = connection.QuerySingle( var usedElsewhere = connection.QuerySingle( @"SELECT COUNT(*) FROM FrameworkCompetencyGroups WHERE CompetencyGroupId = @competencyGroupId", @@ -1166,6 +1209,7 @@ public void DeleteFrameworkCompetencyGroup(int frameworkCompetencyGroupId, int c ); if (usedElsewhere == 0) { + usedElsewhere = connection.QuerySingle( usedElsewhere = connection.QuerySingle( @"SELECT COUNT(*) FROM SelfAssessmentStructure WHERE CompetencyGroupId = @competencyGroupId", @@ -1197,6 +1241,7 @@ public void DeleteFrameworkCompetencyGroup(int frameworkCompetencyGroupId, int c public void DeleteFrameworkCompetency(int frameworkCompetencyId, int adminId) { + var competencyId = connection.QuerySingle( var competencyId = connection.QuerySingle( @"SELECT CompetencyID FROM FrameworkCompetencies WHERE ID = @frameworkCompetencyId", new { frameworkCompetencyId } @@ -1228,6 +1273,7 @@ public void DeleteFrameworkCompetency(int frameworkCompetencyId, int adminId) } //Check if used elsewhere and delete competency group if not: + var usedElsewhere = connection.QuerySingle( var usedElsewhere = connection.QuerySingle( @"SELECT COUNT(*) FROM FrameworkCompetencies WHERE CompetencyID = @competencyId", @@ -1235,6 +1281,7 @@ public void DeleteFrameworkCompetency(int frameworkCompetencyId, int adminId) ); if (usedElsewhere == 0) { + usedElsewhere = connection.QuerySingle( usedElsewhere = connection.QuerySingle( @"SELECT COUNT(*) FROM SelfAssessmentStructure WHERE CompetencyID = @competencyId", diff --git a/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs b/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs index 581d062209..06bf4b30cc 100644 --- a/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs +++ b/DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs @@ -176,7 +176,7 @@ CompetencyTableRow competencyRow int ? frameworkCompetencyGroupId = null; if (competencyRow.CompetencyGroup != null) { - newCompetencyGroupId = frameworkService.InsertCompetencyGroup(competencyRow.CompetencyGroup, competencyRow.GroupDescription, adminUserId); + int newCompetencyGroupId = frameworkService.InsertCompetencyGroup(competencyRow.CompetencyGroup, competencyRow.GroupDescription, adminUserId, frameworkId); if (newCompetencyGroupId > 0) { frameworkCompetencyGroupId = frameworkService.InsertFrameworkCompetencyGroup(newCompetencyGroupId, frameworkId, adminUserId); From a65f2f83e2f59b72bbd8793b38a678864c2acf72 Mon Sep 17 00:00:00 2001 From: kevwhitt-hee Date: Tue, 28 Jan 2025 09:07:22 +0000 Subject: [PATCH 03/36] TD-5286 Renames role profiles to competency assessments throughout the application --- .../CompetencyAssessmentDataService.cs | 197 +++++++++++ .../DataServices/FrameworkDataService.cs | 6 +- .../DataServices/RoleProfileDataService.cs | 197 ----------- .../DataServices/SupervisorDataService.cs | 28 +- .../Enums/NavMenuTab.cs | 4 +- .../CompetencyAssessment.cs} | 8 +- .../CompetencyAssessmentBase.cs} | 9 +- .../NRPProfessionalGroups.cs | 3 +- .../NRPRoles.cs | 4 +- .../NRPSubGroups.cs | 2 +- .../Models/Frameworks/DashboardData.cs | 4 +- .../Models/Frameworks/DashboardToDoItem.cs | 2 +- .../SessionNewCompetencyAssessment.cs | 15 + .../RoleProfiles/SessionNewRoleProfile.cs | 15 - ... => SessionEnrolOnCompetencyAssessment.cs} | 2 +- .../Supervisor/DelegateSelfAssessment.cs | 2 +- .../TestHelpers/SupervisorTagTestHelper.cs | 4 +- .../CompetencyAssessments.cs | 306 ++++++++++++++++++ .../CompetencyAssessmentsController.cs} | 108 +++---- .../RoleProfilesController/RoleProfiles.cs | 306 ------------------ .../SupervisorController/Supervisor.cs | 128 ++++---- .../Helpers/SearchHelper.cs | 20 +- .../Helpers/SortingHelper.cs | 52 +-- .../Models/Enums/CompetencyAssessmentsTab.cs | 39 +++ .../Models/Enums/RoleProfilesTab.cs | 39 --- .../Services/CompetencyAssessmentService.cs | 68 ++++ .../Services/FrameworkNotificationService.cs | 16 +- .../Services/RoleProfileService.cs | 68 ---- .../Services/SupervisorService.cs | 14 +- DigitalLearningSolutions.Web/Startup.cs | 4 +- .../AllCompetencyAssessmentsViewModel.cs | 42 +++ ...BaseCompetencyAssessmentsPageViewModel.cs} | 142 ++++---- .../CompetencyAssessmentsViewModel.cs | 29 ++ .../MyCompetencyAssessmentsViewModel.cs | 43 +++ .../ProfessionalGroupViewModel.cs | 11 + .../RoleProfiles/AllRoleProfilesViewModel.cs | 42 --- .../RoleProfiles/MyRoleProfilesViewModel.cs | 41 --- .../ProfessionalGroupViewModel.cs | 11 - .../RoleProfiles/RoleProfilesViewModel.cs | 29 -- ...rolDelegateOnProfileAssessmentViewModel.cs | 6 +- .../EnrolDelegateSetCompletByDateViewModel.cs | 4 +- .../EnrolDelegateSummaryViewModel.cs | 4 +- .../EnrolDelegateSupervisorRoleViewModel.cs | 4 +- .../Views/ApplicationSelector/Index.cshtml | 4 +- .../CompetencyAssessment.cshtml} | 0 .../Index.cshtml | 12 +- .../Name.cshtml | 36 +-- .../ProfessionalGroup.cshtml | 60 ++-- .../Shared/_AssessmentsGrid.cshtml} | 32 +- ...CompetencyAssessmentsSearchAndSort.cshtml} | 22 +- .../Shared/_PageSearch.cshtml | 26 +- .../Shared/_PageSort.cshtml | 52 +-- .../Shared/_Pagination.cshtml | 4 +- .../Shared/_SearchResultsCount.cshtml | 4 +- .../_AllCompetencyAssessments.cshtml | 23 ++ .../_MyCompetencyAssessments.cshtml | 29 ++ .../Views/Frameworks/Index.cshtml | 10 +- .../Frameworks/Shared/_NavMenuItems.cshtml | 6 +- .../Shared/_PublishedWarning.cshtml | 2 +- .../RoleProfiles/_AllRoleProfiles.cshtml | 23 -- .../Views/RoleProfiles/_MyRoleProfiles.cshtml | 29 -- .../EnrolDelegateOnProfileAssessment.cshtml | 22 +- .../EnrolDelegateSetCompleteBy.cshtml | 2 +- .../Supervisor/EnrolDelegateSummary.cshtml | 4 +- .../Views/Supervisor/Index.cshtml | 6 +- ...SelectDelegateSupervisorRoleSummary.cshtml | 6 +- .../_DelegateProfileAssessmentGrid.cshtml | 2 +- 67 files changed, 1249 insertions(+), 1245 deletions(-) create mode 100644 DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs delete mode 100644 DigitalLearningSolutions.Data/DataServices/RoleProfileDataService.cs rename DigitalLearningSolutions.Data/Models/{RoleProfiles/RoleProfile.cs => CompetencyAssessments/CompetencyAssessment.cs} (74%) rename DigitalLearningSolutions.Data/Models/{RoleProfiles/RoleProfileBase.cs => CompetencyAssessments/CompetencyAssessmentBase.cs} (71%) rename DigitalLearningSolutions.Data/Models/{RoleProfiles => CompetencyAssessments}/NRPProfessionalGroups.cs (81%) rename DigitalLearningSolutions.Data/Models/{RoleProfiles => CompetencyAssessments}/NRPRoles.cs (67%) rename DigitalLearningSolutions.Data/Models/{RoleProfiles => CompetencyAssessments}/NRPSubGroups.cs (83%) create mode 100644 DigitalLearningSolutions.Data/Models/SessionData/CompetencyAssessments/SessionNewCompetencyAssessment.cs delete mode 100644 DigitalLearningSolutions.Data/Models/SessionData/RoleProfiles/SessionNewRoleProfile.cs rename DigitalLearningSolutions.Data/Models/SessionData/Supervisor/{SessionEnrolOnRoleProfile.cs => SessionEnrolOnCompetencyAssessment.cs} (84%) create mode 100644 DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs rename DigitalLearningSolutions.Web/Controllers/{RoleProfilesController/RoleProfilesController.cs => CompetencyAssessmentsController/CompetencyAssessmentsController.cs} (75%) delete mode 100644 DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfiles.cs create mode 100644 DigitalLearningSolutions.Web/Models/Enums/CompetencyAssessmentsTab.cs delete mode 100644 DigitalLearningSolutions.Web/Models/Enums/RoleProfilesTab.cs create mode 100644 DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs delete mode 100644 DigitalLearningSolutions.Web/Services/RoleProfileService.cs create mode 100644 DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/AllCompetencyAssessmentsViewModel.cs rename DigitalLearningSolutions.Web/ViewModels/{RoleProfiles/BaseRoleProfileViewModel.cs => CompetencyAssessments/BaseCompetencyAssessmentsPageViewModel.cs} (61%) create mode 100644 DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/CompetencyAssessmentsViewModel.cs create mode 100644 DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/MyCompetencyAssessmentsViewModel.cs create mode 100644 DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/ProfessionalGroupViewModel.cs delete mode 100644 DigitalLearningSolutions.Web/ViewModels/RoleProfiles/AllRoleProfilesViewModel.cs delete mode 100644 DigitalLearningSolutions.Web/ViewModels/RoleProfiles/MyRoleProfilesViewModel.cs delete mode 100644 DigitalLearningSolutions.Web/ViewModels/RoleProfiles/ProfessionalGroupViewModel.cs delete mode 100644 DigitalLearningSolutions.Web/ViewModels/RoleProfiles/RoleProfilesViewModel.cs rename DigitalLearningSolutions.Web/Views/{RoleProfiles/RoleProfile.cshtml => CompetencyAssessments/CompetencyAssessment.cshtml} (100%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/Index.cshtml (65%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/Name.cshtml (67%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/ProfessionalGroup.cshtml (52%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles/Shared/_ProfilesGrid.cshtml => CompetencyAssessments/Shared/_AssessmentsGrid.cshtml} (66%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles/Shared/_RoleProfilesSearchAndSort.cshtml => CompetencyAssessments/Shared/_CompetencyAssessmentsSearchAndSort.cshtml} (66%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/Shared/_PageSearch.cshtml (87%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/Shared/_PageSort.cshtml (80%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/Shared/_Pagination.cshtml (94%) rename DigitalLearningSolutions.Web/Views/{RoleProfiles => CompetencyAssessments}/Shared/_SearchResultsCount.cshtml (76%) create mode 100644 DigitalLearningSolutions.Web/Views/CompetencyAssessments/_AllCompetencyAssessments.cshtml create mode 100644 DigitalLearningSolutions.Web/Views/CompetencyAssessments/_MyCompetencyAssessments.cshtml delete mode 100644 DigitalLearningSolutions.Web/Views/RoleProfiles/_AllRoleProfiles.cshtml delete mode 100644 DigitalLearningSolutions.Web/Views/RoleProfiles/_MyRoleProfiles.cshtml diff --git a/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs b/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs new file mode 100644 index 0000000000..e2af8e2aa8 --- /dev/null +++ b/DigitalLearningSolutions.Data/DataServices/CompetencyAssessmentDataService.cs @@ -0,0 +1,197 @@ +namespace DigitalLearningSolutions.Data.DataServices +{ + using System.Collections.Generic; + using System.Data; + using System.Linq; + using Dapper; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using Microsoft.Extensions.Logging; + + public interface ICompetencyAssessmentDataService + { + //GET DATA + IEnumerable GetAllCompetencyAssessments(int adminId); + + IEnumerable GetCompetencyAssessmentsForAdminId(int adminId); + + CompetencyAssessmentBase? GetCompetencyAssessmentBaseById(int competencyAssessmentId, int adminId); + + CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId); + + IEnumerable GetNRPProfessionalGroups(); + + //UPDATE DATA + bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName); + + bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID); + //INSERT DATA + + //DELETE DATA + } + + public class CompetencyAssessmentDataService : ICompetencyAssessmentDataService + { + private const string SelfAssessmentBaseFields = @"sa.ID, sa.Name AS CompetencyAssessmentName, sa.Description, sa.BrandID, + sa.ParentSelfAssessmentID, + sa.[National], sa.[Public], sa.CreatedByAdminID AS OwnerAdminID, + sa.NRPProfessionalGroupID, + sa.NRPSubGroupID, + sa.NRPRoleID, + sa.PublishStatusID, CASE WHEN sa.CreatedByAdminID = @adminId THEN 3 WHEN sac.CanModify = 1 THEN 2 WHEN sac.CanModify = 0 THEN 1 ELSE 0 END AS UserRole"; + + private const string SelfAssessmentFields = + @", sa.CreatedDate, + (SELECT BrandName + FROM Brands + WHERE (BrandID = sa.BrandID)) AS Brand, + (SELECT [Name] + FROM SelfAssessments AS sa2 + WHERE (ID = sa.ParentSelfAssessmentID)) AS ParentSelfAssessment, + (SELECT Forename + ' ' + Surname + (CASE WHEN Active = 1 THEN '' ELSE ' (Inactive)' END) AS Expr1 + FROM AdminUsers + WHERE (AdminID = sa.CreatedByAdminID)) AS Owner, + sa.Archived, + sa.LastEdit, + (SELECT ProfessionalGroup + FROM NRPProfessionalGroups + WHERE (ID = sa.NRPProfessionalGroupID)) AS NRPProfessionalGroup, + (SELECT SubGroup + FROM NRPSubGroups + WHERE (ID = sa.NRPSubGroupID)) AS NRPSubGroup, + (SELECT RoleProfile + FROM NRPRoles + WHERE (ID = sa.NRPRoleID)) AS NRPRole, sar.ID AS SelfAssessmentReviewID"; + + private const string SelfAssessmentBaseTables = + @"SelfAssessments AS sa LEFT OUTER JOIN + SelfAssessmentCollaborators AS sac ON sac.SelfAssessmentID = sa.ID AND sac.AdminID = @adminId"; + + private const string SelfAssessmentTables = + @" LEFT OUTER JOIN + SelfAssessmentReviews AS sar ON sac.ID = sar.SelfAssessmentCollaboratorID AND sar.Archived IS NULL AND sar.ReviewComplete IS NULL"; + + private readonly IDbConnection connection; + private readonly ILogger logger; + + public CompetencyAssessmentDataService(IDbConnection connection, ILogger logger) + { + this.connection = connection; + this.logger = logger; + } + + public IEnumerable GetAllCompetencyAssessments(int adminId) + { + return connection.Query( + $@"SELECT {SelfAssessmentBaseFields} {SelfAssessmentFields} + FROM {SelfAssessmentBaseTables} {SelfAssessmentTables}", + new { adminId } + ); + } + + public IEnumerable GetCompetencyAssessmentsForAdminId(int adminId) + { + return connection.Query( + $@"SELECT {SelfAssessmentBaseFields} {SelfAssessmentFields} + FROM {SelfAssessmentBaseTables} {SelfAssessmentTables} + WHERE (sa.CreatedByAdminID = @adminId) OR + (@adminId IN + (SELECT AdminID + FROM SelfAssessmentCollaborators + WHERE (SelfAssessmentID = sa.ID)))", + new { adminId } + ); + } + + public CompetencyAssessmentBase? GetCompetencyAssessmentBaseById(int competencyAssessmentId, int adminId) + { + return connection.Query( + $@"SELECT {SelfAssessmentBaseFields} + FROM {SelfAssessmentBaseTables} + WHERE (sa.ID = @competencyAssessmentId)", + new { competencyAssessmentId, adminId } + ).FirstOrDefault(); + } + + public bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName) + { + if ((competencyAssessmentName.Length == 0) | (adminId < 1) | (competencyAssessmentId < 1)) + { + logger.LogWarning( + $"Not updating role profile name as it failed server side validation. AdminId: {adminId}, competencyAssessmentName: {competencyAssessmentName}, competencyAssessmentId: {competencyAssessmentId}" + ); + return false; + } + + var existingSelfAssessments = (int)connection.ExecuteScalar( + @"SELECT COUNT(*) FROM SelfAssessments WHERE [Name] = @competencyAssessmentName AND ID <> @competencyAssessmentId", + new { competencyAssessmentName, competencyAssessmentId } + ); + if (existingSelfAssessments > 0) + { + return false; + } + + var numberOfAffectedRows = connection.Execute( + @"UPDATE SelfAssessments SET [Name] = @competencyAssessmentName, UpdatedByAdminID = @adminId + WHERE ID = @competencyAssessmentId", + new { competencyAssessmentName, adminId, competencyAssessmentId } + ); + if (numberOfAffectedRows < 1) + { + logger.LogWarning( + "Not updating role profile name as db update failed. " + + $"SelfAssessmentName: {competencyAssessmentName}, admin id: {adminId}, competencyAssessmentId: {competencyAssessmentId}" + ); + return false; + } + + return true; + } + + public IEnumerable GetNRPProfessionalGroups() + { + return connection.Query( + @"SELECT ID, ProfessionalGroup, Active + FROM NRPProfessionalGroups + WHERE (Active = 1) + ORDER BY ProfessionalGroup" + ); + } + + public CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId) + { + return connection.Query( + $@"SELECT {SelfAssessmentBaseFields} + FROM {SelfAssessmentBaseTables} + WHERE (sa.Name = @competencyAssessmentName)", + new { competencyAssessmentName, adminId } + ).FirstOrDefault(); + } + + public bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID) + { + var sameCount = (int)connection.ExecuteScalar( + @"SELECT COUNT(*) FROM CompetencyAssessments WHERE ID = @competencyAssessmentId AND NRPProfessionalGroupID = @nrpProfessionalGroupID", + new { competencyAssessmentId, nrpProfessionalGroupID } + ); + if (sameCount > 0) + { + //same so don't update: + return false; + } + + //needs updating: + var numberOfAffectedRows = connection.Execute( + @"UPDATE SelfAssessments SET NRPProfessionalGroupID = @nrpProfessionalGroupID, NRPSubGroupID = NULL, NRPRoleID = NULL, UpdatedByAdminID = @adminId + WHERE ID = @competencyAssessmentId", + new { nrpProfessionalGroupID, adminId, competencyAssessmentId } + ); + if (numberOfAffectedRows > 0) + { + return true; + } + + return false; + } + } +} diff --git a/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs b/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs index fc259c4f4f..560cf5772a 100644 --- a/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/FrameworkDataService.cs @@ -2222,7 +2222,7 @@ public void ArchiveReviewRequest(int reviewId) FROM FrameworkCollaborators WHERE (FrameworkID = FW.ID) AND (IsDeleted=0)))) AS MyFrameworksCount, - (SELECT COUNT(*) FROM SelfAssessments) AS RoleProfileCount, + (SELECT COUNT(*) FROM SelfAssessments) AS CompetencyAssessmentCount, (SELECT COUNT(*) FROM SelfAssessments AS RP LEFT OUTER JOIN SelfAssessmentCollaborators AS RPC ON RPC.SelfAssessmentID = RP.ID AND RPC.AdminID = @adminId @@ -2230,7 +2230,7 @@ FROM FrameworkCollaborators (@adminId IN (SELECT AdminID FROM SelfAssessmentCollaborators - WHERE (SelfAssessmentID = RP.ID)))) AS MyRoleProfileCount", + WHERE (SelfAssessmentID = RP.ID)))) AS MyCompetencyAssessmentCount", new { adminId } ).FirstOrDefault(); } @@ -2240,7 +2240,7 @@ public IEnumerable GetDashboardToDoItems(int adminId) return connection.Query( @"SELECT FW.ID AS FrameworkID, - 0 AS RoleProfileID, + 0 AS CompetencyAssessmentID, FW.FrameworkName AS ItemName, AU.Forename + ' ' + AU.Surname + (CASE WHEN AU.Active = 1 THEN '' ELSE ' (Inactive)' END) AS RequestorName, FWR.SignOffRequired, diff --git a/DigitalLearningSolutions.Data/DataServices/RoleProfileDataService.cs b/DigitalLearningSolutions.Data/DataServices/RoleProfileDataService.cs deleted file mode 100644 index 7e37d4ff03..0000000000 --- a/DigitalLearningSolutions.Data/DataServices/RoleProfileDataService.cs +++ /dev/null @@ -1,197 +0,0 @@ -namespace DigitalLearningSolutions.Data.DataServices -{ - using System.Collections.Generic; - using System.Data; - using System.Linq; - using Dapper; - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using Microsoft.Extensions.Logging; - - public interface IRoleProfileDataService - { - //GET DATA - IEnumerable GetAllRoleProfiles(int adminId); - - IEnumerable GetRoleProfilesForAdminId(int adminId); - - RoleProfileBase? GetRoleProfileBaseById(int roleProfileId, int adminId); - - RoleProfileBase? GetRoleProfileByName(string roleProfileName, int adminId); - - IEnumerable GetNRPProfessionalGroups(); - - //UPDATE DATA - bool UpdateRoleProfileName(int roleProfileId, int adminId, string roleProfileName); - - bool UpdateRoleProfileProfessionalGroup(int roleProfileId, int adminId, int? nrpProfessionalGroupID); - //INSERT DATA - - //DELETE DATA - } - - public class RoleProfileDataService : IRoleProfileDataService - { - private const string SelfAssessmentBaseFields = @"rp.ID, rp.Name AS RoleProfileName, rp.Description, rp.BrandID, - rp.ParentSelfAssessmentID, - rp.[National], rp.[Public], rp.CreatedByAdminID AS OwnerAdminID, - rp.NRPProfessionalGroupID, - rp.NRPSubGroupID, - rp.NRPRoleID, - rp.PublishStatusID, CASE WHEN rp.CreatedByAdminID = @adminId THEN 3 WHEN rpc.CanModify = 1 THEN 2 WHEN rpc.CanModify = 0 THEN 1 ELSE 0 END AS UserRole"; - - private const string SelfAssessmentFields = - @", rp.CreatedDate, - (SELECT BrandName - FROM Brands - WHERE (BrandID = rp.BrandID)) AS Brand, - (SELECT [Name] - FROM SelfAssessments AS rp2 - WHERE (ID = rp.ParentSelfAssessmentID)) AS ParentSelfAssessment, - (SELECT Forename + ' ' + Surname + (CASE WHEN Active = 1 THEN '' ELSE ' (Inactive)' END) AS Expr1 - FROM AdminUsers - WHERE (AdminID = rp.CreatedByAdminID)) AS Owner, - rp.Archived, - rp.LastEdit, - (SELECT ProfessionalGroup - FROM NRPProfessionalGroups - WHERE (ID = rp.NRPProfessionalGroupID)) AS NRPProfessionalGroup, - (SELECT SubGroup - FROM NRPSubGroups - WHERE (ID = rp.NRPSubGroupID)) AS NRPSubGroup, - (SELECT RoleProfile - FROM NRPRoles - WHERE (ID = rp.NRPRoleID)) AS NRPRole, rpr.ID AS SelfAssessmentReviewID"; - - private const string SelfAssessmentBaseTables = - @"SelfAssessments AS rp LEFT OUTER JOIN - SelfAssessmentCollaborators AS rpc ON rpc.SelfAssessmentID = rp.ID AND rpc.AdminID = @adminId"; - - private const string SelfAssessmentTables = - @" LEFT OUTER JOIN - SelfAssessmentReviews AS rpr ON rpc.ID = rpr.SelfAssessmentCollaboratorID AND rpr.Archived IS NULL AND rpr.ReviewComplete IS NULL"; - - private readonly IDbConnection connection; - private readonly ILogger logger; - - public RoleProfileDataService(IDbConnection connection, ILogger logger) - { - this.connection = connection; - this.logger = logger; - } - - public IEnumerable GetAllRoleProfiles(int adminId) - { - return connection.Query( - $@"SELECT {SelfAssessmentBaseFields} {SelfAssessmentFields} - FROM {SelfAssessmentBaseTables} {SelfAssessmentTables}", - new { adminId } - ); - } - - public IEnumerable GetRoleProfilesForAdminId(int adminId) - { - return connection.Query( - $@"SELECT {SelfAssessmentBaseFields} {SelfAssessmentFields} - FROM {SelfAssessmentBaseTables} {SelfAssessmentTables} - WHERE (rp.CreatedByAdminID = @adminId) OR - (@adminId IN - (SELECT AdminID - FROM SelfAssessmentCollaborators - WHERE (SelfAssessmentID = rp.ID)))", - new { adminId } - ); - } - - public RoleProfileBase? GetRoleProfileBaseById(int roleProfileId, int adminId) - { - return connection.Query( - $@"SELECT {SelfAssessmentBaseFields} - FROM {SelfAssessmentBaseTables} - WHERE (rp.ID = @roleProfileId)", - new { roleProfileId, adminId } - ).FirstOrDefault(); - } - - public bool UpdateRoleProfileName(int roleProfileId, int adminId, string roleProfileName) - { - if ((roleProfileName.Length == 0) | (adminId < 1) | (roleProfileId < 1)) - { - logger.LogWarning( - $"Not updating role profile name as it failed server side validation. AdminId: {adminId}, roleProfileName: {roleProfileName}, roleProfileId: {roleProfileId}" - ); - return false; - } - - var existingSelfAssessments = (int)connection.ExecuteScalar( - @"SELECT COUNT(*) FROM SelfAssessments WHERE [Name] = @roleProfileName AND ID <> @roleProfileId", - new { roleProfileName, roleProfileId } - ); - if (existingSelfAssessments > 0) - { - return false; - } - - var numberOfAffectedRows = connection.Execute( - @"UPDATE SelfAssessments SET [Name] = @roleProfileName, UpdatedByAdminID = @adminId - WHERE ID = @roleProfileId", - new { roleProfileName, adminId, roleProfileId } - ); - if (numberOfAffectedRows < 1) - { - logger.LogWarning( - "Not updating role profile name as db update failed. " + - $"SelfAssessmentName: {roleProfileName}, admin id: {adminId}, roleProfileId: {roleProfileId}" - ); - return false; - } - - return true; - } - - public IEnumerable GetNRPProfessionalGroups() - { - return connection.Query( - @"SELECT ID, ProfessionalGroup, Active - FROM NRPProfessionalGroups - WHERE (Active = 1) - ORDER BY ProfessionalGroup" - ); - } - - public RoleProfileBase? GetRoleProfileByName(string roleProfileName, int adminId) - { - return connection.Query( - $@"SELECT {SelfAssessmentBaseFields} - FROM {SelfAssessmentBaseTables} - WHERE (rp.Name = @roleProfileName)", - new { roleProfileName, adminId } - ).FirstOrDefault(); - } - - public bool UpdateRoleProfileProfessionalGroup(int roleProfileId, int adminId, int? nrpProfessionalGroupID) - { - var sameCount = (int)connection.ExecuteScalar( - @"SELECT COUNT(*) FROM RoleProfiles WHERE ID = @roleProfileId AND NRPProfessionalGroupID = @nrpProfessionalGroupID", - new { roleProfileId, nrpProfessionalGroupID } - ); - if (sameCount > 0) - { - //same so don't update: - return false; - } - - //needs updating: - var numberOfAffectedRows = connection.Execute( - @"UPDATE SelfAssessments SET NRPProfessionalGroupID = @nrpProfessionalGroupID, NRPSubGroupID = NULL, NRPRoleID = NULL, UpdatedByAdminID = @adminId - WHERE ID = @roleProfileId", - new { nrpProfessionalGroupID, adminId, roleProfileId } - ); - if (numberOfAffectedRows > 0) - { - return true; - } - - return false; - } - } -} diff --git a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs index 0d8fab0715..c97ecf67a8 100644 --- a/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs @@ -1,7 +1,7 @@ namespace DigitalLearningSolutions.Data.DataServices { using Dapper; - using DigitalLearningSolutions.Data.Models.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using DigitalLearningSolutions.Data.Models.SelfAssessments; using DigitalLearningSolutions.Data.Models.Supervisor; using Microsoft.Extensions.Logging; @@ -23,8 +23,8 @@ public interface ISupervisorDataService IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId); - IEnumerable GetAvailableRoleProfilesForDelegate(int candidateId, int centreId, int? categoryId); - RoleProfile? GetRoleProfileById(int selfAssessmentId); + IEnumerable GetAvailableCompetencyAssessmentsForDelegate(int candidateId, int centreId, int? categoryId); + CompetencyAssessment? GetCompetencyAssessmentById(int selfAssessmentId); IEnumerable GetSupervisorRolesForSelfAssessment(int selfAssessmentId); IEnumerable GetSupervisorRolesBySelfAssessmentIdForSupervisor(int selfAssessmentId); IEnumerable GetDelegateNominatableSupervisorRolesForSelfAssessment(int selfAssessmentId); @@ -576,7 +576,7 @@ public bool RemoveSupervisorDelegateById(int supervisorDelegateId, int delegateU public IEnumerable GetSelfAssessmentsForSupervisorDelegateId(int supervisorDelegateId, int? adminIdCategoryId) { return connection.Query( - @$"SELECT {delegateSelfAssessmentFields}, COALESCE(ca.LastAccessed, ca.StartedDate) AS LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.RoleProfile, sg.SubGroup, pg.ProfessionalGroup,CONVERT(BIT, IIF(cas.CandidateAssessmentID IS NULL, 0, 1)) AS IsAssignedToSupervisor,ca.DelegateUserID, + @$"SELECT {delegateSelfAssessmentFields}, COALESCE(ca.LastAccessed, ca.StartedDate) AS LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.CompetencyAssessment, sg.SubGroup, pg.ProfessionalGroup,CONVERT(BIT, IIF(cas.CandidateAssessmentID IS NULL, 0, 1)) AS IsAssignedToSupervisor,ca.DelegateUserID, (SELECT COUNT(*) AS Expr1 FROM CandidateAssessmentSupervisorVerifications AS casv WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Requested IS NOT NULL) AND (Verified IS NULL)) AS SignOffRequested, @@ -695,7 +695,7 @@ FROM SelfAssessmentResults AS sar2 public DelegateSelfAssessment? GetSelfAssessmentByCandidateAssessmentId(int candidateAssessmentId, int adminId, int? adminIdCategoryId) { return connection.Query( - @$"SELECT ca.ID, sa.ID AS SelfAssessmentID, sa.Name AS RoleName, sa.SupervisorSelfAssessmentReview, sa.SupervisorResultsReview, sa.ReviewerCommentsLabel, COALESCE (sasr.RoleName, 'Supervisor') AS SupervisorRoleTitle, ca.StartedDate, ca.LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.RoleProfile, sg.SubGroup, pg.ProfessionalGroup, sa.SupervisorResultsReview AS IsSupervisorResultsReviewed, + @$"SELECT ca.ID, sa.ID AS SelfAssessmentID, sa.Name AS RoleName, sa.SupervisorSelfAssessmentReview, sa.SupervisorResultsReview, sa.ReviewerCommentsLabel, COALESCE (sasr.RoleName, 'Supervisor') AS SupervisorRoleTitle, ca.StartedDate, ca.LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.CompetencyAssessment, sg.SubGroup, pg.ProfessionalGroup, sa.SupervisorResultsReview AS IsSupervisorResultsReviewed, (SELECT COUNT(*) AS Expr1 FROM CandidateAssessmentSupervisorVerifications AS casv WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Requested IS NOT NULL) AND (Verified IS NULL)) AS SignOffRequested, @@ -763,10 +763,10 @@ public int RemoveSelfAssessmentResultSupervisorVerificationById(int id) } return numberOfAffectedRows; } - public IEnumerable GetAvailableRoleProfilesForDelegate(int delegateUserId, int centreId, int? categoryId) + public IEnumerable GetAvailableCompetencyAssessmentsForDelegate(int delegateUserId, int centreId, int? categoryId) { - return connection.Query( - $@"SELECT rp.ID, rp.Name AS RoleProfileName, rp.Description, rp.BrandID, rp.ParentSelfAssessmentID, rp.[National], rp.[Public], rp.CreatedByAdminID AS OwnerAdminID, rp.NRPProfessionalGroupID, rp.NRPSubGroupID, rp.NRPRoleID, rp.PublishStatusID, 0 AS UserRole, rp.CreatedDate, + return connection.Query( + $@"SELECT rp.ID, rp.Name AS CompetencyAssessmentName, rp.Description, rp.BrandID, rp.ParentSelfAssessmentID, rp.[National], rp.[Public], rp.CreatedByAdminID AS OwnerAdminID, rp.NRPProfessionalGroupID, rp.NRPSubGroupID, rp.NRPRoleID, rp.PublishStatusID, 0 AS UserRole, rp.CreatedDate, (SELECT BrandName FROM Brands WHERE (BrandID = rp.BrandID)) AS Brand, '' AS ParentSelfAssessment, '' AS Owner, rp.Archived, rp.LastEdit, @@ -776,7 +776,7 @@ FROM NRPProfessionalGroups (SELECT SubGroup FROM NRPSubGroups WHERE (ID = rp.NRPSubGroupID)) AS NRPSubGroup, - (SELECT RoleProfile + (SELECT CompetencyAssessment FROM NRPRoles WHERE (ID = rp.NRPRoleID)) AS NRPRole, 0 AS SelfAssessmentReviewID FROM SelfAssessments AS rp INNER JOIN @@ -791,10 +791,10 @@ FROM CandidateAssessments AS CA ); } - public RoleProfile? GetRoleProfileById(int selfAssessmentId) + public CompetencyAssessment? GetCompetencyAssessmentById(int selfAssessmentId) { - return connection.Query( - $@"SELECT ID, Name AS RoleProfileName, Description, BrandID, ParentSelfAssessmentID, [National], [Public], CreatedByAdminID AS OwnerAdminID, NRPProfessionalGroupID, NRPSubGroupID, NRPRoleID, PublishStatusID, 0 AS UserRole, CreatedDate, + return connection.Query( + $@"SELECT ID, Name AS CompetencyAssessmentName, Description, BrandID, ParentSelfAssessmentID, [National], [Public], CreatedByAdminID AS OwnerAdminID, NRPProfessionalGroupID, NRPSubGroupID, NRPRoleID, PublishStatusID, 0 AS UserRole, CreatedDate, (SELECT BrandName FROM Brands WHERE (BrandID = rp.BrandID)) AS Brand, @@ -806,7 +806,7 @@ FROM NRPProfessionalGroups (SELECT SubGroup FROM NRPSubGroups WHERE (ID = rp.NRPSubGroupID)) AS NRPSubGroup, - (SELECT RoleProfile + (SELECT CompetencyAssessment FROM NRPRoles WHERE (ID = rp.NRPRoleID)) AS NRPRole, 0 AS SelfAssessmentReviewID FROM SelfAssessments AS rp @@ -1113,7 +1113,7 @@ FROM CandidateAssessmentSupervisors { return connection.Query( @"SELECT ca.ID, ca.SelfAssessmentID, sa.Name AS RoleName, sa.ReviewerCommentsLabel, COALESCE (sasr.SelfAssessmentReview, 1) AS SelfAssessmentReview, COALESCE (sasr.ResultsReview, 1) AS SupervisorResultsReview, COALESCE (sasr.RoleName, 'Supervisor') AS SupervisorRoleTitle, ca.StartedDate, - ca.LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, npg.ProfessionalGroup, nsg.SubGroup, nr.RoleProfile, casv.ID AS CandidateAssessmentSupervisorVerificationId, + ca.LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, npg.ProfessionalGroup, nsg.SubGroup, nr.CompetencyAssessment, casv.ID AS CandidateAssessmentSupervisorVerificationId, (SELECT COUNT(sas1.CompetencyID) AS CompetencyAssessmentQuestionCount FROM SelfAssessmentStructure AS sas1 INNER JOIN CandidateAssessments AS ca1 ON sas1.SelfAssessmentID = ca1.SelfAssessmentID INNER JOIN diff --git a/DigitalLearningSolutions.Data/Enums/NavMenuTab.cs b/DigitalLearningSolutions.Data/Enums/NavMenuTab.cs index a0d60c8399..7691f565e9 100644 --- a/DigitalLearningSolutions.Data/Enums/NavMenuTab.cs +++ b/DigitalLearningSolutions.Data/Enums/NavMenuTab.cs @@ -91,9 +91,9 @@ public class NavMenuTab : Enumeration nameof(Frameworks) ); - public static readonly NavMenuTab RolesProfiles = new NavMenuTab( + public static readonly NavMenuTab CompetencyAssessments = new NavMenuTab( 17, - nameof(RolesProfiles) + nameof(CompetencyAssessments) ); public static readonly NavMenuTab LogOut = new NavMenuTab( diff --git a/DigitalLearningSolutions.Data/Models/RoleProfiles/RoleProfile.cs b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessment.cs similarity index 74% rename from DigitalLearningSolutions.Data/Models/RoleProfiles/RoleProfile.cs rename to DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessment.cs index ec1970fc92..f67d03ecbd 100644 --- a/DigitalLearningSolutions.Data/Models/RoleProfiles/RoleProfile.cs +++ b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessment.cs @@ -1,8 +1,8 @@ -namespace DigitalLearningSolutions.Data.Models.RoleProfiles +namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments { using System; using System.ComponentModel.DataAnnotations; - public class RoleProfile : RoleProfileBase + public class CompetencyAssessment : CompetencyAssessmentBase { public DateTime CreatedDate { get; set; } public string? Brand @@ -10,14 +10,14 @@ public string? Brand get => brand; set => brand = GetValidOrNull(value); } - public string? ParentRoleProfile { get; set; } + public string? ParentCompetencyAssessment { get; set; } public string? Owner { get; set; } public DateTime? Archived { get; set; } public DateTime LastEdit { get; set; } public string? NRPProfessionalGroup { get; set; } public string? NRPSubGroup { get; set; } public string? NRPRole { get; set; } - public int? RoleProfileReviewID { get; set; } + public int? CompetencyAssessmentReviewID { get; set; } private string? brand; private static string? GetValidOrNull(string? toValidate) { diff --git a/DigitalLearningSolutions.Data/Models/RoleProfiles/RoleProfileBase.cs b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessmentBase.cs similarity index 71% rename from DigitalLearningSolutions.Data/Models/RoleProfiles/RoleProfileBase.cs rename to DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessmentBase.cs index 1c843fae46..23ec8fede7 100644 --- a/DigitalLearningSolutions.Data/Models/RoleProfiles/RoleProfileBase.cs +++ b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/CompetencyAssessmentBase.cs @@ -1,16 +1,16 @@ -namespace DigitalLearningSolutions.Data.Models.RoleProfiles +namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments { using System; using System.ComponentModel.DataAnnotations; - public class RoleProfileBase + public class CompetencyAssessmentBase { public int ID { get; set; } [StringLength(255, MinimumLength = 3)] [Required] - public string RoleProfileName { get; set; } = string.Empty; + public string CompetencyAssessmentName { get; set; } = string.Empty; public string? Description { get; set; } public int BrandID { get; set; } - public int? ParentRoleProfileID { get; set; } + public int? ParentCompetencyAssessmentID { get; set; } public bool National { get; set; } public bool Public { get; set; } public int OwnerAdminID { get; set; } @@ -22,3 +22,4 @@ public class RoleProfileBase } } + diff --git a/DigitalLearningSolutions.Data/Models/RoleProfiles/NRPProfessionalGroups.cs b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPProfessionalGroups.cs similarity index 81% rename from DigitalLearningSolutions.Data/Models/RoleProfiles/NRPProfessionalGroups.cs rename to DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPProfessionalGroups.cs index de1f9e4588..bdc4f6942a 100644 --- a/DigitalLearningSolutions.Data/Models/RoleProfiles/NRPProfessionalGroups.cs +++ b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPProfessionalGroups.cs @@ -1,4 +1,4 @@ -namespace DigitalLearningSolutions.Data.Models.RoleProfiles +namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments { using System.ComponentModel.DataAnnotations; public class NRPProfessionalGroups @@ -10,3 +10,4 @@ public class NRPProfessionalGroups public bool Active { get; set; } } } + diff --git a/DigitalLearningSolutions.Data/Models/RoleProfiles/NRPRoles.cs b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPRoles.cs similarity index 67% rename from DigitalLearningSolutions.Data/Models/RoleProfiles/NRPRoles.cs rename to DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPRoles.cs index f404bfb243..22cba2ada8 100644 --- a/DigitalLearningSolutions.Data/Models/RoleProfiles/NRPRoles.cs +++ b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPRoles.cs @@ -1,4 +1,4 @@ -namespace DigitalLearningSolutions.Data.Models.RoleProfiles +namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments { using System.ComponentModel.DataAnnotations; public class NRPRoles @@ -7,7 +7,7 @@ public class NRPRoles public int NRPSubGroupID { get; set; } [StringLength(255, MinimumLength = 3)] [Required] - public string RoleProfile { get; set; } = string.Empty; + public string ProfileName { get; set; } = string.Empty; public bool Active { get; set; } } } diff --git a/DigitalLearningSolutions.Data/Models/RoleProfiles/NRPSubGroups.cs b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPSubGroups.cs similarity index 83% rename from DigitalLearningSolutions.Data/Models/RoleProfiles/NRPSubGroups.cs rename to DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPSubGroups.cs index 6d43b936a2..fda19bcb09 100644 --- a/DigitalLearningSolutions.Data/Models/RoleProfiles/NRPSubGroups.cs +++ b/DigitalLearningSolutions.Data/Models/CompetencyAssessments/NRPSubGroups.cs @@ -1,4 +1,4 @@ -namespace DigitalLearningSolutions.Data.Models.RoleProfiles +namespace DigitalLearningSolutions.Data.Models.CompetencyAssessments { using System.ComponentModel.DataAnnotations; public class NRPSubGroups diff --git a/DigitalLearningSolutions.Data/Models/Frameworks/DashboardData.cs b/DigitalLearningSolutions.Data/Models/Frameworks/DashboardData.cs index f5d28bd284..207e61079c 100644 --- a/DigitalLearningSolutions.Data/Models/Frameworks/DashboardData.cs +++ b/DigitalLearningSolutions.Data/Models/Frameworks/DashboardData.cs @@ -4,7 +4,7 @@ public class DashboardData { public int FrameworksCount { get; set; } public int MyFrameworksCount { get; set; } - public int RoleProfileCount { get; set; } - public int MyRoleProfileCount { get; set; } + public int CompetencyAssessmentCount { get; set; } + public int MyCompetencyAssessmentCount { get; set; } } } diff --git a/DigitalLearningSolutions.Data/Models/Frameworks/DashboardToDoItem.cs b/DigitalLearningSolutions.Data/Models/Frameworks/DashboardToDoItem.cs index 96ee4e8326..dc7e6b0386 100644 --- a/DigitalLearningSolutions.Data/Models/Frameworks/DashboardToDoItem.cs +++ b/DigitalLearningSolutions.Data/Models/Frameworks/DashboardToDoItem.cs @@ -4,7 +4,7 @@ public class DashboardToDoItem { public int? FrameworkID { get; set; } - public int? RoleProfileID { get; set; } + public int? CompetencyAssessmentID { get; set; } public string ItemName { get; set; } = string.Empty; public string RequestorName { get; set; } = string.Empty; public bool SignOffRequired { get; set; } diff --git a/DigitalLearningSolutions.Data/Models/SessionData/CompetencyAssessments/SessionNewCompetencyAssessment.cs b/DigitalLearningSolutions.Data/Models/SessionData/CompetencyAssessments/SessionNewCompetencyAssessment.cs new file mode 100644 index 0000000000..b8d572404f --- /dev/null +++ b/DigitalLearningSolutions.Data/Models/SessionData/CompetencyAssessments/SessionNewCompetencyAssessment.cs @@ -0,0 +1,15 @@ +namespace DigitalLearningSolutions.Data.Models.SessionData.CompetencyAssessments +{ + using System; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + public class SessionNewCompetencyAssessment + { + public SessionNewCompetencyAssessment() + { + Id = new Guid(); + CompetencyAssessmentBase = new CompetencyAssessmentBase(); + } + public Guid Id { get; set; } + public CompetencyAssessmentBase CompetencyAssessmentBase { get; set; } + } +} diff --git a/DigitalLearningSolutions.Data/Models/SessionData/RoleProfiles/SessionNewRoleProfile.cs b/DigitalLearningSolutions.Data/Models/SessionData/RoleProfiles/SessionNewRoleProfile.cs deleted file mode 100644 index 617c8ebb64..0000000000 --- a/DigitalLearningSolutions.Data/Models/SessionData/RoleProfiles/SessionNewRoleProfile.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace DigitalLearningSolutions.Data.Models.SessionData.RoleProfiles -{ - using System; - using DigitalLearningSolutions.Data.Models.RoleProfiles; - public class SessionNewRoleProfile - { - public SessionNewRoleProfile() - { - Id = new Guid(); - RoleProfileBase = new RoleProfileBase(); - } - public Guid Id { get; set; } - public RoleProfileBase RoleProfileBase { get; set; } - } -} diff --git a/DigitalLearningSolutions.Data/Models/SessionData/Supervisor/SessionEnrolOnRoleProfile.cs b/DigitalLearningSolutions.Data/Models/SessionData/Supervisor/SessionEnrolOnCompetencyAssessment.cs similarity index 84% rename from DigitalLearningSolutions.Data/Models/SessionData/Supervisor/SessionEnrolOnRoleProfile.cs rename to DigitalLearningSolutions.Data/Models/SessionData/Supervisor/SessionEnrolOnCompetencyAssessment.cs index 29b7b1b261..1fd5fee129 100644 --- a/DigitalLearningSolutions.Data/Models/SessionData/Supervisor/SessionEnrolOnRoleProfile.cs +++ b/DigitalLearningSolutions.Data/Models/SessionData/Supervisor/SessionEnrolOnCompetencyAssessment.cs @@ -1,7 +1,7 @@ namespace DigitalLearningSolutions.Data.Models.SessionData.Supervisor { using System; - public class SessionEnrolOnRoleProfile + public class SessionEnrolOnCompetencyAssessment { public int? SelfAssessmentID { get; set; } public DateTime? CompleteByDate { get; set; } diff --git a/DigitalLearningSolutions.Data/Models/Supervisor/DelegateSelfAssessment.cs b/DigitalLearningSolutions.Data/Models/Supervisor/DelegateSelfAssessment.cs index 51ddb99a85..014de6be9f 100644 --- a/DigitalLearningSolutions.Data/Models/Supervisor/DelegateSelfAssessment.cs +++ b/DigitalLearningSolutions.Data/Models/Supervisor/DelegateSelfAssessment.cs @@ -22,7 +22,7 @@ public class DelegateSelfAssessment public string? DescriptionLabel { get; set; } public string? ReviewerCommentsLabel { get; set; } public string? SubGroup { get; set; } - public string? RoleProfile { get; set; } + public string? CompetencyAssessment { get; set; } public int SignOffRequested { get; set; } public int ResultsVerificationRequests { get; set; } public bool IsSupervisorResultsReviewed { get; set; } diff --git a/DigitalLearningSolutions.Web.Tests/TestHelpers/SupervisorTagTestHelper.cs b/DigitalLearningSolutions.Web.Tests/TestHelpers/SupervisorTagTestHelper.cs index e55cc5fe1a..ba437edd2d 100644 --- a/DigitalLearningSolutions.Web.Tests/TestHelpers/SupervisorTagTestHelper.cs +++ b/DigitalLearningSolutions.Web.Tests/TestHelpers/SupervisorTagTestHelper.cs @@ -101,7 +101,7 @@ public static DelegateSelfAssessment CreateDefaultDelegateSelfAssessment( string? descriptionLabel = null, string? reviewerCommentsLabel = null, string? subGroup = null, - string? roleProfile = null, + string? competencyAssessment = null, int signOffRequested =1, int resultsVerificationRequests =1, bool isSupervisorResultsReviewed =false, @@ -116,7 +116,7 @@ public static DelegateSelfAssessment CreateDefaultDelegateSelfAssessment( ResultsVerificationRequests = resultsVerificationRequests, ReviewerCommentsLabel = reviewerCommentsLabel, SubGroup = subGroup, - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SignOffRequested = signOffRequested, SupervisorResultsReview = supervisorResultsReview, SupervisorSelfAssessmentReview= supervisorSelfAssessmentReview, diff --git a/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs new file mode 100644 index 0000000000..1441624e6f --- /dev/null +++ b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessments.cs @@ -0,0 +1,306 @@ +namespace DigitalLearningSolutions.Web.Controllers.CompetencyAssessmentsController +{ + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Logging; + using DigitalLearningSolutions.Web.Extensions; + using DigitalLearningSolutions.Data.Models.SessionData.CompetencyAssessments; + using Microsoft.AspNetCore.Http; + using System; + using System.Collections.Generic; + using DigitalLearningSolutions.Data.Enums; + using DigitalLearningSolutions.Web.Attributes; + using DigitalLearningSolutions.Web.Models.Enums; + + public partial class CompetencyAssessmentsController + { + private const string CookieName = "DLSFrameworkService"; + [Route("/CompetencyAssessments/View/{tabname}/{page=1:int}")] + [SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))] + public IActionResult ViewCompetencyAssessments(string tabname, string? searchString = null, + string sortBy = CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentName, + string sortDirection = BaseCompetencyAssessmentsPageViewModel.AscendingText, + int page = 1 + ) + { + var adminId = GetAdminID(); + var isWorkforceManager = GetIsWorkforceManager(); + var isWorkforceContributor = GetIsWorkforceContributor(); + IEnumerable competencyAssessments; + if (tabname == "All") + { + competencyAssessments = competencyAssessmentService.GetAllCompetencyAssessments(adminId); + } + else + { + if (!isWorkforceContributor && !isWorkforceManager) + { + return RedirectToAction("ViewCompetencyAssessments", "CompetencyAssessments", new { tabname = "All" }); + } + competencyAssessments = competencyAssessmentService.GetCompetencyAssessmentsForAdminId(adminId); + } + if (competencyAssessments == null) + { + logger.LogWarning($"Attempt to display competency assessments for admin {adminId} returned null."); + return StatusCode(403); + } + MyCompetencyAssessmentsViewModel myCompetencyAssessments; + AllCompetencyAssessmentsViewModel allCompetencyAssessments; + if (tabname == "Mine") + { + myCompetencyAssessments = new MyCompetencyAssessmentsViewModel( + competencyAssessments, + searchString, + sortBy, + sortDirection, + page, + isWorkforceManager); + allCompetencyAssessments = new AllCompetencyAssessmentsViewModel( + new List(), + searchString, + sortBy, + sortDirection, + page + ); + } + else + { + allCompetencyAssessments = new AllCompetencyAssessmentsViewModel( + competencyAssessments, + searchString, + sortBy, + sortDirection, + page); + myCompetencyAssessments = new MyCompetencyAssessmentsViewModel( + new List(), + searchString, + sortBy, + sortDirection, + page, + isWorkforceManager + ); + } + + var currentTab = tabname == "All" ? CompetencyAssessmentsTab.AllCompetencyAssessments : CompetencyAssessmentsTab.MyCompetencyAssessments; + CompetencyAssessmentsViewModel? model = new CompetencyAssessmentsViewModel( + isWorkforceManager, + isWorkforceContributor, + allCompetencyAssessments, + myCompetencyAssessments, + currentTab + ); + return View("Index", model); + } + public IActionResult StartNewCompetencyAssessmentSession() + { + var adminId = GetAdminID(); + TempData.Clear(); + var sessionNewCompetencyAssessment = new SessionNewCompetencyAssessment(); + if (!Request.Cookies.ContainsKey(CookieName)) + { + var id = Guid.NewGuid(); + + Response.Cookies.Append( + CookieName, + id.ToString(), + new CookieOptions + { + Expires = DateTimeOffset.UtcNow.AddDays(30) + }); + + sessionNewCompetencyAssessment.Id = id; + } + else + { + if (Request.Cookies.TryGetValue(CookieName, out string idString)) + { + sessionNewCompetencyAssessment.Id = Guid.Parse(idString); + } + else + { + var id = Guid.NewGuid(); + + Response.Cookies.Append( + CookieName, + id.ToString(), + new CookieOptions + { + Expires = DateTimeOffset.UtcNow.AddDays(30) + }); + sessionNewCompetencyAssessment.Id = id; + } + } + CompetencyAssessmentBase competencyAssessmentBase = new CompetencyAssessmentBase() + { + BrandID = 6, + OwnerAdminID = adminId, + National = true, + Public = true, + PublishStatusID = 1, + UserRole = 3 + }; + sessionNewCompetencyAssessment.CompetencyAssessmentBase = competencyAssessmentBase; + TempData.Set(sessionNewCompetencyAssessment); + return RedirectToAction("CompetencyAssessmentName", "CompetencyAssessments", new { actionname = "New" }); + } + + [Route("/CompetencyAssessments/Name/{actionname}/{competencyAssessmentId}")] + [Route("/CompetencyAssessments/Name/{actionname}")] + [SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))] + public IActionResult CompetencyAssessmentName(string actionname, int competencyAssessmentId = 0) + { + var adminId = GetAdminID(); + CompetencyAssessmentBase? competencyAssessmentBase; + if (competencyAssessmentId > 0) + { + competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId); + if (competencyAssessmentBase == null) + { + logger.LogWarning($"Failed to load name page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}"); + return StatusCode(500); + } + if (competencyAssessmentBase.UserRole < 2) + { + return StatusCode(403); + } + } + else + { + SessionNewCompetencyAssessment sessionNewCompetencyAssessment = TempData.Peek(); + TempData.Set(sessionNewCompetencyAssessment); + competencyAssessmentBase = sessionNewCompetencyAssessment.CompetencyAssessmentBase; + TempData.Set(sessionNewCompetencyAssessment); + } + return View("Name", competencyAssessmentBase); + } + + [HttpPost] + [Route("/CompetencyAssessments/Name/{actionname}/{competencyAssessmentId}")] + [Route("/CompetencyAssessments/Name/{actionname}")] + [SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))] + public IActionResult SaveProfileName(CompetencyAssessmentBase competencyAssessmentBase, string actionname, int competencyAssessmentId = 0) + { + if (!ModelState.IsValid) + { + ModelState.Remove(nameof(CompetencyAssessmentBase.CompetencyAssessmentName)); + ModelState.AddModelError(nameof(CompetencyAssessmentBase.CompetencyAssessmentName), "Please enter a valid competency assessment name (between 3 and 255 characters)"); + // do something + return View("Name", competencyAssessmentBase); + } + else + { + if (actionname == "New") + { + var sameItems = competencyAssessmentService.GetCompetencyAssessmentByName(competencyAssessmentBase.CompetencyAssessmentName, GetAdminID()); + if (sameItems != null) + { + ModelState.Remove(nameof(CompetencyAssessmentBase.CompetencyAssessmentName)); + ModelState.AddModelError(nameof(CompetencyAssessmentBase.CompetencyAssessmentName), "Another competency assessment exists with that name. Please choose a different name."); + // do something + return View("Name", competencyAssessmentBase); + } + SessionNewCompetencyAssessment sessionNewCompetencyAssessment = TempData.Peek(); + sessionNewCompetencyAssessment.CompetencyAssessmentBase = competencyAssessmentBase; + TempData.Set(sessionNewCompetencyAssessment); + return RedirectToAction("CompetencyAssessmentProfessionalGroup", "CompetencyAssessments", new { actionname }); + } + else + { + var adminId = GetAdminID(); + var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentName(competencyAssessmentBase.ID, adminId, competencyAssessmentBase.CompetencyAssessmentName); + if (isUpdated) + { + return RedirectToAction("ViewCompetencyAssessment", new { tabname = "Details", competencyAssessmentId }); + } + else + { + ModelState.AddModelError(nameof(CompetencyAssessmentBase.CompetencyAssessmentName), "Another competency assessment exists with that name. Please choose a different name."); + // do something + return View("Name", competencyAssessmentBase); + } + } + + } + } + + [Route("/CompetencyAssessments/ProfessionalGroup/{actionname}/{competencyAssessmentId}")] + [Route("/CompetencyAssessments/ProfessionalGroup/{actionname}")] + [SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))] + public IActionResult CompetencyAssessmentProfessionalGroup(string actionname, int competencyAssessmentId = 0) + { + var adminId = GetAdminID(); + CompetencyAssessmentBase? competencyAssessmentBase; + if (competencyAssessmentId > 0) + { + competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId); + if (competencyAssessmentBase == null) + { + logger.LogWarning($"Failed to load Professional Group page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}"); + return StatusCode(500); + } + if (competencyAssessmentBase.UserRole < 2) + { + return StatusCode(403); + } + } + else + { + SessionNewCompetencyAssessment sessionNewCompetencyAssessment = TempData.Peek(); + TempData.Set(sessionNewCompetencyAssessment); + competencyAssessmentBase = sessionNewCompetencyAssessment.CompetencyAssessmentBase; + TempData.Set(sessionNewCompetencyAssessment); + } + var professionalGroups = competencyAssessmentService.GetNRPProfessionalGroups(); + var model = new ProfessionalGroupViewModel() + { + NRPProfessionalGroups = professionalGroups, + CompetencyAssessmentBase = competencyAssessmentBase + }; + return View("ProfessionalGroup", model); + } + + [HttpPost] + [Route("/CompetencyAssessments/ProfessionalGroup/{actionname}/{competencyAssessmentId}")] + [Route("/CompetencyAssessments/ProfessionalGroup/{actionname}")] + [SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))] + public IActionResult SaveProfessionalGroup(CompetencyAssessmentBase competencyAssessmentBase, string actionname, int competencyAssessmentId = 0) + { + if (competencyAssessmentBase.NRPProfessionalGroupID == null) + { + ModelState.Remove(nameof(CompetencyAssessmentBase.NRPProfessionalGroupID)); + ModelState.AddModelError(nameof(CompetencyAssessmentBase.NRPProfessionalGroupID), "Please choose a professional group" + (competencyAssessmentId == 0 ? "or Skip this step" : "") + "."); + // do something + return View("Name", competencyAssessmentBase); + } + if (actionname == "New") + { + SessionNewCompetencyAssessment sessionNewCompetencyAssessment = TempData.Peek(); + sessionNewCompetencyAssessment.CompetencyAssessmentBase = competencyAssessmentBase; + TempData.Set(sessionNewCompetencyAssessment); + return RedirectToAction("CompetencyAssessmentSubGroup", "CompetencyAssessments", new { actionname }); + } + else + { + var adminId = GetAdminID(); + var isUpdated = competencyAssessmentService.UpdateCompetencyAssessmentProfessionalGroup(competencyAssessmentBase.ID, adminId, competencyAssessmentBase.NRPProfessionalGroupID); + if (isUpdated) + { + return RedirectToAction("CompetencyAssessmentSubGroup", "CompetencyAssessments", new { actionname, competencyAssessmentId }); + } + else + { + return RedirectToAction("ViewCompetencyAssessment", new { tabname = "Details", competencyAssessmentId }); + } + } + } + + [Route("/CompetencyAssessments/SubGroup/{actionname}/{competencyAssessmentId}")] + [Route("/CompetencyAssessments/SubGroup/{actionname}")] + [SetSelectedTab(nameof(NavMenuTab.CompetencyAssessments))] + public IActionResult CompetencyAssessmentSubGroup(string actionname, int competencyAssessmentId = 0) + { + return View("SubGroup"); + } + } +} diff --git a/DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfilesController.cs b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessmentsController.cs similarity index 75% rename from DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfilesController.cs rename to DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessmentsController.cs index 9a3173289f..86da61c39e 100644 --- a/DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfilesController.cs +++ b/DigitalLearningSolutions.Web/Controllers/CompetencyAssessmentsController/CompetencyAssessmentsController.cs @@ -1,54 +1,54 @@ -namespace DigitalLearningSolutions.Web.Controllers.RoleProfilesController -{ - using DigitalLearningSolutions.Web.Helpers; - using DigitalLearningSolutions.Web.Services; - using Microsoft.AspNetCore.Authorization; - using Microsoft.AspNetCore.Mvc; - using Microsoft.Extensions.Configuration; - using Microsoft.Extensions.Logging; - - [Authorize(Policy = CustomPolicies.UserFrameworksAdminOnly)] - public partial class RoleProfilesController : Controller - { - private readonly IRoleProfileService roleProfileService; - private readonly ICommonService commonService; - private readonly IFrameworkNotificationService frameworkNotificationService; - private readonly ILogger logger; - private readonly IConfiguration config; - public RoleProfilesController( - IRoleProfileService roleProfileService, - ICommonService commonService, - IFrameworkNotificationService frameworkNotificationService, - ILogger logger, - IConfiguration config) - { - this.roleProfileService = roleProfileService; - this.commonService = commonService; - this.frameworkNotificationService = frameworkNotificationService; - this.logger = logger; - this.config = config; - } - public IActionResult Index() - { - return View(); - } - private int? GetCentreId() - { - return User.GetCustomClaimAsInt(CustomClaimTypes.UserCentreId); - } - private int GetAdminID() - { - return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserAdminId); - } - private bool GetIsWorkforceManager() - { - var isWorkforceManager = User.GetCustomClaimAsBool(CustomClaimTypes.IsWorkforceManager); - return isWorkforceManager != null && (bool)isWorkforceManager; - } - private bool GetIsWorkforceContributor() - { - var isWorkforceContributor = User.GetCustomClaimAsBool(CustomClaimTypes.IsWorkforceContributor); - return isWorkforceContributor != null && (bool)isWorkforceContributor; - } - } -} +namespace DigitalLearningSolutions.Web.Controllers.CompetencyAssessmentsController +{ + using DigitalLearningSolutions.Web.Helpers; + using DigitalLearningSolutions.Web.Services; + using Microsoft.AspNetCore.Authorization; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.Logging; + + [Authorize(Policy = CustomPolicies.UserFrameworksAdminOnly)] + public partial class CompetencyAssessmentsController : Controller + { + private readonly ICompetencyAssessmentService competencyAssessmentService; + private readonly ICommonService commonService; + private readonly IFrameworkNotificationService frameworkNotificationService; + private readonly ILogger logger; + private readonly IConfiguration config; + public CompetencyAssessmentsController( + ICompetencyAssessmentService competencyAssessmentService, + ICommonService commonService, + IFrameworkNotificationService frameworkNotificationService, + ILogger logger, + IConfiguration config) + { + this.competencyAssessmentService = competencyAssessmentService; + this.commonService = commonService; + this.frameworkNotificationService = frameworkNotificationService; + this.logger = logger; + this.config = config; + } + public IActionResult Index() + { + return View(); + } + private int? GetCentreId() + { + return User.GetCustomClaimAsInt(CustomClaimTypes.UserCentreId); + } + private int GetAdminID() + { + return User.GetCustomClaimAsRequiredInt(CustomClaimTypes.UserAdminId); + } + private bool GetIsWorkforceManager() + { + var isWorkforceManager = User.GetCustomClaimAsBool(CustomClaimTypes.IsWorkforceManager); + return isWorkforceManager != null && (bool)isWorkforceManager; + } + private bool GetIsWorkforceContributor() + { + var isWorkforceContributor = User.GetCustomClaimAsBool(CustomClaimTypes.IsWorkforceContributor); + return isWorkforceContributor != null && (bool)isWorkforceContributor; + } + } +} diff --git a/DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfiles.cs b/DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfiles.cs deleted file mode 100644 index dfcae3b8ef..0000000000 --- a/DigitalLearningSolutions.Web/Controllers/RoleProfilesController/RoleProfiles.cs +++ /dev/null @@ -1,306 +0,0 @@ -namespace DigitalLearningSolutions.Web.Controllers.RoleProfilesController -{ - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using DigitalLearningSolutions.Web.ViewModels.RoleProfiles; - using Microsoft.AspNetCore.Mvc; - using Microsoft.Extensions.Logging; - using DigitalLearningSolutions.Web.Extensions; - using DigitalLearningSolutions.Data.Models.SessionData.RoleProfiles; - using Microsoft.AspNetCore.Http; - using System; - using System.Collections.Generic; - using DigitalLearningSolutions.Data.Enums; - using DigitalLearningSolutions.Web.Attributes; - using DigitalLearningSolutions.Web.Models.Enums; - - public partial class RoleProfilesController - { - private const string CookieName = "DLSFrameworkService"; - [Route("/RoleProfiles/View/{tabname}/{page=1:int}")] - [SetSelectedTab(nameof(NavMenuTab.RolesProfiles))] - public IActionResult ViewRoleProfiles(string tabname, string? searchString = null, - string sortBy = RoleProfileSortByOptionTexts.RoleProfileName, - string sortDirection = BaseRoleProfilesPageViewModel.AscendingText, - int page = 1 - ) - { - var adminId = GetAdminID(); - var isWorkforceManager = GetIsWorkforceManager(); - var isWorkforceContributor = GetIsWorkforceContributor(); - IEnumerable roleProfiles; - if (tabname == "All") - { - roleProfiles = roleProfileService.GetAllRoleProfiles(adminId); - } - else - { - if (!isWorkforceContributor && !isWorkforceManager) - { - return RedirectToAction("ViewRoleProfiles", "RoleProfiles", new { tabname = "All" }); - } - roleProfiles = roleProfileService.GetRoleProfilesForAdminId(adminId); - } - if (roleProfiles == null) - { - logger.LogWarning($"Attempt to display role profiles for admin {adminId} returned null."); - return StatusCode(403); - } - MyRoleProfilesViewModel myRoleProfiles; - AllRoleProfilesViewModel allRoleProfiles; - if (tabname == "Mine") - { - myRoleProfiles = new MyRoleProfilesViewModel( - roleProfiles, - searchString, - sortBy, - sortDirection, - page, - isWorkforceManager); - allRoleProfiles = new AllRoleProfilesViewModel( - new List(), - searchString, - sortBy, - sortDirection, - page - ); - } - else - { - allRoleProfiles = new AllRoleProfilesViewModel( - roleProfiles, - searchString, - sortBy, - sortDirection, - page); - myRoleProfiles = new MyRoleProfilesViewModel( - new List(), - searchString, - sortBy, - sortDirection, - page, - isWorkforceManager - ); - } - - var currentTab = tabname == "All" ? RoleProfilesTab.AllRoleProfiles : RoleProfilesTab.MyRoleProfiles; - RoleProfilesViewModel? model = new RoleProfilesViewModel( - isWorkforceManager, - isWorkforceContributor, - allRoleProfiles, - myRoleProfiles, - currentTab - ); - return View("Index", model); - } - public IActionResult StartNewRoleProfileSession() - { - var adminId = GetAdminID(); - TempData.Clear(); - var sessionNewRoleProfile = new SessionNewRoleProfile(); - if (!Request.Cookies.ContainsKey(CookieName)) - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - }); - - sessionNewRoleProfile.Id = id; - } - else - { - if (Request.Cookies.TryGetValue(CookieName, out string idString)) - { - sessionNewRoleProfile.Id = Guid.Parse(idString); - } - else - { - var id = Guid.NewGuid(); - - Response.Cookies.Append( - CookieName, - id.ToString(), - new CookieOptions - { - Expires = DateTimeOffset.UtcNow.AddDays(30) - }); - sessionNewRoleProfile.Id = id; - } - } - RoleProfileBase roleProfileBase = new RoleProfileBase() - { - BrandID = 6, - OwnerAdminID = adminId, - National = true, - Public = true, - PublishStatusID = 1, - UserRole = 3 - }; - sessionNewRoleProfile.RoleProfileBase = roleProfileBase; - TempData.Set(sessionNewRoleProfile); - return RedirectToAction("RoleProfileName", "RoleProfiles", new { actionname = "New" }); - } - - [Route("/RoleProfiles/Name/{actionname}/{roleProfileId}")] - [Route("/RoleProfiles/Name/{actionname}")] - [SetSelectedTab(nameof(NavMenuTab.RolesProfiles))] - public IActionResult RoleProfileName(string actionname, int roleProfileId = 0) - { - var adminId = GetAdminID(); - RoleProfileBase? roleProfileBase; - if (roleProfileId > 0) - { - roleProfileBase = roleProfileService.GetRoleProfileBaseById(roleProfileId, adminId); - if (roleProfileBase == null) - { - logger.LogWarning($"Failed to load name page for roleProfileId: {roleProfileId} adminId: {adminId}"); - return StatusCode(500); - } - if (roleProfileBase.UserRole < 2) - { - return StatusCode(403); - } - } - else - { - SessionNewRoleProfile sessionNewRoleProfile = TempData.Peek(); - TempData.Set(sessionNewRoleProfile); - roleProfileBase = sessionNewRoleProfile.RoleProfileBase; - TempData.Set(sessionNewRoleProfile); - } - return View("Name", roleProfileBase); - } - - [HttpPost] - [Route("/RoleProfiles/Name/{actionname}/{roleProfileId}")] - [Route("/RoleProfiles/Name/{actionname}")] - [SetSelectedTab(nameof(NavMenuTab.RolesProfiles))] - public IActionResult SaveProfileName(RoleProfileBase roleProfileBase, string actionname, int roleProfileId = 0) - { - if (!ModelState.IsValid) - { - ModelState.Remove(nameof(RoleProfileBase.RoleProfileName)); - ModelState.AddModelError(nameof(RoleProfileBase.RoleProfileName), "Please enter a valid role profile name (between 3 and 255 characters)"); - // do something - return View("Name", roleProfileBase); - } - else - { - if (actionname == "New") - { - var sameItems = roleProfileService.GetRoleProfileByName(roleProfileBase.RoleProfileName, GetAdminID()); - if (sameItems != null) - { - ModelState.Remove(nameof(RoleProfileBase.RoleProfileName)); - ModelState.AddModelError(nameof(RoleProfileBase.RoleProfileName), "Another role profile exists with that name. Please choose a different name."); - // do something - return View("Name", roleProfileBase); - } - SessionNewRoleProfile sessionNewRoleProfile = TempData.Peek(); - sessionNewRoleProfile.RoleProfileBase = roleProfileBase; - TempData.Set(sessionNewRoleProfile); - return RedirectToAction("RoleProfileProfessionalGroup", "RoleProfiles", new { actionname }); - } - else - { - var adminId = GetAdminID(); - var isUpdated = roleProfileService.UpdateRoleProfileName(roleProfileBase.ID, adminId, roleProfileBase.RoleProfileName); - if (isUpdated) - { - return RedirectToAction("ViewRoleProfile", new { tabname = "Details", roleProfileId }); - } - else - { - ModelState.AddModelError(nameof(RoleProfileBase.RoleProfileName), "Another role profile exists with that name. Please choose a different name."); - // do something - return View("Name", roleProfileBase); - } - } - - } - } - - [Route("/RoleProfiles/ProfessionalGroup/{actionname}/{roleProfileId}")] - [Route("/RoleProfiles/ProfessionalGroup/{actionname}")] - [SetSelectedTab(nameof(NavMenuTab.RolesProfiles))] - public IActionResult RoleProfileProfessionalGroup(string actionname, int roleProfileId = 0) - { - var adminId = GetAdminID(); - RoleProfileBase? roleProfileBase; - if (roleProfileId > 0) - { - roleProfileBase = roleProfileService.GetRoleProfileBaseById(roleProfileId, adminId); - if (roleProfileBase == null) - { - logger.LogWarning($"Failed to load Professional Group page for roleProfileId: {roleProfileId} adminId: {adminId}"); - return StatusCode(500); - } - if (roleProfileBase.UserRole < 2) - { - return StatusCode(403); - } - } - else - { - SessionNewRoleProfile sessionNewRoleProfile = TempData.Peek(); - TempData.Set(sessionNewRoleProfile); - roleProfileBase = sessionNewRoleProfile.RoleProfileBase; - TempData.Set(sessionNewRoleProfile); - } - var professionalGroups = roleProfileService.GetNRPProfessionalGroups(); - var model = new ProfessionalGroupViewModel() - { - NRPProfessionalGroups = professionalGroups, - RoleProfileBase = roleProfileBase - }; - return View("ProfessionalGroup", model); - } - - [HttpPost] - [Route("/RoleProfiles/ProfessionalGroup/{actionname}/{roleProfileId}")] - [Route("/RoleProfiles/ProfessionalGroup/{actionname}")] - [SetSelectedTab(nameof(NavMenuTab.RolesProfiles))] - public IActionResult SaveProfessionalGroup(RoleProfileBase roleProfileBase, string actionname, int roleProfileId = 0) - { - if (roleProfileBase.NRPProfessionalGroupID == null) - { - ModelState.Remove(nameof(RoleProfileBase.NRPProfessionalGroupID)); - ModelState.AddModelError(nameof(RoleProfileBase.NRPProfessionalGroupID), "Please choose a professional group" + (roleProfileId == 0 ? "or Skip this step" : "") + "."); - // do something - return View("Name", roleProfileBase); - } - if (actionname == "New") - { - SessionNewRoleProfile sessionNewRoleProfile = TempData.Peek(); - sessionNewRoleProfile.RoleProfileBase = roleProfileBase; - TempData.Set(sessionNewRoleProfile); - return RedirectToAction("RoleProfileSubGroup", "RoleProfiles", new { actionname }); - } - else - { - var adminId = GetAdminID(); - var isUpdated = roleProfileService.UpdateRoleProfileProfessionalGroup(roleProfileBase.ID, adminId, roleProfileBase.NRPProfessionalGroupID); - if (isUpdated) - { - return RedirectToAction("RoleProfileSubGroup", "RoleProfiles", new { actionname, roleProfileId }); - } - else - { - return RedirectToAction("ViewRoleProfile", new { tabname = "Details", roleProfileId }); - } - } - } - - [Route("/RoleProfiles/SubGroup/{actionname}/{roleProfileId}")] - [Route("/RoleProfiles/SubGroup/{actionname}")] - [SetSelectedTab(nameof(NavMenuTab.RolesProfiles))] - public IActionResult RoleProfileSubGroup(string actionname, int roleProfileId = 0) - { - return View("SubGroup"); - } - } -} diff --git a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs index 22eb2ddf41..93c8e1f610 100644 --- a/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs +++ b/DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs @@ -699,9 +699,9 @@ public IActionResult StartEnrolDelegateOnProfileAssessment(int supervisorDelegat { TempData.Clear(); - var sessionEnrolOnRoleProfile = new SessionEnrolOnRoleProfile(); + var sessionEnrolOnCompetencyAssessment = new SessionEnrolOnCompetencyAssessment(); multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); @@ -719,12 +719,12 @@ public IActionResult StartEnrolDelegateOnProfileAssessment(int supervisorDelegat )] public IActionResult EnrolDelegateOnProfileAssessment(int supervisorDelegateId) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData( MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ).GetAwaiter().GetResult(); multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); @@ -732,25 +732,25 @@ public IActionResult EnrolDelegateOnProfileAssessment(int supervisorDelegateId) var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfiles = supervisorService.GetAvailableRoleProfilesForDelegate( + var competencyAssessments = supervisorService.GetAvailableCompetencyAssessmentsForDelegate( (int)supervisorDelegate.DelegateUserID, GetCentreId(), loggedInAdmin.CategoryId ); var model = new EnrolDelegateOnProfileAssessmentViewModel() { - SessionEnrolOnRoleProfile = sessionEnrolOnRoleProfile, + SessionEnrolOnCompetencyAssessment = sessionEnrolOnCompetencyAssessment, SupervisorDelegateDetail = supervisorDelegate, - RoleProfiles = roleProfiles + CompetencyAssessments = competencyAssessments }; return View("EnrolDelegateOnProfileAssessment", model); } [HttpPost] [Route("/Supervisor/Staff/{supervisorDelegateId}/ProfileAssessment/Enrol/Profile")] - public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAssessmentID) + public IActionResult EnrolSetCompetencyAssessment(int supervisorDelegateId, int selfAssessmentID) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData( MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ).GetAwaiter().GetResult(); @@ -761,29 +761,29 @@ public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAsses { ModelState.AddModelError("selfAssessmentId", "You must select a self assessment"); multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfiles = supervisorService.GetAvailableRoleProfilesForDelegate( + var competencyAssessments = supervisorService.GetAvailableCompetencyAssessmentsForDelegate( (int)supervisorDelegate.DelegateUserID, GetCentreId(), loggedInAdmin.CategoryId ); var model = new EnrolDelegateOnProfileAssessmentViewModel() { - SessionEnrolOnRoleProfile = sessionEnrolOnRoleProfile, + SessionEnrolOnCompetencyAssessment = sessionEnrolOnCompetencyAssessment, SupervisorDelegateDetail = supervisorDelegate, - RoleProfiles = roleProfiles + CompetencyAssessments = competencyAssessments }; return View("EnrolDelegateOnProfileAssessment", model); } - sessionEnrolOnRoleProfile.SelfAssessmentID = selfAssessmentID; + sessionEnrolOnCompetencyAssessment.SelfAssessmentID = selfAssessmentID; multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); @@ -802,23 +802,23 @@ public IActionResult EnrolSetRoleProfile(int supervisorDelegateId, int selfAsses )] public IActionResult EnrolDelegateCompleteBy(int supervisorDelegateId, int? day, int? month, int? year) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData( + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData( MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ).GetAwaiter().GetResult(); multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); + var competencyAssessment = supervisorService.GetCompetencyAssessmentById((int)sessionEnrolOnCompetencyAssessment.SelfAssessmentID); var model = new EnrolDelegateSetCompletByDateViewModel() { SupervisorDelegateDetail = supervisorDelegate, - RoleProfile = roleProfile, - CompleteByDate = sessionEnrolOnRoleProfile.CompleteByDate + CompetencyAssessment = competencyAssessment, + CompleteByDate = sessionEnrolOnCompetencyAssessment.CompleteByDate }; if (day != null && month != null && year != null) { @@ -835,7 +835,7 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da TempData["completeByDate"] = day; TempData["completeByMonth"] = month; TempData["completeByYear"] = year; - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); if (day != 0 | month != 0 | year != 0) { var validationResult = OldDateValidator.ValidateDate(day, month, year); @@ -846,9 +846,9 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da else { var completeByDate = new DateTime(year, month, day); - sessionEnrolOnRoleProfile.CompleteByDate = completeByDate; + sessionEnrolOnCompetencyAssessment.CompleteByDate = completeByDate; multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); @@ -856,7 +856,7 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da } var supervisorRoles = - supervisorService.GetSupervisorRolesBySelfAssessmentIdForSupervisor(sessionEnrolOnRoleProfile.SelfAssessmentID.Value); + supervisorService.GetSupervisorRolesBySelfAssessmentIdForSupervisor(sessionEnrolOnCompetencyAssessment.SelfAssessmentID.Value); if (supervisorRoles.Count() > 1) { TempData["navigatedFrom"] = "EnrolDelegateSupervisorRole"; @@ -868,9 +868,9 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da } else if (supervisorRoles.Count() == 1) { - sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId = supervisorRoles.First().ID; + sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId = supervisorRoles.First().ID; multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); @@ -891,21 +891,21 @@ public IActionResult EnrolDelegateSetCompleteBy(int supervisorDelegateId, int da )] public IActionResult EnrolDelegateSupervisorRole(int supervisorDelegateId) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); - var supervisorRoles = supervisorService.GetSupervisorRolesForSelfAssessment(sessionEnrolOnRoleProfile.SelfAssessmentID.Value); + var competencyAssessment = supervisorService.GetCompetencyAssessmentById((int)sessionEnrolOnCompetencyAssessment.SelfAssessmentID); + var supervisorRoles = supervisorService.GetSupervisorRolesForSelfAssessment(sessionEnrolOnCompetencyAssessment.SelfAssessmentID.Value); var model = new EnrolDelegateSupervisorRoleViewModel() { SupervisorDelegateDetail = supervisorDelegate, - RoleProfile = roleProfile, - SelfAssessmentSupervisorRoleId = sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId, + CompetencyAssessment = competencyAssessment, + SelfAssessmentSupervisorRoleId = sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId, SelfAssessmentSupervisorRoles = supervisorRoles }; ViewBag.completeByDate = TempData["completeByDate"]; @@ -922,24 +922,24 @@ public IActionResult EnrolDelegateSetSupervisorRole( int selfAssessmentSupervisorRoleId ) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); if (!ModelState.IsValid) { ModelState.ClearErrorsForAllFieldsExcept("SelfAssessmentSupervisorRoleId"); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); + var competencyAssessment = supervisorService.GetCompetencyAssessmentById((int)sessionEnrolOnCompetencyAssessment.SelfAssessmentID); var supervisorRoles = - supervisorService.GetSupervisorRolesForSelfAssessment(sessionEnrolOnRoleProfile.SelfAssessmentID.Value); + supervisorService.GetSupervisorRolesForSelfAssessment(sessionEnrolOnCompetencyAssessment.SelfAssessmentID.Value); model.SupervisorDelegateDetail = supervisorDelegate; - model.RoleProfile = roleProfile; + model.CompetencyAssessment = competencyAssessment; model.SelfAssessmentSupervisorRoles = supervisorRoles; return View("EnrolDelegateSupervisorRole", model); } - sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId = selfAssessmentSupervisorRoleId; + sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId = selfAssessmentSupervisorRoleId; multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); @@ -958,32 +958,32 @@ int selfAssessmentSupervisorRoleId )] public IActionResult EnrolDelegateSummary(int supervisorDelegateId) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfile = supervisorService.GetRoleProfileById((int)sessionEnrolOnRoleProfile.SelfAssessmentID); - var supervisorRoleName = (sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId == null + var competencyAssessment = supervisorService.GetCompetencyAssessmentById((int)sessionEnrolOnCompetencyAssessment.SelfAssessmentID); + var supervisorRoleName = (sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId == null ? "Supervisor" : supervisorService - .GetSupervisorRoleById(sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId.Value).RoleName); - var supervisorRoleCount = (sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId == null + .GetSupervisorRoleById(sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId.Value).RoleName); + var supervisorRoleCount = (sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId == null ? 0 : supervisorService - .GetSupervisorRolesForSelfAssessment(sessionEnrolOnRoleProfile.SelfAssessmentID.Value).Count()); - var allowSupervisorRoleSelection = (sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId == null + .GetSupervisorRolesForSelfAssessment(sessionEnrolOnCompetencyAssessment.SelfAssessmentID.Value).Count()); + var allowSupervisorRoleSelection = (sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId == null ? false : supervisorService - .GetSupervisorRolesForSelfAssessment(sessionEnrolOnRoleProfile.SelfAssessmentID.Value).FirstOrDefault().AllowSupervisorRoleSelection); + .GetSupervisorRolesForSelfAssessment(sessionEnrolOnCompetencyAssessment.SelfAssessmentID.Value).FirstOrDefault().AllowSupervisorRoleSelection); var model = new EnrolDelegateSummaryViewModel() { SupervisorDelegateDetail = supervisorDelegate, - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SupervisorRoleName = supervisorRoleName, - CompleteByDate = sessionEnrolOnRoleProfile.CompleteByDate, + CompleteByDate = sessionEnrolOnCompetencyAssessment.CompleteByDate, SupervisorRoleCount = supervisorRoleCount, AllowSupervisorRoleSelection = allowSupervisorRoleSelection }; @@ -996,10 +996,10 @@ public IActionResult EnrolDelegateSummary(int supervisorDelegateId) public IActionResult EnrolDelegateConfirm(int delegateUserId, int supervisorDelegateId) { - var sessionEnrolOnRoleProfile = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); - var selfAssessmentId = sessionEnrolOnRoleProfile.SelfAssessmentID; - var completeByDate = sessionEnrolOnRoleProfile.CompleteByDate; - var selfAssessmentSupervisorRoleId = sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId; + var sessionEnrolOnCompetencyAssessment = multiPageFormService.GetMultiPageFormData(MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData).GetAwaiter().GetResult(); + var selfAssessmentId = sessionEnrolOnCompetencyAssessment.SelfAssessmentID; + var completeByDate = sessionEnrolOnCompetencyAssessment.CompleteByDate; + var selfAssessmentSupervisorRoleId = sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId; var loggedInUserId = User.GetUserId(); var candidateAssessmentId = supervisorService.EnrolDelegateOnAssessment( delegateUserId, @@ -1031,7 +1031,7 @@ public IActionResult QuickAddSupervisor(int selfAssessmentId, int supervisorDele { var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); - var roleProfile = supervisorService.GetRoleProfileById(selfAssessmentId); + var competencyAssessment = supervisorService.GetCompetencyAssessmentById(selfAssessmentId); var supervisorRoles = supervisorService.GetSupervisorRolesBySelfAssessmentIdForSupervisor(selfAssessmentId); if (supervisorRoles.Any() && supervisorRoles.Count() > 1) @@ -1039,7 +1039,7 @@ public IActionResult QuickAddSupervisor(int selfAssessmentId, int supervisorDele var model = new EnrolDelegateSupervisorRoleViewModel() { SupervisorDelegateDetail = supervisorDelegate, - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SelfAssessmentSupervisorRoleId = null, SelfAssessmentSupervisorRoles = supervisorRoles }; @@ -1059,25 +1059,25 @@ public IActionResult QuickAddSupervisor(int selfAssessmentId, int supervisorDele } } - var sessionEnrolOnRoleProfile = new SessionEnrolOnRoleProfile() + var sessionEnrolOnCompetencyAssessment = new SessionEnrolOnCompetencyAssessment() { SelfAssessmentID = supervisorRoles.FirstOrDefault().SelfAssessmentID, SelfAssessmentSupervisorRoleId = supervisorRoles.FirstOrDefault().ID }; multiPageFormService.SetMultiPageFormData( - sessionEnrolOnRoleProfile, + sessionEnrolOnCompetencyAssessment, MultiPageFormDataFeature.EnrolDelegateOnProfileAssessment, TempData ); var supervisorRoleName = supervisorRoles.FirstOrDefault().RoleName; var model = new EnrolDelegateSummaryViewModel { - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SupervisorDelegateDetail = supervisorDelegate, SupervisorRoleName = supervisorRoleName }; - return View("SelectDelegateSupervisorRoleSummary", new Tuple(model, sessionEnrolOnRoleProfile.SelfAssessmentSupervisorRoleId)); + return View("SelectDelegateSupervisorRoleSummary", new Tuple(model, sessionEnrolOnCompetencyAssessment.SelfAssessmentSupervisorRoleId)); } @@ -1087,7 +1087,7 @@ public IActionResult QuickAddSupervisor(int selfAssessmentId, int supervisorDele [HttpPost] public IActionResult QuickAddSupervisor(EnrolDelegateSupervisorRoleViewModel supervisorRole, int selfAssessmentId, int supervisorDelegateId, int delegateUserId) { - var roleProfile = supervisorService.GetRoleProfileById(selfAssessmentId); + var competencyAssessment = supervisorService.GetCompetencyAssessmentById(selfAssessmentId); var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); if (supervisorRole.SelfAssessmentSupervisorRoleId == null) @@ -1096,7 +1096,7 @@ public IActionResult QuickAddSupervisor(EnrolDelegateSupervisorRoleViewModel sup var model = new EnrolDelegateSupervisorRoleViewModel() { SupervisorDelegateDetail = supervisorDelegate, - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SelfAssessmentSupervisorRoleId = null, SelfAssessmentSupervisorRoles = supervisorRoles }; @@ -1107,7 +1107,7 @@ public IActionResult QuickAddSupervisor(EnrolDelegateSupervisorRoleViewModel sup var model = new EnrolDelegateSummaryViewModel { - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SupervisorDelegateDetail = supervisorDelegate, SupervisorRoleName = supervisorRole.SelfAssessmentSupervisorRoleId == null ? "Supervisor" : supervisorService.GetSupervisorRoleById((int)supervisorRole.SelfAssessmentSupervisorRoleId).RoleName, @@ -1126,12 +1126,12 @@ public IActionResult QuickAddSupervisorConfirm(int? selfAssessmentSupervisorRole var supervisorDelegate = supervisorService.GetSupervisorDelegateDetailsById(supervisorDelegateId, GetAdminId(), 0); if (!selfAssessmentSupervisorRoleId.HasValue) { - var roleProfile = supervisorService.GetRoleProfileById(selfAssessmentId); + var competencyAssessment = supervisorService.GetCompetencyAssessmentById(selfAssessmentId); var supervisorRoles = supervisorService.GetSupervisorRolesForSelfAssessment(selfAssessmentId); var model = new EnrolDelegateSupervisorRoleViewModel() { SupervisorDelegateDetail = supervisorDelegate, - RoleProfile = roleProfile, + CompetencyAssessment = competencyAssessment, SelfAssessmentSupervisorRoleId = null, SelfAssessmentSupervisorRoles = supervisorRoles }; diff --git a/DigitalLearningSolutions.Web/Helpers/SearchHelper.cs b/DigitalLearningSolutions.Web/Helpers/SearchHelper.cs index 381be134dd..9b3dc5acf8 100644 --- a/DigitalLearningSolutions.Web/Helpers/SearchHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/SearchHelper.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using DigitalLearningSolutions.Data.Helpers; - using DigitalLearningSolutions.Data.Models.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using FuzzySharp; using FuzzySharp.SimilarityRatio; using FuzzySharp.SimilarityRatio.Scorer.StrategySensitive; @@ -29,8 +29,8 @@ public static class SearchHelper "profile", "job", "role", }; - public static IEnumerable FilterRoleProfiles( - IEnumerable roleProfiles, + public static IEnumerable FilterCompetencyAssessments( + IEnumerable competencyAssessments, string? searchString, int minMatchScore, bool stripStopWords @@ -38,7 +38,7 @@ bool stripStopWords { if (searchString == null) { - return roleProfiles; + return competencyAssessments; } if (stripStopWords) @@ -46,16 +46,16 @@ bool stripStopWords searchString = CleanSearchedWords(searchString); } - var query = new RoleProfile + var query = new CompetencyAssessment { - RoleProfileName = searchString.ToLower(), + CompetencyAssessmentName = searchString.ToLower(), }; if (stripStopWords) { var results = Process.ExtractSorted( query, - roleProfiles, - roleProfile => roleProfile.RoleProfileName.ToLower(), + competencyAssessments, + competencyAssessment => competencyAssessment.CompetencyAssessmentName.ToLower(), ScorerCache.Get(), minMatchScore ); @@ -65,8 +65,8 @@ bool stripStopWords { var results = Process.ExtractSorted( query, - roleProfiles, - roleProfile => roleProfile.RoleProfileName.ToLower(), + competencyAssessments, + competencyAssessment => competencyAssessment.CompetencyAssessmentName.ToLower(), ScorerCache.Get(), minMatchScore ); diff --git a/DigitalLearningSolutions.Web/Helpers/SortingHelper.cs b/DigitalLearningSolutions.Web/Helpers/SortingHelper.cs index e630a9ea9b..2a4cd083b8 100644 --- a/DigitalLearningSolutions.Web/Helpers/SortingHelper.cs +++ b/DigitalLearningSolutions.Web/Helpers/SortingHelper.cs @@ -3,8 +3,8 @@ using System.Collections.Generic; using System.Linq; using DigitalLearningSolutions.Data.Helpers; - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using DigitalLearningSolutions.Web.ViewModels.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments; /// /// This is the older version of the SortingHelper. For future search/sort implementations we should @@ -13,36 +13,36 @@ /// public static class SortingHelper { - public static IEnumerable SortRoleProfileItems( - IEnumerable roleProfiles, + public static IEnumerable SortCompetencyAssessmentItems( + IEnumerable competencyAssessments, string sortBy, string sortDirection ) { return sortBy switch { - RoleProfileSortByOptionTexts.RoleProfileName => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.RoleProfileName) - : roleProfiles.OrderBy(roleProfile => roleProfile.RoleProfileName), - RoleProfileSortByOptionTexts.RoleProfileOwner => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.Owner) - : roleProfiles.OrderBy(roleProfile => roleProfile.Owner), - RoleProfileSortByOptionTexts.RoleProfileCreatedDate => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.CreatedDate) - : roleProfiles.OrderBy(roleProfile => roleProfile.CreatedDate), - RoleProfileSortByOptionTexts.RoleProfilePublishStatus => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.PublishStatusID) - : roleProfiles.OrderBy(roleProfile => roleProfile.PublishStatusID), - RoleProfileSortByOptionTexts.RoleProfileBrand => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.Brand) - : roleProfiles.OrderBy(roleProfile => roleProfile.Brand), - RoleProfileSortByOptionTexts.RoleProfileNationalRoleProfile => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.NRPRole) - : roleProfiles.OrderBy(roleProfile => roleProfile.NRPRole), - RoleProfileSortByOptionTexts.RoleProfileNationalRoleGroup => sortDirection == BaseRoleProfilesPageViewModel.DescendingText - ? roleProfiles.OrderByDescending(roleProfile => roleProfile.NRPProfessionalGroup) - : roleProfiles.OrderBy(roleProfile => roleProfile.NRPProfessionalGroup), - _ => roleProfiles + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentName => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.CompetencyAssessmentName) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.CompetencyAssessmentName), + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentOwner => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.Owner) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.Owner), + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentCreatedDate => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.CreatedDate) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.CreatedDate), + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentPublishStatus => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.PublishStatusID) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.PublishStatusID), + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentBrand => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.Brand) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.Brand), + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentNationalCompetencyAssessment => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.NRPRole) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.NRPRole), + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentNationalRoleGroup => sortDirection == BaseCompetencyAssessmentsPageViewModel.DescendingText + ? competencyAssessments.OrderByDescending(competencyAssessment => competencyAssessment.NRPProfessionalGroup) + : competencyAssessments.OrderBy(competencyAssessment => competencyAssessment.NRPProfessionalGroup), + _ => competencyAssessments }; } } diff --git a/DigitalLearningSolutions.Web/Models/Enums/CompetencyAssessmentsTab.cs b/DigitalLearningSolutions.Web/Models/Enums/CompetencyAssessmentsTab.cs new file mode 100644 index 0000000000..c77a640c7e --- /dev/null +++ b/DigitalLearningSolutions.Web/Models/Enums/CompetencyAssessmentsTab.cs @@ -0,0 +1,39 @@ +namespace DigitalLearningSolutions.Web.Models.Enums +{ + using System.Collections.Generic; + + public class CompetencyAssessmentsTab : BaseTabEnumeration + { + public static CompetencyAssessmentsTab MyCompetencyAssessments = new CompetencyAssessmentsTab( + 1, + nameof(MyCompetencyAssessments), + "CompetencyAssessments", + "ViewCompetencyAssessments", + "My Competency Assessments", + new Dictionary { { "tabName", "Mine" } } + ); + + public static CompetencyAssessmentsTab AllCompetencyAssessments = new CompetencyAssessmentsTab( + 2, + nameof(AllCompetencyAssessments), + "CompetencyAssessments", + "ViewCompetencyAssessments", + "All Competency Assessments", + new Dictionary { { "tabName", "All" } } + ); + + private CompetencyAssessmentsTab( + int id, + string name, + string controller, + string action, + string linkText, + Dictionary staticRouteData + ) : base(id, name, controller, action, linkText, staticRouteData) { } + + public override IEnumerable GetAllTabs() + { + return GetAll(); + } + } +} diff --git a/DigitalLearningSolutions.Web/Models/Enums/RoleProfilesTab.cs b/DigitalLearningSolutions.Web/Models/Enums/RoleProfilesTab.cs deleted file mode 100644 index 3d599ce5d0..0000000000 --- a/DigitalLearningSolutions.Web/Models/Enums/RoleProfilesTab.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace DigitalLearningSolutions.Web.Models.Enums -{ - using System.Collections.Generic; - - public class RoleProfilesTab : BaseTabEnumeration - { - public static RoleProfilesTab MyRoleProfiles = new RoleProfilesTab( - 1, - nameof(MyRoleProfiles), - "RoleProfiles", - "ViewRoleProfiles", - "My Role Profiles", - new Dictionary { { "tabName", "Mine" } } - ); - - public static RoleProfilesTab AllRoleProfiles = new RoleProfilesTab( - 2, - nameof(AllRoleProfiles), - "RoleProfiles", - "ViewRoleProfiles", - "All Role Profiles", - new Dictionary { { "tabName", "All" } } - ); - - private RoleProfilesTab( - int id, - string name, - string controller, - string action, - string linkText, - Dictionary staticRouteData - ) : base(id, name, controller, action, linkText, staticRouteData) { } - - public override IEnumerable GetAllTabs() - { - return GetAll(); - } - } -} diff --git a/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs b/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs new file mode 100644 index 0000000000..27385103bd --- /dev/null +++ b/DigitalLearningSolutions.Web/Services/CompetencyAssessmentService.cs @@ -0,0 +1,68 @@ +using DigitalLearningSolutions.Data.DataServices; +using DigitalLearningSolutions.Data.Models.CompetencyAssessments; +using System.Collections.Generic; + +namespace DigitalLearningSolutions.Web.Services +{ + public interface ICompetencyAssessmentService + { + //GET DATA + IEnumerable GetAllCompetencyAssessments(int adminId); + + IEnumerable GetCompetencyAssessmentsForAdminId(int adminId); + + CompetencyAssessmentBase? GetCompetencyAssessmentBaseById(int competencyAssessmentId, int adminId); + + CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId); + + IEnumerable GetNRPProfessionalGroups(); + + //UPDATE DATA + bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName); + + bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID); + + } + public class CompetencyAssessmentService : ICompetencyAssessmentService + { + private readonly ICompetencyAssessmentDataService competencyAssessmentDataService; + public CompetencyAssessmentService(ICompetencyAssessmentDataService competencyAssessmentDataService) + { + this.competencyAssessmentDataService = competencyAssessmentDataService; + } + public IEnumerable GetAllCompetencyAssessments(int adminId) + { + return competencyAssessmentDataService.GetAllCompetencyAssessments(adminId); + } + + public IEnumerable GetNRPProfessionalGroups() + { + return competencyAssessmentDataService.GetNRPProfessionalGroups(); + } + + public CompetencyAssessmentBase? GetCompetencyAssessmentBaseById(int competencyAssessmentId, int adminId) + { + return competencyAssessmentDataService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId); + } + + public CompetencyAssessmentBase? GetCompetencyAssessmentByName(string competencyAssessmentName, int adminId) + { + return competencyAssessmentDataService.GetCompetencyAssessmentByName(competencyAssessmentName, adminId); + } + + public IEnumerable GetCompetencyAssessmentsForAdminId(int adminId) + { + return competencyAssessmentDataService.GetCompetencyAssessmentsForAdminId(adminId); + } + + public bool UpdateCompetencyAssessmentName(int competencyAssessmentId, int adminId, string competencyAssessmentName) + { + return competencyAssessmentDataService.UpdateCompetencyAssessmentName(competencyAssessmentId, adminId, competencyAssessmentName); + } + + public bool UpdateCompetencyAssessmentProfessionalGroup(int competencyAssessmentId, int adminId, int? nrpProfessionalGroupID) + { + return competencyAssessmentDataService.UpdateCompetencyAssessmentProfessionalGroup(competencyAssessmentId, adminId, nrpProfessionalGroupID); + } + } +} diff --git a/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs b/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs index 092f38c15d..d0cfdb0a0f 100644 --- a/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs +++ b/DigitalLearningSolutions.Web/Services/FrameworkNotificationService.cs @@ -34,7 +34,7 @@ public class FrameworkNotificationService : IFrameworkNotificationService private readonly IConfigDataService configDataService; private readonly IEmailService emailService; private readonly IFrameworkService frameworkService; - private readonly IRoleProfileService roleProfileService; + private readonly ICompetencyAssessmentService competencyAssessmentService; private readonly ISupervisorService supervisorService; private readonly ISelfAssessmentDataService selfAssessmentDataService; private readonly ICentresDataService centresDataService; @@ -42,7 +42,7 @@ public FrameworkNotificationService( IFrameworkService frameworkService, IConfigDataService configDataService, IEmailService emailService, - IRoleProfileService roleProfileService, + ICompetencyAssessmentService competencyAssessmentService, ISupervisorService supervisorService, ISelfAssessmentDataService selfAssessmentDataService, ICentresDataService centresDataService @@ -51,7 +51,7 @@ ICentresDataService centresDataService this.frameworkService = frameworkService; this.configDataService = configDataService; this.emailService = emailService; - this.roleProfileService = roleProfileService; + this.competencyAssessmentService = competencyAssessmentService; this.supervisorService = supervisorService; this.selfAssessmentDataService = selfAssessmentDataService; this.centresDataService = centresDataService; @@ -221,8 +221,8 @@ public void SendSupervisorDelegateInvite(int supervisorDelegateId, int adminId, builder.TextBody = $@"Dear colleague, You have been invited to register to access the NHS England, Digital Learning Solutions platform as a supervised delegate by {supervisorDelegate.SupervisorName} ({supervisorDelegate.SupervisorEmail}) ({centreName}). To register, visit {dlsUrlBuilder.Uri.ToString()}. - Registering using this link will confirm your acceptance of the invite. Your supervisor will then be able to assign role profile assessments and view and validate your self assessment results."; - builder.HtmlBody = $@"

Dear colleague,

You have been invited to register to access the NHS England, Digital Learning Solutions platform as a supervised delegate by {supervisorDelegate.SupervisorName} ({centreName}).

Click here to register and confirm your acceptance of the invite.

Your supervisor will then be able to assign role profile assessments and view and validate your self assessment results.

"; + Registering using this link will confirm your acceptance of the invite. Your supervisor will then be able to assign competency assessments and view and validate your self assessment results."; + builder.HtmlBody = $@"

Dear colleague,

You have been invited to register to access the NHS England, Digital Learning Solutions platform as a supervised delegate by {supervisorDelegate.SupervisorName} ({centreName}).

Click here to register and confirm your acceptance of the invite.

Your supervisor will then be able to assign competency assessments and view and validate your self assessment results.

"; emailService.SendEmail(new Email(emailSubjectLine, builder, supervisorDelegate.DelegateEmail)); } } @@ -240,7 +240,7 @@ public void SendSupervisorDelegateConfirmed(int supervisorDelegateId, int adminI You are already registered as a delegate at the supervisor's DLS centre so they can now assign competency self assessments and view and validate your self assessment results. If this looks like a mistake, please contact {supervisorDelegate.SupervisorName} ({supervisorDelegate.SupervisorEmail}) ({centreName}) directly to correct."; - builder.HtmlBody = $@"

Dear {supervisorDelegate.FirstName}

{supervisorDelegate.SupervisorName} ({centreName}) has accepted your request to be your supervisor for profile asessment activities in the NHS England, Digital Learning Solutions platform.

Click here to access your role profile assessments.

"; + builder.HtmlBody = $@"

Dear {supervisorDelegate.FirstName}

{supervisorDelegate.SupervisorName} ({centreName}) has accepted your request to be your supervisor for profile asessment activities in the NHS England, Digital Learning Solutions platform.

Click here to access your competency assessments.

"; string toEmail = (@adminId == 0 ? supervisorDelegate.DelegateEmail : supervisorDelegate.SupervisorEmail); emailService.SendEmail(new Email(emailSubjectLine, builder, toEmail)); } @@ -410,8 +410,8 @@ public void SendSupervisorDelegateReminder(int supervisorDelegateId, int adminId builder.TextBody = $@"Dear colleague, This is a reminder to to register to access the NHS England, Digital Learning Solutions platform as a supervised delegate by {supervisorDelegate.SupervisorName} ({supervisorDelegate.SupervisorEmail}) ({centreName}). To register, visit {dlsUrlBuilder.Uri.ToString()}. - Your supervisor will then be able to assign role profile assessments and view and validate your self assessment results."; - builder.HtmlBody = $@"

Dear colleague,

This is a reminder to register to access the NHS England, Digital Learning Solutions platform as a supervised delegate by {supervisorDelegate.SupervisorName} ({centreName}).

Click here to register.

Your supervisor will then be able to assign role profile assessments and view and validate your self assessment results.

"; + Your supervisor will then be able to assign competency assessments and view and validate your self assessment results."; + builder.HtmlBody = $@"

Dear colleague,

This is a reminder to register to access the NHS England, Digital Learning Solutions platform as a supervised delegate by {supervisorDelegate.SupervisorName} ({centreName}).

Click here to register.

Your supervisor will then be able to assign competency assessments and view and validate your self assessment results.

"; emailService.SendEmail(new Email(emailSubjectLine, builder, supervisorDelegate.DelegateEmail)); } } diff --git a/DigitalLearningSolutions.Web/Services/RoleProfileService.cs b/DigitalLearningSolutions.Web/Services/RoleProfileService.cs deleted file mode 100644 index 7983b2afa4..0000000000 --- a/DigitalLearningSolutions.Web/Services/RoleProfileService.cs +++ /dev/null @@ -1,68 +0,0 @@ -using DigitalLearningSolutions.Data.DataServices; -using DigitalLearningSolutions.Data.Models.RoleProfiles; -using System.Collections.Generic; - -namespace DigitalLearningSolutions.Web.Services -{ - public interface IRoleProfileService - { - //GET DATA - IEnumerable GetAllRoleProfiles(int adminId); - - IEnumerable GetRoleProfilesForAdminId(int adminId); - - RoleProfileBase? GetRoleProfileBaseById(int roleProfileId, int adminId); - - RoleProfileBase? GetRoleProfileByName(string roleProfileName, int adminId); - - IEnumerable GetNRPProfessionalGroups(); - - //UPDATE DATA - bool UpdateRoleProfileName(int roleProfileId, int adminId, string roleProfileName); - - bool UpdateRoleProfileProfessionalGroup(int roleProfileId, int adminId, int? nrpProfessionalGroupID); - - } - public class RoleProfileService : IRoleProfileService - { - private readonly IRoleProfileDataService roleProfileDataService; - public RoleProfileService(IRoleProfileDataService roleProfileDataService) - { - this.roleProfileDataService = roleProfileDataService; - } - public IEnumerable GetAllRoleProfiles(int adminId) - { - return roleProfileDataService.GetAllRoleProfiles(adminId); - } - - public IEnumerable GetNRPProfessionalGroups() - { - return roleProfileDataService.GetNRPProfessionalGroups(); - } - - public RoleProfileBase? GetRoleProfileBaseById(int roleProfileId, int adminId) - { - return roleProfileDataService.GetRoleProfileBaseById(roleProfileId, adminId); - } - - public RoleProfileBase? GetRoleProfileByName(string roleProfileName, int adminId) - { - return roleProfileDataService.GetRoleProfileByName(roleProfileName, adminId); - } - - public IEnumerable GetRoleProfilesForAdminId(int adminId) - { - return roleProfileDataService.GetRoleProfilesForAdminId(adminId); - } - - public bool UpdateRoleProfileName(int roleProfileId, int adminId, string roleProfileName) - { - return roleProfileDataService.UpdateRoleProfileName(roleProfileId, adminId, roleProfileName); - } - - public bool UpdateRoleProfileProfessionalGroup(int roleProfileId, int adminId, int? nrpProfessionalGroupID) - { - return roleProfileDataService.UpdateRoleProfileProfessionalGroup(roleProfileId, adminId, nrpProfessionalGroupID); - } - } -} diff --git a/DigitalLearningSolutions.Web/Services/SupervisorService.cs b/DigitalLearningSolutions.Web/Services/SupervisorService.cs index 8cd8d2e16e..5a6dd5685f 100644 --- a/DigitalLearningSolutions.Web/Services/SupervisorService.cs +++ b/DigitalLearningSolutions.Web/Services/SupervisorService.cs @@ -1,5 +1,5 @@ using DigitalLearningSolutions.Data.DataServices; -using DigitalLearningSolutions.Data.Models.RoleProfiles; +using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using DigitalLearningSolutions.Data.Models.SelfAssessments; using DigitalLearningSolutions.Data.Models.Supervisor; using System; @@ -20,8 +20,8 @@ public interface ISupervisorService IEnumerable GetSupervisorDashboardToDoItemsForRequestedSignOffs(int adminId); IEnumerable GetSupervisorDashboardToDoItemsForRequestedReviews(int adminId); DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId); - IEnumerable GetAvailableRoleProfilesForDelegate(int candidateId, int centreId, int? categoryId); - RoleProfile? GetRoleProfileById(int selfAssessmentId); + IEnumerable GetAvailableCompetencyAssessmentsForDelegate(int candidateId, int centreId, int? categoryId); + CompetencyAssessment? GetCompetencyAssessmentById(int selfAssessmentId); IEnumerable GetSupervisorRolesForSelfAssessment(int selfAssessmentId); IEnumerable GetSupervisorRolesBySelfAssessmentIdForSupervisor(int selfAssessmentId); IEnumerable GetDelegateNominatableSupervisorRolesForSelfAssessment(int selfAssessmentId); @@ -80,9 +80,9 @@ public int EnrolDelegateOnAssessment(int delegateUserId, int supervisorDelegateI return supervisorDataService.EnrolDelegateOnAssessment(delegateUserId, supervisorDelegateId, selfAssessmentId, completeByDate, selfAssessmentSupervisorRoleId, adminId, centreId, isLoggedInUser); } - public IEnumerable GetAvailableRoleProfilesForDelegate(int candidateId, int centreId, int? categoryId) + public IEnumerable GetAvailableCompetencyAssessmentsForDelegate(int candidateId, int centreId, int? categoryId) { - return supervisorDataService.GetAvailableRoleProfilesForDelegate(candidateId, centreId, categoryId); + return supervisorDataService.GetAvailableCompetencyAssessmentsForDelegate(candidateId, centreId, categoryId); } public CandidateAssessmentSupervisor? GetCandidateAssessmentSupervisor(int candidateAssessmentID, int supervisorDelegateId, int selfAssessmentSupervisorRoleId) @@ -110,9 +110,9 @@ public IEnumerable GetDelegateNominatableSuperviso return supervisorDataService.GetDelegateNominatableSupervisorRolesForSelfAssessment(selfAssessmentId); } - public RoleProfile? GetRoleProfileById(int selfAssessmentId) + public CompetencyAssessment? GetCompetencyAssessmentById(int selfAssessmentId) { - return supervisorDataService.GetRoleProfileById(selfAssessmentId); + return supervisorDataService.GetCompetencyAssessmentById(selfAssessmentId); } public DelegateSelfAssessment? GetSelfAssessmentBaseByCandidateAssessmentId(int candidateAssessmentId, int? adminIdCategoryId) diff --git a/DigitalLearningSolutions.Web/Startup.cs b/DigitalLearningSolutions.Web/Startup.cs index bdc34b4d79..9443817b2d 100644 --- a/DigitalLearningSolutions.Web/Startup.cs +++ b/DigitalLearningSolutions.Web/Startup.cs @@ -434,7 +434,7 @@ private static void RegisterServices(IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped(); - services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); @@ -507,7 +507,7 @@ private static void RegisterDataServices(IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped(); - services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/AllCompetencyAssessmentsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/AllCompetencyAssessmentsViewModel.cs new file mode 100644 index 0000000000..a858706127 --- /dev/null +++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/AllCompetencyAssessmentsViewModel.cs @@ -0,0 +1,42 @@ +namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments +{ + using System.Collections.Generic; + using System.Linq; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using DigitalLearningSolutions.Web.Helpers; + using Microsoft.AspNetCore.Mvc.Rendering; + public class AllCompetencyAssessmentsViewModel : BaseCompetencyAssessmentsPageViewModel + { + public readonly IEnumerable CompetencyAssessments; + public readonly bool IsWorkforceManager; + public override SelectList CompetencyAssessmentSortByOptions { get; } = new SelectList(new[] + { + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentName, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentOwner, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentCreatedDate, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentPublishStatus, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentBrand, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentNationalRoleGroup, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentNationalCompetencyAssessment + }); + public AllCompetencyAssessmentsViewModel( + IEnumerable competencyAssessments, + string? searchString, + string sortBy, + string sortDirection, + int page + ) : base(searchString, sortBy, sortDirection, page) + { + var sortedItems = SortingHelper.SortCompetencyAssessmentItems( + competencyAssessments, + sortBy, + sortDirection + ); + var filteredItems = SearchHelper.FilterCompetencyAssessments(sortedItems, SearchString, 60, false).ToList(); + MatchingSearchResults = filteredItems.Count; + SetTotalPages(); + CompetencyAssessments = PaginateItems(filteredItems).Cast(); + } + } +} + diff --git a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/BaseRoleProfileViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/BaseCompetencyAssessmentsPageViewModel.cs similarity index 61% rename from DigitalLearningSolutions.Web/ViewModels/RoleProfiles/BaseRoleProfileViewModel.cs rename to DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/BaseCompetencyAssessmentsPageViewModel.cs index 0b5fa8d753..01a65ba1ca 100644 --- a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/BaseRoleProfileViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/BaseCompetencyAssessmentsPageViewModel.cs @@ -1,71 +1,71 @@ -namespace DigitalLearningSolutions.Web.ViewModels.RoleProfiles -{ - using System; - using System.Collections.Generic; - using System.Linq; - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using Microsoft.AspNetCore.Mvc; - using Microsoft.AspNetCore.Mvc.Rendering; - - public abstract class BaseRoleProfilesPageViewModel - { - [BindProperty] public string SortDirection { get; set; } - [BindProperty] public string SortBy { get; set; } - public int Page { get; protected set; } - public int TotalPages { get; protected set; } - public int MatchingSearchResults; - public abstract SelectList RoleProfileSortByOptions { get; } - - public const string DescendingText = "Descending"; - public const string AscendingText = "Ascending"; - - private const int ItemsPerPage = 12; - - public readonly string? SearchString; - - protected BaseRoleProfilesPageViewModel( - string? searchString, - string sortBy, - string sortDirection, - int page - ) - { - SortBy = sortBy; - SortDirection = sortDirection; - SearchString = searchString; - Page = page; - } - protected IEnumerable PaginateItems(IList items) - { - if (items.Count > ItemsPerPage) - { - items = items.Skip(OffsetFromPageNumber(Page)).Take(ItemsPerPage).ToList(); - } - - return items; - } - protected void SetTotalPages() - { - TotalPages = (int)Math.Ceiling(MatchingSearchResults / (double)ItemsPerPage); - if (Page < 1 || Page > TotalPages) - { - Page = 1; - } - } - - private int OffsetFromPageNumber(int pageNumber) => - (pageNumber - 1) * ItemsPerPage; - } - - public static class RoleProfileSortByOptionTexts - { - public const string - RoleProfileName = "Profile Name", - RoleProfileOwner = "Owner", - RoleProfileCreatedDate = "Created Date", - RoleProfilePublishStatus = "Publish Status", - RoleProfileBrand = "Brand", - RoleProfileNationalRoleGroup = "National Job Group", - RoleProfileNationalRoleProfile = "National Job Profile"; - } -} +namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments +{ + using System; + using System.Collections.Generic; + using System.Linq; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Mvc.Rendering; + + public abstract class BaseCompetencyAssessmentsPageViewModel + { + [BindProperty] public string SortDirection { get; set; } + [BindProperty] public string SortBy { get; set; } + public int Page { get; protected set; } + public int TotalPages { get; protected set; } + public int MatchingSearchResults; + public abstract SelectList CompetencyAssessmentSortByOptions { get; } + + public const string DescendingText = "Descending"; + public const string AscendingText = "Ascending"; + + private const int ItemsPerPage = 12; + + public readonly string? SearchString; + + protected BaseCompetencyAssessmentsPageViewModel( + string? searchString, + string sortBy, + string sortDirection, + int page + ) + { + SortBy = sortBy; + SortDirection = sortDirection; + SearchString = searchString; + Page = page; + } + protected IEnumerable PaginateItems(IList items) + { + if (items.Count > ItemsPerPage) + { + items = items.Skip(OffsetFromPageNumber(Page)).Take(ItemsPerPage).ToList(); + } + + return items; + } + protected void SetTotalPages() + { + TotalPages = (int)Math.Ceiling(MatchingSearchResults / (double)ItemsPerPage); + if (Page < 1 || Page > TotalPages) + { + Page = 1; + } + } + + private int OffsetFromPageNumber(int pageNumber) => + (pageNumber - 1) * ItemsPerPage; + } + + public static class CompetencyAssessmentSortByOptionTexts + { + public const string + CompetencyAssessmentName = "Competency Assessment", + CompetencyAssessmentOwner = "Owner", + CompetencyAssessmentCreatedDate = "Created Date", + CompetencyAssessmentPublishStatus = "Publish Status", + CompetencyAssessmentBrand = "Brand", + CompetencyAssessmentNationalRoleGroup = "National Job Group", + CompetencyAssessmentNationalCompetencyAssessment = "National Job Profile"; + } +} diff --git a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/CompetencyAssessmentsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/CompetencyAssessmentsViewModel.cs new file mode 100644 index 0000000000..f091a7dd76 --- /dev/null +++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/CompetencyAssessmentsViewModel.cs @@ -0,0 +1,29 @@ +namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments +{ + using DigitalLearningSolutions.Web.Models.Enums; + using DigitalLearningSolutions.Web.ViewModels.Common; + + public class CompetencyAssessmentsViewModel + { + public CompetencyAssessmentsViewModel( + bool isWorkforceManager, + bool isWorkforceContributor, + AllCompetencyAssessmentsViewModel allCompetencyAssessments, + MyCompetencyAssessmentsViewModel myCompetencyAssessments, + CompetencyAssessmentsTab currentTab + ) + { + IsWorkforceManager = isWorkforceManager; + IsWorkforceContributor = isWorkforceContributor; + MyCompetencyAssessmentsViewModel = myCompetencyAssessments; + AllCompetencyAssessmentsViewModel = allCompetencyAssessments; + TabNavLinks = new TabsNavViewModel(currentTab); + } + + public bool IsWorkforceManager { get; set; } + public bool IsWorkforceContributor { get; set; } + public MyCompetencyAssessmentsViewModel MyCompetencyAssessmentsViewModel { get; set; } + public AllCompetencyAssessmentsViewModel AllCompetencyAssessmentsViewModel { get; set; } + public TabsNavViewModel TabNavLinks { get; set; } + } +} diff --git a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/MyCompetencyAssessmentsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/MyCompetencyAssessmentsViewModel.cs new file mode 100644 index 0000000000..ec2cf74500 --- /dev/null +++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/MyCompetencyAssessmentsViewModel.cs @@ -0,0 +1,43 @@ +namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments +{ + using System.Collections.Generic; + using System.Linq; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using DigitalLearningSolutions.Web.Helpers; + using Microsoft.AspNetCore.Mvc.Rendering; + + public class MyCompetencyAssessmentsViewModel : BaseCompetencyAssessmentsPageViewModel + { + public readonly IEnumerable CompetencyAssessments; + public readonly bool IsWorkforceManager; + + public override SelectList CompetencyAssessmentSortByOptions { get; } = new SelectList(new[] + { + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentName, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentOwner, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentCreatedDate, + CompetencyAssessmentSortByOptionTexts.CompetencyAssessmentPublishStatus + }); + + public MyCompetencyAssessmentsViewModel( + IEnumerable competencyAssessments, // Renamed parameter to avoid shadowing + string? searchString, + string sortBy, + string sortDirection, + int page, + bool isWorkforceManager + ) : base(searchString, sortBy, sortDirection, page) + { + var sortedItems = SortingHelper.SortCompetencyAssessmentItems( + competencyAssessments, + sortBy, + sortDirection + ); + var filteredItems = SearchHelper.FilterCompetencyAssessments(sortedItems, SearchString, 60, false).ToList(); + MatchingSearchResults = filteredItems.Count; + SetTotalPages(); + CompetencyAssessments = PaginateItems(filteredItems).Cast(); // Assign to the field + IsWorkforceManager = isWorkforceManager; + } + } +} diff --git a/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/ProfessionalGroupViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/ProfessionalGroupViewModel.cs new file mode 100644 index 0000000000..86ba83228b --- /dev/null +++ b/DigitalLearningSolutions.Web/ViewModels/CompetencyAssessments/ProfessionalGroupViewModel.cs @@ -0,0 +1,11 @@ +namespace DigitalLearningSolutions.Web.ViewModels.CompetencyAssessments +{ + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; + using System.Collections.Generic; + + public class ProfessionalGroupViewModel + { + public IEnumerable NRPProfessionalGroups { get; set; } + public CompetencyAssessmentBase CompetencyAssessmentBase { get; set; } + } +} diff --git a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/AllRoleProfilesViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/AllRoleProfilesViewModel.cs deleted file mode 100644 index bad699149f..0000000000 --- a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/AllRoleProfilesViewModel.cs +++ /dev/null @@ -1,42 +0,0 @@ -namespace DigitalLearningSolutions.Web.ViewModels.RoleProfiles -{ - using System.Collections.Generic; - using System.Linq; - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using DigitalLearningSolutions.Web.Helpers; - using Microsoft.AspNetCore.Mvc.Rendering; - public class AllRoleProfilesViewModel : BaseRoleProfilesPageViewModel - { - public readonly IEnumerable RoleProfiles; - public readonly bool IsWorkforceManager; - public override SelectList RoleProfileSortByOptions { get; } = new SelectList(new[] - { - RoleProfileSortByOptionTexts.RoleProfileName, - RoleProfileSortByOptionTexts.RoleProfileOwner, - RoleProfileSortByOptionTexts.RoleProfileCreatedDate, - RoleProfileSortByOptionTexts.RoleProfilePublishStatus, - RoleProfileSortByOptionTexts.RoleProfileBrand, - RoleProfileSortByOptionTexts.RoleProfileNationalRoleGroup, - RoleProfileSortByOptionTexts.RoleProfileNationalRoleProfile - }); - public AllRoleProfilesViewModel( - IEnumerable roleProfiles, - string? searchString, - string sortBy, - string sortDirection, - int page - ) : base(searchString, sortBy, sortDirection, page) - { - var sortedItems = SortingHelper.SortRoleProfileItems( - roleProfiles, - sortBy, - sortDirection - ); - var filteredItems = SearchHelper.FilterRoleProfiles(sortedItems, SearchString, 60, false).ToList(); - MatchingSearchResults = filteredItems.Count; - SetTotalPages(); - var paginatedItems = PaginateItems(filteredItems); - RoleProfiles = paginatedItems.Cast(); - } - } -} diff --git a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/MyRoleProfilesViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/MyRoleProfilesViewModel.cs deleted file mode 100644 index 7657922974..0000000000 --- a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/MyRoleProfilesViewModel.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace DigitalLearningSolutions.Web.ViewModels.RoleProfiles -{ - using System.Collections.Generic; - using System.Linq; - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using DigitalLearningSolutions.Web.Helpers; - using Microsoft.AspNetCore.Mvc.Rendering; - public class MyRoleProfilesViewModel : BaseRoleProfilesPageViewModel - { - public readonly IEnumerable RoleProfiles; - public readonly bool IsWorkforceManager; - public override SelectList RoleProfileSortByOptions { get; } = new SelectList(new[] - { - RoleProfileSortByOptionTexts.RoleProfileName, - RoleProfileSortByOptionTexts.RoleProfileOwner, - RoleProfileSortByOptionTexts.RoleProfileCreatedDate, - RoleProfileSortByOptionTexts.RoleProfilePublishStatus - }); - public MyRoleProfilesViewModel( - IEnumerable roleProfiles, - string? searchString, - string sortBy, - string sortDirection, - int page, - bool isWorkforceManager - ) : base(searchString, sortBy, sortDirection, page) - { - var sortedItems = SortingHelper.SortRoleProfileItems( - roleProfiles, - sortBy, - sortDirection - ); - var filteredItems = SearchHelper.FilterRoleProfiles(sortedItems, SearchString, 60, false).ToList(); - MatchingSearchResults = filteredItems.Count; - SetTotalPages(); - var paginatedItems = PaginateItems(filteredItems); - RoleProfiles = paginatedItems.Cast(); - IsWorkforceManager = isWorkforceManager; - } - } -} diff --git a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/ProfessionalGroupViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/ProfessionalGroupViewModel.cs deleted file mode 100644 index 67701b8d15..0000000000 --- a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/ProfessionalGroupViewModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace DigitalLearningSolutions.Web.ViewModels.RoleProfiles -{ - using DigitalLearningSolutions.Data.Models.RoleProfiles; - using System.Collections.Generic; - - public class ProfessionalGroupViewModel - { - public IEnumerable NRPProfessionalGroups { get; set; } - public RoleProfileBase RoleProfileBase { get; set; } - } -} diff --git a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/RoleProfilesViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/RoleProfilesViewModel.cs deleted file mode 100644 index 9154eeee6b..0000000000 --- a/DigitalLearningSolutions.Web/ViewModels/RoleProfiles/RoleProfilesViewModel.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace DigitalLearningSolutions.Web.ViewModels.RoleProfiles -{ - using DigitalLearningSolutions.Web.Models.Enums; - using DigitalLearningSolutions.Web.ViewModels.Common; - - public class RoleProfilesViewModel - { - public RoleProfilesViewModel( - bool isWorkforceManager, - bool isWorkforceContributor, - AllRoleProfilesViewModel allRoleProfiles, - MyRoleProfilesViewModel myRoleProfiles, - RoleProfilesTab currentTab - ) - { - IsWorkforceManager = isWorkforceManager; - IsWorkforceContributor = isWorkforceContributor; - MyRoleProfilesViewModel = myRoleProfiles; - AllRoleProfilesViewModel = allRoleProfiles; - TabNavLinks = new TabsNavViewModel(currentTab); - } - - public bool IsWorkforceManager { get; set; } - public bool IsWorkforceContributor { get; set; } - public MyRoleProfilesViewModel MyRoleProfilesViewModel { get; set; } - public AllRoleProfilesViewModel AllRoleProfilesViewModel { get; set; } - public TabsNavViewModel TabNavLinks { get; set; } - } -} diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateOnProfileAssessmentViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateOnProfileAssessmentViewModel.cs index ed6e40e583..1b70330bbe 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateOnProfileAssessmentViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateOnProfileAssessmentViewModel.cs @@ -1,13 +1,13 @@ namespace DigitalLearningSolutions.Web.ViewModels.Supervisor { - using DigitalLearningSolutions.Data.Models.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using DigitalLearningSolutions.Data.Models.SessionData.Supervisor; using DigitalLearningSolutions.Data.Models.Supervisor; using System.Collections.Generic; public class EnrolDelegateOnProfileAssessmentViewModel { - public SessionEnrolOnRoleProfile SessionEnrolOnRoleProfile { get; set; } + public SessionEnrolOnCompetencyAssessment SessionEnrolOnCompetencyAssessment { get; set; } public SupervisorDelegateDetail SupervisorDelegateDetail { get; set; } - public IEnumerable RoleProfiles { get; set; } + public IEnumerable CompetencyAssessments { get; set; } } } diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSetCompletByDateViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSetCompletByDateViewModel.cs index cac66da25f..e8582ca012 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSetCompletByDateViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSetCompletByDateViewModel.cs @@ -1,6 +1,6 @@ namespace DigitalLearningSolutions.Web.ViewModels.Supervisor { - using DigitalLearningSolutions.Data.Models.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using DigitalLearningSolutions.Data.Models.Supervisor; using DigitalLearningSolutions.Web.Helpers; using System; @@ -8,7 +8,7 @@ public class EnrolDelegateSetCompletByDateViewModel { public SupervisorDelegateDetail SupervisorDelegateDetail { get; set; } - public RoleProfile RoleProfile { get; set; } + public CompetencyAssessment CompetencyAssessment { get; set; } public DateTime? CompleteByDate { get; set; } public OldDateValidator.ValidationResult? CompleteByValidationResult { get; set; } } diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSummaryViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSummaryViewModel.cs index 3b36eef8a2..681213e53f 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSummaryViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSummaryViewModel.cs @@ -1,13 +1,13 @@ namespace DigitalLearningSolutions.Web.ViewModels.Supervisor { - using DigitalLearningSolutions.Data.Models.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using DigitalLearningSolutions.Data.Models.Supervisor; using System; public class EnrolDelegateSummaryViewModel { public SupervisorDelegateDetail SupervisorDelegateDetail { get; set; } - public RoleProfile RoleProfile { get; set; } + public CompetencyAssessment CompetencyAssessment { get; set; } public DateTime? CompleteByDate { get; set; } public string SupervisorRoleName { get; set; } public int SupervisorRoleCount { get; set; } diff --git a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSupervisorRoleViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSupervisorRoleViewModel.cs index 0c988b9457..4b15b66edf 100644 --- a/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSupervisorRoleViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/Supervisor/EnrolDelegateSupervisorRoleViewModel.cs @@ -1,6 +1,6 @@ namespace DigitalLearningSolutions.Web.ViewModels.Supervisor { - using DigitalLearningSolutions.Data.Models.RoleProfiles; + using DigitalLearningSolutions.Data.Models.CompetencyAssessments; using DigitalLearningSolutions.Data.Models.Supervisor; using System; using System.Collections.Generic; @@ -9,7 +9,7 @@ public class EnrolDelegateSupervisorRoleViewModel { public SupervisorDelegateDetail? SupervisorDelegateDetail { get; set; } - public RoleProfile? RoleProfile { get; set; } + public CompetencyAssessment? CompetencyAssessment { get; set; } [Required(ErrorMessage = "Please choose a supervisor role")] public int? SelfAssessmentSupervisorRoleId { get; set; } public IEnumerable? SelfAssessmentSupervisorRoles { get; set; } diff --git a/DigitalLearningSolutions.Web/Views/ApplicationSelector/Index.cshtml b/DigitalLearningSolutions.Web/Views/ApplicationSelector/Index.cshtml index 8200e11d84..11c835815f 100644 --- a/DigitalLearningSolutions.Web/Views/ApplicationSelector/Index.cshtml +++ b/DigitalLearningSolutions.Web/Views/ApplicationSelector/Index.cshtml @@ -126,7 +126,7 @@

Supervise

-

Assign and review staff profile assessments and arrange supervision sessions.

+

Assign and review staff competency assessments and arrange supervision sessions.

Frameworks -

Create and distribute competency frameworks and role profiles.

+

Create and distribute competency frameworks and assessments.

@@ -13,7 +13,7 @@
    -
  1. Role Profiles
  2. +
  3. Competency Assessments
@@ -26,11 +26,11 @@
@if ((string)ViewContext.RouteData.Values["tabname"] == "Mine") { - + } else if ((string)ViewContext.RouteData.Values["tabname"] == "All") { - + }
diff --git a/DigitalLearningSolutions.Web/Views/RoleProfiles/Name.cshtml b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/Name.cshtml similarity index 67% rename from DigitalLearningSolutions.Web/Views/RoleProfiles/Name.cshtml rename to DigitalLearningSolutions.Web/Views/CompetencyAssessments/Name.cshtml index 89e8897002..493008c8a0 100644 --- a/DigitalLearningSolutions.Web/Views/RoleProfiles/Name.cshtml +++ b/DigitalLearningSolutions.Web/Views/CompetencyAssessments/Name.cshtml @@ -1,7 +1,7 @@ -@using DigitalLearningSolutions.Data.Models.RoleProfiles; -@model RoleProfileBase; +@using DigitalLearningSolutions.Data.Models.CompetencyAssessments; +@model CompetencyAssessmentBase; @{ - ViewData["Title"] = "New Role Profiles"; + ViewData["Title"] = "New Competency Assessments"; ViewData["Application"] = "Framework Service"; } @@ -14,10 +14,10 @@ } @@ -28,43 +28,43 @@ else } } @if ((string)ViewContext.RouteData.Values["actionname"] == "New") { -

Create a new role profile

+

Create a new competency assessment

} else { -

Edit role profile name

+

Edit competency assessment name

}
@if (!ViewData.ModelState.IsValid) { } - +
Choose a title that identifies the job role or roles that this profile applies to and the scope of capabilities covered.
- - + +
- + @@ -79,7 +79,7 @@ else Next