Skip to content

Commit 634f4e1

Browse files
authored
Merge pull request #2838 from TechnologyEnhancedLearning/Develop/Fixes/TD-4598-Signoffself-assessmentappearswhenfiltersappliedinSupervisorpagethoughproficienciesarenotcompletedresolvingconflicts
TD-4598 Sign off self-assessment appears when filters applied in Supervisor page though proficiencies are not completed
2 parents 731621b + 4058fc2 commit 634f4e1

File tree

6 files changed

+45
-121
lines changed

6 files changed

+45
-121
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace DigitalLearningSolutions.Data.Models.SelfAssessments
8+
{
9+
public class CompetencySummary
10+
{
11+
public int VerifiedCount { get; set; }
12+
public int QuestionsCount { get; set; }
13+
public bool CanViewCertificate { get; set; }
14+
}
15+
}

DigitalLearningSolutions.Web/Controllers/LearningPortalController/SelfAssessment.cs

Lines changed: 10 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -532,8 +532,8 @@ public IActionResult SelfAssessmentOverview(int selfAssessmentId, string vocabul
532532
{
533533
searchModel.IsSupervisorResultsReviewed = assessment.IsSupervisorResultsReviewed;
534534
}
535-
536-
ViewBag.CanViewCertificate = CertificateHelper.CanViewCertificate(recentResults, model.SupervisorSignOffs);
535+
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
536+
ViewBag.CanViewCertificate = competencySummaries.CanViewCertificate;
537537
ViewBag.SupervisorSelfAssessmentReview = assessment.SupervisorSelfAssessmentReview;
538538
return View("SelfAssessments/SelfAssessmentOverview", model);
539539
}
@@ -1710,50 +1710,18 @@ public IActionResult CompetencySelfAssessmentCertificate(int CandidateAssessment
17101710
var delegateUserId = competencymaindata.LearnerId;
17111711
var recentResults = selfAssessmentService.GetMostRecentResults(competencymaindata.SelfAssessmentID, competencymaindata.LearnerDelegateAccountId).ToList();
17121712
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);
1713-
if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
1713+
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
1714+
if (!competencySummaries.CanViewCertificate)
17141715
{
17151716
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 401 });
17161717
}
1717-
17181718
var competencycount = selfAssessmentService.GetCompetencyCountSelfAssessmentCertificate(competencymaindata.CandidateAssessmentID);
17191719
var accessors = selfAssessmentService.GetAccessor(competencymaindata.SelfAssessmentID, competencymaindata.LearnerId);
17201720
var assessment = selfAssessmentService.GetSelfAssessmentForCandidateById(delegateUserId, competencymaindata.SelfAssessmentID);
17211721
var competencyIds = recentResults.Select(c => c.Id).ToArray();
17221722
var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds);
1723-
var competencies = CompetencyFilterHelper.FilterCompetencies(recentResults, competencyFlags, null);
1724-
foreach (var competency in competencies)
1725-
{
1726-
competency.QuestionLabel = assessment.QuestionLabel;
1727-
foreach (var assessmentQuestion in competency.AssessmentQuestions)
1728-
{
1729-
if (assessmentQuestion.AssessmentQuestionInputTypeID != 2)
1730-
{
1731-
assessmentQuestion.LevelDescriptors = selfAssessmentService
1732-
.GetLevelDescriptorsForAssessmentQuestion(
1733-
assessmentQuestion.Id,
1734-
assessmentQuestion.MinValue,
1735-
assessmentQuestion.MaxValue,
1736-
assessmentQuestion.MinValue == 0
1737-
).ToList();
1738-
}
1739-
}
1740-
}
1741-
1742-
var CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup);
1743-
var competencySummaries = from g in CompetencyGroups
1744-
let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required)
1745-
let selfAssessedCount = questions.Count(q => q.Result.HasValue)
1746-
let verifiedCount = questions.Count(q => !((q.Result == null || q.Verified == null || q.SignedOff != true) && q.Required))
1747-
1748-
select new
1749-
{
1750-
SelfAssessedCount = selfAssessedCount,
1751-
VerifiedCount = verifiedCount,
1752-
Questions = questions.Count()
1753-
};
1754-
1755-
int sumVerifiedCount = competencySummaries.Sum(item => item.VerifiedCount);
1756-
int sumQuestions = competencySummaries.Sum(item => item.Questions);
1723+
int sumVerifiedCount = competencySummaries.VerifiedCount;
1724+
int sumQuestions = competencySummaries.QuestionsCount;
17571725
var activitySummaryCompetencySelfAssesment = selfAssessmentService.GetActivitySummaryCompetencySelfAssesment(competencymaindata.Id);
17581726
var model = new CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, vocabulary, accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, supervisorDelegateId);
17591727
return View("SelfAssessments/CompetencySelfAssessmentCertificate", model);
@@ -1792,42 +1760,13 @@ public async Task<IActionResult> DownloadCertificate(int candidateAssessmentId,
17921760
var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds);
17931761
var competencies = CompetencyFilterHelper.FilterCompetencies(recentResults, competencyFlags, null);
17941762
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);
1795-
if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
1763+
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
1764+
if (!competencySummaries.CanViewCertificate)
17961765
{
17971766
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 401 });
17981767
}
1799-
foreach (var competency in competencies)
1800-
{
1801-
competency.QuestionLabel = assessment.QuestionLabel;
1802-
foreach (var assessmentQuestion in competency.AssessmentQuestions)
1803-
{
1804-
if (assessmentQuestion.AssessmentQuestionInputTypeID != 2)
1805-
{
1806-
assessmentQuestion.LevelDescriptors = selfAssessmentService
1807-
.GetLevelDescriptorsForAssessmentQuestion(
1808-
assessmentQuestion.Id,
1809-
assessmentQuestion.MinValue,
1810-
assessmentQuestion.MaxValue,
1811-
assessmentQuestion.MinValue == 0
1812-
).ToList();
1813-
}
1814-
}
1815-
}
1816-
1817-
var CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup);
1818-
var competencySummaries = from g in CompetencyGroups
1819-
let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required)
1820-
let selfAssessedCount = questions.Count(q => q.Result.HasValue)
1821-
let verifiedCount = questions.Count(q => !((q.Result == null || q.Verified == null || q.SignedOff != true) && q.Required))
1822-
select new
1823-
{
1824-
SelfAssessedCount = selfAssessedCount,
1825-
VerifiedCount = verifiedCount,
1826-
Questions = questions.Count()
1827-
};
1828-
1829-
int sumVerifiedCount = competencySummaries.Sum(item => item.VerifiedCount);
1830-
int sumQuestions = competencySummaries.Sum(item => item.Questions);
1768+
int sumVerifiedCount = competencySummaries.VerifiedCount;
1769+
int sumQuestions = competencySummaries.QuestionsCount;
18311770
var model = new CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, "Proficiencies", accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, null);
18321771
var renderedViewHTML = RenderRazorViewToString(this, "SelfAssessments/DownloadCompetencySelfAssessmentCertificate", model);
18331772

DigitalLearningSolutions.Web/Controllers/SupervisorController/Supervisor.cs

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,8 @@ public IActionResult ReviewDelegateSelfAssessment(int supervisorDelegateId, int
384384
(int)superviseDelegate.DelegateUserID
385385
);
386386
}
387-
388-
ViewBag.CanViewCertificate = CertificateHelper.CanViewCertificate(reviewedCompetencies, model.SupervisorSignOffs);
387+
var competencySummaries = CertificateHelper.CanViewCertificate(reviewedCompetencies, model.SupervisorSignOffs);
388+
model.CompetencySummaries = competencySummaries;
389389
ViewBag.SupervisorSelfAssessmentReview = delegateSelfAssessment.SupervisorSelfAssessmentReview;
390390
ViewBag.navigatedFrom = selfAssessmentResultId == null;
391391
TempData["CertificateSupervisorDelegateId"] = supervisorDelegateId;
@@ -1385,7 +1385,8 @@ public IActionResult CompetencySelfAssessmentCertificatesupervisor(int candidate
13851385
var delegateUserId = competencymaindata.LearnerId;
13861386
var recentResults = selfAssessmentService.GetMostRecentResults(competencymaindata.SelfAssessmentID, competencymaindata.LearnerDelegateAccountId).ToList();
13871387
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);
1388-
if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
1388+
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
1389+
if (!competencySummaries.CanViewCertificate)
13891390
{
13901391
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 401 });
13911392
}
@@ -1394,41 +1395,8 @@ public IActionResult CompetencySelfAssessmentCertificatesupervisor(int candidate
13941395
var accessors = selfAssessmentService.GetAccessor(competencymaindata.SelfAssessmentID, competencymaindata.LearnerId);
13951396
var assessment = selfAssessmentService.GetSelfAssessmentForCandidateById(delegateUserId, competencymaindata.SelfAssessmentID);
13961397
var competencyIds = recentResults.Select(c => c.Id).ToArray();
1397-
var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds);
1398-
var competencies = CompetencyFilterHelper.FilterCompetencies(recentResults, competencyFlags, null);
1399-
foreach (var competency in competencies)
1400-
{
1401-
competency.QuestionLabel = assessment.QuestionLabel;
1402-
foreach (var assessmentQuestion in competency.AssessmentQuestions)
1403-
{
1404-
if (assessmentQuestion.AssessmentQuestionInputTypeID != 2)
1405-
{
1406-
assessmentQuestion.LevelDescriptors = selfAssessmentService
1407-
.GetLevelDescriptorsForAssessmentQuestion(
1408-
assessmentQuestion.Id,
1409-
assessmentQuestion.MinValue,
1410-
assessmentQuestion.MaxValue,
1411-
assessmentQuestion.MinValue == 0
1412-
).ToList();
1413-
}
1414-
}
1415-
}
1416-
1417-
var CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup);
1418-
var competencySummaries = from g in CompetencyGroups
1419-
let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required)
1420-
let selfAssessedCount = questions.Count(q => q.Result.HasValue)
1421-
let verifiedCount = questions.Count(q => !((q.Result == null || q.Verified == null || q.SignedOff != true) && q.Required))
1422-
1423-
select new
1424-
{
1425-
SelfAssessedCount = selfAssessedCount,
1426-
VerifiedCount = verifiedCount,
1427-
Questions = questions.Count()
1428-
};
1429-
1430-
int sumVerifiedCount = competencySummaries.Sum(item => item.VerifiedCount);
1431-
int sumQuestions = competencySummaries.Sum(item => item.Questions);
1398+
int sumVerifiedCount = competencySummaries.VerifiedCount;
1399+
int sumQuestions = competencySummaries.QuestionsCount;
14321400
var activitySummaryCompetencySelfAssesment = selfAssessmentService.GetActivitySummaryCompetencySelfAssesment(competencymaindata.Id);
14331401
var model = new ViewModels.LearningPortal.SelfAssessments.CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, "ProfileAssessment", accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, supervisorDelegateId);
14341402
return View("SelfAssessments/CompetencySelfAssessmentCertificate", model);

DigitalLearningSolutions.Web/Helpers/CertificateHelper.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ namespace DigitalLearningSolutions.Web.Helpers
1010
{
1111
public class CertificateHelper
1212
{
13-
public static bool CanViewCertificate(List<Competency> reviewedCompetencies, IEnumerable<SupervisorSignOff>? SupervisorSignOffs)
13+
public static CompetencySummary CanViewCertificate(List<Competency> reviewedCompetencies, IEnumerable<SupervisorSignOff>? SupervisorSignOffs)
1414
{
15-
1615
var CompetencyGroups = reviewedCompetencies.GroupBy(competency => competency.CompetencyGroup);
17-
1816
var competencySummaries = CompetencyGroups.Select(g =>
1917
{
2018
var questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required);
@@ -38,9 +36,15 @@ public static bool CanViewCertificate(List<Competency> reviewedCompetencies, IEn
3836

3937
var allComptConfirmed = competencySummaries.Count() == 0 ? false : competencySummaries.Sum(c => c.VerifiedCount) == competencySummaries.Sum(c => c.QuestionsCount);
4038

41-
return SupervisorSignOffs?.FirstOrDefault()?.Verified != null &&
42-
SupervisorSignOffs.FirstOrDefault().SignedOff &&
43-
allComptConfirmed && latestResult <= latestSignoff;
39+
var model = new CompetencySummary()
40+
{
41+
VerifiedCount = competencySummaries.Sum(item => item.VerifiedCount),
42+
QuestionsCount = competencySummaries.Sum(item => item.QuestionsCount),
43+
CanViewCertificate = SupervisorSignOffs?.FirstOrDefault()?.Verified != null &&
44+
SupervisorSignOffs.FirstOrDefault().SignedOff &&
45+
allComptConfirmed && latestResult <= latestSignoff
46+
};
47+
return model;
4448
}
4549
}
4650
}

DigitalLearningSolutions.Web/ViewModels/Supervisor/ReviewSelfAssessmentViewModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ public string VocabPlural(string vocabulary)
2121
}
2222
public int CandidateAssessmentId { get; set; }
2323
public bool ExportToExcelHide { get; set; }
24+
public CompetencySummary CompetencySummaries { get; set; }
2425
}
2526
}

DigitalLearningSolutions.Web/Views/Supervisor/ReviewSelfAssessment.cshtml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
</a>
9797
}
9898

99-
@if (ViewBag.CanViewCertificate)
99+
@if(Model.CompetencySummaries.CanViewCertificate)
100100
{
101101
<a class="nhsuk-button"
102102
asp-route-candidateAssessmentId="@Model.CandidateAssessmentId"
@@ -106,14 +106,11 @@
106106
Certificate
107107
</a>
108108
}
109-
@if (
110-
Model.DelegateSelfAssessment.SignOffRequested > 0 &&
111-
competencySummaries.Sum(c => (int)c["verifiedCount"]) == competencySummaries.Sum(c => (int)c["questionsCount"])
112-
)
109+
@if(Model.DelegateSelfAssessment.SignOffRequested > 0 && Model.CompetencySummaries.VerifiedCount == Model.CompetencySummaries.QuestionsCount)
113110
{
114111
<a role="button" asp-action="SignOffProfileAssessment" asp-route-candidateAssessmentId="@Model.DelegateSelfAssessment.ID" asp-route-supervisorDelegateId="@Model.SupervisorDelegateDetail.ID" class="nhsuk-button">Sign-off self assessment</a>
115112
}
116-
@if ((Model.DelegateSelfAssessment.ResultsVerificationRequests > 1) && (competencySummaries.Sum(c => (int)c["verifiedCount"]) < competencySummaries.Sum(c => (int)c["questionsCount"])))
113+
@if((Model.DelegateSelfAssessment.ResultsVerificationRequests > 1) && Model.CompetencySummaries.VerifiedCount < Model.CompetencySummaries.QuestionsCount)
117114
{
118115
<a role="button" asp-action="VerifyMultipleResults" asp-route-candidateAssessmentId="@Model.DelegateSelfAssessment.ID" asp-route-supervisorDelegateId="@Model.SupervisorDelegateDetail.ID" class="nhsuk-button">Confirm multiple results</a>
119116
}

0 commit comments

Comments
 (0)