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
Expand Up @@ -335,7 +335,7 @@ FROM CandidateAssessments
new { selfAssessmentId, delegateUserId }
);
}
public CompetencySelfAssessmentCertificate GetCompetencySelfAssessmentCertificate(int candidateAssessmentID)
public CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int candidateAssessmentID)
{
return connection.QueryFirstOrDefault<CompetencySelfAssessmentCertificate>(
@"SELECT
Expand Down Expand Up @@ -388,7 +388,59 @@ from CandidateAssessmentSupervisorVerifications AS casv INNER JOIN
new { candidateAssessmentID }
);
}

public CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int selfassessmentId, int userId)
{
return connection.QueryFirstOrDefault<CompetencySelfAssessmentCertificate>(
@"SELECT
LearnerDetails.ID ,
LearnerDetails.SelfAssessment,
LearnerDetails.LearnerName,
LearnerDetails.LearnerPRN,
LearnerId,LearnerDelegateAccountId,
LearnerDetails.Verified,
LearnerDetails.CentreName,
Supervisor.SupervisorName ,
Supervisor.SupervisorPRN ,
Supervisor.SupervisorCentreName,
LearnerDetails.BrandName ,
LearnerDetails.BrandImage,
LearnerDetails.CandidateAssessmentID,
LearnerDetails.SelfAssessmentID,
LearnerDetails.Vocabulary,
LearnerDetails.SupervisorDelegateId,
LearnerDetails.FormattedDate,
LearnerDetails.NonReportable
FROM(SELECT casv.ID, ca.NonReportable, sa.Name AS SelfAssessment, Learner.FirstName + ' ' + Learner.LastName AS LearnerName, Learner.ProfessionalRegistrationNumber AS LearnerPRN, Learner.ID AS LearnerId, da.ID AS LearnerDelegateAccountId, casv.Verified, ce.CentreName,
Supervisor.FirstName + ' ' + Supervisor.LastName AS SupervisorName, Supervisor.ProfessionalRegistrationNumber AS SupervisorPRN, b.BrandName, b.BrandImage, ca.ID AS CandidateAssessmentID, ca.SelfAssessmentID, COALESCE (sa.Vocabulary, 'Capability') AS Vocabulary,
cas.SupervisorDelegateId, CONVERT(VARCHAR(2), DAY(casv.Verified)) + CASE WHEN DAY(Verified) % 100 IN (11, 12, 13) THEN 'th' WHEN DAY(Verified) % 10 = 1 THEN 'st' WHEN DAY(Verified) % 10 = 2 THEN 'nd' WHEN DAY(Verified)
% 10 = 3 THEN 'rd' ELSE 'th' END + ' ' + FORMAT(casv.Verified, 'MMMM yyyy') AS FormattedDate
FROM dbo.CandidateAssessments AS ca LEFT OUTER JOIN
dbo.DelegateAccounts AS da RIGHT OUTER JOIN
dbo.Users AS Learner ON da.UserID = Learner.ID ON ca.CentreID = da.CentreID AND ca.DelegateUserID = Learner.ID LEFT OUTER JOIN
dbo.Centres AS ce ON ca.CentreID = ce.CentreID LEFT OUTER JOIN
dbo.Brands AS b RIGHT OUTER JOIN
dbo.SelfAssessments AS sa ON b.BrandID = sa.BrandID ON ca.SelfAssessmentID = sa.ID LEFT OUTER JOIN
dbo.CandidateAssessmentSupervisors AS cas ON ca.ID = cas.CandidateAssessmentID LEFT OUTER JOIN
dbo.Users AS Supervisor RIGHT OUTER JOIN
dbo.AdminAccounts AS aa ON Supervisor.ID = aa.UserID RIGHT OUTER JOIN
dbo.CandidateAssessmentSupervisorVerifications AS casv ON aa.ID = casv.ID ON cas.ID = casv.CandidateAssessmentSupervisorID
WHERE (CA.SelfAssessmentID =@selfassessmentId AND Learner.ID = @userId) AND (casv.SignedOff = 1) AND (NOT (casv.Verified IS NULL))) LearnerDetails INNER JOIN
(select sd.SupervisorAdminID, casv.ID ,u.FirstName + ' ' + u.LastName AS SupervisorName,
u.ProfessionalRegistrationNumber AS SupervisorPRN,
c.CentreName AS SupervisorCentreName,ca.CentreID
from CandidateAssessmentSupervisorVerifications AS casv INNER JOIN
CandidateAssessmentSupervisors AS cas ON casv.CandidateAssessmentSupervisorID = cas.ID INNER JOIN
SupervisorDelegates AS sd ON sd.ID = cas.SupervisorDelegateId INNER JOIN
AdminAccounts AS aa ON sd.SupervisorAdminID = aa.ID INNER JOIN
Users AS u ON aa.UserID = u.ID INNER JOIN
Centres c ON aa.CentreID = c.CentreID INNER JOIN
CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID
where (CA.SelfAssessmentID =@selfassessmentId AND u.ID = @userId) AND (casv.SignedOff = 1)
AND (NOT (casv.Verified IS NULL))) Supervisor ON LearnerDetails.Id =Supervisor.Id
ORDER BY Verified DESC",
new { selfassessmentId , userId }
);
}
public IEnumerable<CompetencyCountSelfAssessmentCertificate> GetCompetencyCountSelfAssessmentCertificate(int candidateAssessmentID)
{
return connection.Query<CompetencyCountSelfAssessmentCertificate>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,16 +157,17 @@ IEnumerable<SelfAssessmentDelegate> GetSelfAssessmentActivityDelegatesExport(str
int? selfAssessmentId, int centreId, bool? isDelegateActive, bool? removed, int currentRun, bool? submitted, bool? signedOff);
int GetSelfAssessmentActivityDelegatesExportCount(string searchString, string sortBy, string sortDirection,
int? selfAssessmentId, int centreId, bool? isDelegateActive, bool? removed, bool? submitted, bool? signedOff);
string GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId);
string? GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId);

RemoveSelfAssessmentDelegate GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId);
RemoveSelfAssessmentDelegate? GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId);
void RemoveDelegateSelfAssessment(int candidateAssessmentsId);
int? GetSupervisorsCountFromCandidateAssessmentId(int candidateAssessmentsId);
bool CheckForSameCentre(int centreId, int candidateAssessmentsId);
int? GetDelegateAccountId(int centreId, int delegateUserId);
int CheckDelegateSelfAssessment(int candidateAssessmentsId);
IEnumerable<CompetencyCountSelfAssessmentCertificate> GetCompetencyCountSelfAssessmentCertificate(int candidateAssessmentID);
CompetencySelfAssessmentCertificate GetCompetencySelfAssessmentCertificate(int candidateAssessmentID);
CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int candidateAssessmentID);
CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int selfassessmentId, int userId);
IEnumerable<Accessor> GetAccessor(int selfAssessmentId, int delegateUserID);
ActivitySummaryCompetencySelfAssesment GetActivitySummaryCompetencySelfAssesment(int CandidateAssessmentSupervisorVerificationsId);
bool IsUnsupervisedSelfAssessment(int selfAssessmentId);
Expand Down Expand Up @@ -624,7 +625,7 @@ LEFT OUTER JOIN AdminAccounts AS aaEnrolledBy WITH (NOLOCK) ON aaEnrolledBy.ID =
);
return ResultCount;
}
public string GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId)
public string? GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId)
{
return connection.Query<string>(
@$"SELECT
Expand All @@ -647,7 +648,7 @@ LEFT OUTER JOIN SelfAssessmentSupervisorRoles AS sasr
new { delegateUserId, selfAssessmentId }
).FirstOrDefault();
}
public RemoveSelfAssessmentDelegate GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId)
public RemoveSelfAssessmentDelegate? GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId)
{
return connection.QueryFirstOrDefault<RemoveSelfAssessmentDelegate>(
@"Select
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@
using DigitalLearningSolutions.Web.ViewModels.LearningPortal.Current;
using DocumentFormat.OpenXml.EMMA;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.Logging;
using Microsoft.FeatureManagement.Mvc;

Expand Down Expand Up @@ -343,180 +340,5 @@ int delegateUserId
await actionPlanService.GetIncompleteActionPlanResources(delegateUserId);
return (resources.ToList(), apiIsAccessible);
}
[Route("/LearningPortal/Current/{candidateAssessmentId:int}/{route:int}/Certificate")]
[NoCaching]
public IActionResult CompetencySelfAssessmentCertificate(int candidateAssessmentId, int route)
{
int supervisorDelegateId = 0;
if (candidateAssessmentId == 0)
{
return NotFound();
}

var competencymaindata = selfAssessmentService.GetCompetencySelfAssessmentCertificate(candidateAssessmentId);
if (competencymaindata == null)
{
return NotFound();
}

var delegateUserId = competencymaindata.LearnerId;
if (route == 3)
{
var supervisorDelegate = supervisorService.GetSupervisorDelegate(User.GetAdminIdKnownNotNull(), delegateUserId);
supervisorDelegateId = supervisorDelegate.ID;
}
var recentResults = selfAssessmentService.GetMostRecentResults(competencymaindata.SelfAssessmentID, competencymaindata.LearnerDelegateAccountId).ToList();
var supervisorSignOffs = selfAssessmentService.GetSupervisorSignOffsForCandidateAssessment(competencymaindata.SelfAssessmentID, delegateUserId);

if (!CertificateHelper.CanViewCertificate(recentResults, supervisorSignOffs))
{
return NotFound();
}

var competencycount = selfAssessmentService.GetCompetencyCountSelfAssessmentCertificate(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);
var activitySummaryCompetencySelfAssesment = selfAssessmentService.GetActivitySummaryCompetencySelfAssesment(competencymaindata.Id);
var model = new CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, route, accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, supervisorDelegateId);
return View("Current/CompetencySelfAssessmentCertificate", model);
}
[Route("DownloadCertificate")]
public async Task<IActionResult> DownloadCertificate(int candidateAssessmentId)
{
PdfReportStatusResponse pdfReportStatusResponse = new PdfReportStatusResponse();
if (candidateAssessmentId == 0)
{
return NotFound();
}
var delegateId = User.GetCandidateIdKnownNotNull();
var competencymaindata = selfAssessmentService.GetCompetencySelfAssessmentCertificate(candidateAssessmentId);

if (competencymaindata == null)
{
return NotFound();
}
var delegateUserId = competencymaindata.LearnerId;

var competencycount = selfAssessmentService.GetCompetencyCountSelfAssessmentCertificate(candidateAssessmentId);
var accessors = selfAssessmentService.GetAccessor(competencymaindata.SelfAssessmentID, competencymaindata.LearnerId);
var activitySummaryCompetencySelfAssesment = selfAssessmentService.GetActivitySummaryCompetencySelfAssesment(competencymaindata.Id);
var assessment = selfAssessmentService.GetSelfAssessmentForCandidateById(delegateUserId, competencymaindata.SelfAssessmentID);
var recentResults = selfAssessmentService.GetMostRecentResults(competencymaindata.SelfAssessmentID, competencymaindata.LearnerDelegateAccountId).ToList();
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);
var model = new CompetencySelfAssessmentCertificateViewModel(competencymaindata, competencycount, 1, accessors, activitySummaryCompetencySelfAssesment, sumQuestions, sumVerifiedCount, null);
var renderedViewHTML = RenderRazorViewToString(this, "Current/DownloadCompetencySelfAssessmentCertificate", model);

var pdfReportResponse = await pdfService.PdfReport(candidateAssessmentId.ToString(), renderedViewHTML, delegateId);
if (pdfReportResponse != null)
{
do
{
pdfReportStatusResponse = await pdfService.PdfReportStatus(pdfReportResponse);
} while (pdfReportStatusResponse.Id == 1);

var pdfReportFile = await pdfService.GetPdfReportFile(pdfReportResponse);
if (pdfReportFile != null)
{
var nameTextLength = string.IsNullOrEmpty(model.CompetencySelfAssessmentCertificates.LearnerName) ? 0 : model.CompetencySelfAssessmentCertificates.LearnerName.Length;
var isPrnExist = !string.IsNullOrEmpty(model.CompetencySelfAssessmentCertificates.LearnerPRN);
var fileName = $"Competency Certificate - {model.CompetencySelfAssessmentCertificates.LearnerName.Substring(0, nameTextLength >= 15 ? 15 : nameTextLength)}" + (isPrnExist ? $" - {model.CompetencySelfAssessmentCertificates.LearnerPRN}.pdf" : ".pdf");
return File(pdfReportFile, FileHelper.GetContentTypeFromFileName(fileName), fileName);
}
}
return View("Current/CompetencySelfAssessmentCertificate", model);
}

public static string RenderRazorViewToString(Controller controller, string viewName, object model = null)
{
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
IViewEngine viewEngine =
controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as
ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, false);

ViewContext viewContext = new ViewContext(
controller.ControllerContext,
viewResult.View,
controller.ViewData,
controller.TempData,
sw,
new HtmlHelperOptions()
);
viewResult.View.RenderAsync(viewContext);
return sw.GetStringBuilder().ToString();
}
}
}
}
Loading