Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DigitalLearningSolutions.Data.Models.SelfAssessments
{
public class CompetencySummary
{
public int VerifiedCount { get; set; }
public int QuestionsCount { get; set; }
public bool CanViewCertificate { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -490,8 +490,8 @@ public IActionResult SelfAssessmentOverview(int selfAssessmentId, string vocabul
{
searchModel.IsSupervisorResultsReviewed = assessment.IsSupervisorResultsReviewed;
}

ViewBag.CanViewCertificate = CertificateHelper.CanViewCertificate(recentResults, model.SupervisorSignOffs);
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
ViewBag.CanViewCertificate = competencySummaries.CanViewCertificate;
ViewBag.SupervisorSelfAssessmentReview = assessment.SupervisorSelfAssessmentReview;
return View("SelfAssessments/SelfAssessmentOverview", model);
}
Expand Down Expand Up @@ -1661,50 +1661,18 @@ public IActionResult CompetencySelfAssessmentCertificate(int CandidateAssessment
var delegateUserId = competencymaindata.LearnerId;
var recentResults = selfAssessmentService.GetMostRecentResults(competencymaindata.SelfAssessmentID, competencymaindata.LearnerDelegateAccountId).ToList();
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);
if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
if (!competencySummaries.CanViewCertificate)
{
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 401 });
}

var competencycount = selfAssessmentService.GetCompetencyCountSelfAssessmentCertificate(competencymaindata.CandidateAssessmentID);
var accessors = selfAssessmentService.GetAccessor(competencymaindata.SelfAssessmentID, competencymaindata.LearnerId);
var assessment = selfAssessmentService.GetSelfAssessmentForCandidateById(delegateUserId, competencymaindata.SelfAssessmentID);
var competencyIds = recentResults.Select(c => c.Id).ToArray();
var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds);
var competencies = CompetencyFilterHelper.FilterCompetencies(recentResults, competencyFlags, null);
foreach (var competency in competencies)
{
competency.QuestionLabel = assessment.QuestionLabel;
foreach (var assessmentQuestion in competency.AssessmentQuestions)
{
if (assessmentQuestion.AssessmentQuestionInputTypeID != 2)
{
assessmentQuestion.LevelDescriptors = selfAssessmentService
.GetLevelDescriptorsForAssessmentQuestion(
assessmentQuestion.Id,
assessmentQuestion.MinValue,
assessmentQuestion.MaxValue,
assessmentQuestion.MinValue == 0
).ToList();
}
}
}

var CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup);
var competencySummaries = from g in CompetencyGroups
let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required)
let selfAssessedCount = questions.Count(q => q.Result.HasValue)
let verifiedCount = questions.Count(q => !((q.Result == null || q.Verified == null || q.SignedOff != true) && q.Required))

select new
{
SelfAssessedCount = selfAssessedCount,
VerifiedCount = verifiedCount,
Questions = questions.Count()
};

int sumVerifiedCount = competencySummaries.Sum(item => item.VerifiedCount);
int sumQuestions = competencySummaries.Sum(item => item.Questions);
int sumVerifiedCount = competencySummaries.VerifiedCount;
int sumQuestions = competencySummaries.QuestionsCount;
var activitySummaryCompetencySelfAssesment = selfAssessmentService.GetActivitySummaryCompetencySelfAssesment(competencymaindata.Id);
var model = new CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, vocabulary, accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, supervisorDelegateId);
return View("SelfAssessments/CompetencySelfAssessmentCertificate", model);
Expand Down Expand Up @@ -1743,42 +1711,13 @@ public async Task<IActionResult> DownloadCertificate(int candidateAssessmentId,
var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds);
var competencies = CompetencyFilterHelper.FilterCompetencies(recentResults, competencyFlags, null);
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);
if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
if (!competencySummaries.CanViewCertificate)
{
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 401 });
}
foreach (var competency in competencies)
{
competency.QuestionLabel = assessment.QuestionLabel;
foreach (var assessmentQuestion in competency.AssessmentQuestions)
{
if (assessmentQuestion.AssessmentQuestionInputTypeID != 2)
{
assessmentQuestion.LevelDescriptors = selfAssessmentService
.GetLevelDescriptorsForAssessmentQuestion(
assessmentQuestion.Id,
assessmentQuestion.MinValue,
assessmentQuestion.MaxValue,
assessmentQuestion.MinValue == 0
).ToList();
}
}
}

var CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup);
var competencySummaries = from g in CompetencyGroups
let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required)
let selfAssessedCount = questions.Count(q => q.Result.HasValue)
let verifiedCount = questions.Count(q => !((q.Result == null || q.Verified == null || q.SignedOff != true) && q.Required))
select new
{
SelfAssessedCount = selfAssessedCount,
VerifiedCount = verifiedCount,
Questions = questions.Count()
};

int sumVerifiedCount = competencySummaries.Sum(item => item.VerifiedCount);
int sumQuestions = competencySummaries.Sum(item => item.Questions);
int sumVerifiedCount = competencySummaries.VerifiedCount;
int sumQuestions = competencySummaries.QuestionsCount;
var model = new CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, "Proficiencies", accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, null);
var renderedViewHTML = RenderRazorViewToString(this, "SelfAssessments/DownloadCompetencySelfAssessmentCertificate", model);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -384,8 +384,8 @@ public IActionResult ReviewDelegateSelfAssessment(int supervisorDelegateId, int
(int)superviseDelegate.DelegateUserID
);
}

ViewBag.CanViewCertificate = CertificateHelper.CanViewCertificate(reviewedCompetencies, model.SupervisorSignOffs);
var competencySummaries = CertificateHelper.CanViewCertificate(reviewedCompetencies, model.SupervisorSignOffs);
model.CompetencySummaries = competencySummaries;
ViewBag.SupervisorSelfAssessmentReview = delegateSelfAssessment.SupervisorSelfAssessmentReview;
ViewBag.navigatedFrom = selfAssessmentResultId == null;
TempData["CertificateSupervisorDelegateId"] = supervisorDelegateId;
Expand Down Expand Up @@ -1385,7 +1385,8 @@ public IActionResult CompetencySelfAssessmentCertificatesupervisor(int candidate
var delegateUserId = competencymaindata.LearnerId;
var recentResults = selfAssessmentService.GetMostRecentResults(competencymaindata.SelfAssessmentID, competencymaindata.LearnerDelegateAccountId).ToList();
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);
if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
var competencySummaries = CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs);
if (!competencySummaries.CanViewCertificate)
{
return RedirectToAction("StatusCode", "LearningSolutions", new { code = 401 });
}
Expand All @@ -1394,41 +1395,8 @@ public IActionResult CompetencySelfAssessmentCertificatesupervisor(int candidate
var accessors = selfAssessmentService.GetAccessor(competencymaindata.SelfAssessmentID, competencymaindata.LearnerId);
var assessment = selfAssessmentService.GetSelfAssessmentForCandidateById(delegateUserId, competencymaindata.SelfAssessmentID);
var competencyIds = recentResults.Select(c => c.Id).ToArray();
var competencyFlags = frameworkService.GetSelectedCompetencyFlagsByCompetecyIds(competencyIds);
var competencies = CompetencyFilterHelper.FilterCompetencies(recentResults, competencyFlags, null);
foreach (var competency in competencies)
{
competency.QuestionLabel = assessment.QuestionLabel;
foreach (var assessmentQuestion in competency.AssessmentQuestions)
{
if (assessmentQuestion.AssessmentQuestionInputTypeID != 2)
{
assessmentQuestion.LevelDescriptors = selfAssessmentService
.GetLevelDescriptorsForAssessmentQuestion(
assessmentQuestion.Id,
assessmentQuestion.MinValue,
assessmentQuestion.MaxValue,
assessmentQuestion.MinValue == 0
).ToList();
}
}
}

var CompetencyGroups = competencies.GroupBy(competency => competency.CompetencyGroup);
var competencySummaries = from g in CompetencyGroups
let questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required)
let selfAssessedCount = questions.Count(q => q.Result.HasValue)
let verifiedCount = questions.Count(q => !((q.Result == null || q.Verified == null || q.SignedOff != true) && q.Required))

select new
{
SelfAssessedCount = selfAssessedCount,
VerifiedCount = verifiedCount,
Questions = questions.Count()
};

int sumVerifiedCount = competencySummaries.Sum(item => item.VerifiedCount);
int sumQuestions = competencySummaries.Sum(item => item.Questions);
int sumVerifiedCount = competencySummaries.VerifiedCount;
int sumQuestions = competencySummaries.QuestionsCount;
var activitySummaryCompetencySelfAssesment = selfAssessmentService.GetActivitySummaryCompetencySelfAssesment(competencymaindata.Id);
var model = new ViewModels.LearningPortal.SelfAssessments.CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, "ProfileAssessment", accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, supervisorDelegateId);
return View("SelfAssessments/CompetencySelfAssessmentCertificate", model);
Expand Down
16 changes: 10 additions & 6 deletions DigitalLearningSolutions.Web/Helpers/CertificateHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,9 @@ namespace DigitalLearningSolutions.Web.Helpers
{
public class CertificateHelper
{
public static bool CanViewCertificate(List<Competency> reviewedCompetencies, IEnumerable<SupervisorSignOff>? SupervisorSignOffs)
public static CompetencySummary CanViewCertificate(List<Competency> reviewedCompetencies, IEnumerable<SupervisorSignOff>? SupervisorSignOffs)
{

var CompetencyGroups = reviewedCompetencies.GroupBy(competency => competency.CompetencyGroup);

var competencySummaries = CompetencyGroups.Select(g =>
{
var questions = g.SelectMany(c => c.AssessmentQuestions).Where(q => q.Required);
Expand All @@ -38,9 +36,15 @@ public static bool CanViewCertificate(List<Competency> reviewedCompetencies, IEn

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

return SupervisorSignOffs?.FirstOrDefault()?.Verified != null &&
SupervisorSignOffs.FirstOrDefault().SignedOff &&
allComptConfirmed && latestResult <= latestSignoff;
var model = new CompetencySummary()
{
VerifiedCount = competencySummaries.Sum(item => item.VerifiedCount),
QuestionsCount = competencySummaries.Sum(item => item.QuestionsCount),
CanViewCertificate = SupervisorSignOffs?.FirstOrDefault()?.Verified != null &&
SupervisorSignOffs.FirstOrDefault().SignedOff &&
allComptConfirmed && latestResult <= latestSignoff
};
return model;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ public string VocabPlural(string vocabulary)
}
public int CandidateAssessmentId { get; set; }
public bool ExportToExcelHide { get; set; }
public CompetencySummary CompetencySummaries { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
</a>
}

@if (ViewBag.CanViewCertificate)
@if(Model.CompetencySummaries.CanViewCertificate)
{
<a class="nhsuk-button"
asp-route-candidateAssessmentId="@Model.CandidateAssessmentId"
Expand All @@ -106,14 +106,11 @@
Certificate
</a>
}
@if (
Model.DelegateSelfAssessment.SignOffRequested > 0 &&
competencySummaries.Sum(c => (int)c["verifiedCount"]) == competencySummaries.Sum(c => (int)c["questionsCount"])
)
@if(Model.DelegateSelfAssessment.SignOffRequested > 0 && Model.CompetencySummaries.VerifiedCount == Model.CompetencySummaries.QuestionsCount)
{
<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>
}
@if ((Model.DelegateSelfAssessment.ResultsVerificationRequests > 1) && (competencySummaries.Sum(c => (int)c["verifiedCount"]) < competencySummaries.Sum(c => (int)c["questionsCount"])))
@if((Model.DelegateSelfAssessment.ResultsVerificationRequests > 1) && Model.CompetencySummaries.VerifiedCount < Model.CompetencySummaries.QuestionsCount)
{
<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>
}
Expand Down