Skip to content

Commit 28fbe20

Browse files
TD-4092 Refactor DLS Competency Self Assessment Certificates to improve maintainability and security
1 parent 4f7265a commit 28fbe20

File tree

14 files changed

+576
-603
lines changed

14 files changed

+576
-603
lines changed

DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CandidateAssessmentsDataService.cs

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ FROM CandidateAssessments
328328
new { selfAssessmentId, delegateUserId }
329329
);
330330
}
331-
public CompetencySelfAssessmentCertificate GetCompetencySelfAssessmentCertificate(int candidateAssessmentID)
331+
public CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int candidateAssessmentID)
332332
{
333333
return connection.QueryFirstOrDefault<CompetencySelfAssessmentCertificate>(
334334
@"SELECT
@@ -381,7 +381,59 @@ from CandidateAssessmentSupervisorVerifications AS casv INNER JOIN
381381
new { candidateAssessmentID }
382382
);
383383
}
384-
384+
public CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int selfassessmentId, int userId)
385+
{
386+
return connection.QueryFirstOrDefault<CompetencySelfAssessmentCertificate>(
387+
@"SELECT
388+
LearnerDetails.ID ,
389+
LearnerDetails.SelfAssessment,
390+
LearnerDetails.LearnerName,
391+
LearnerDetails.LearnerPRN,
392+
LearnerId,LearnerDelegateAccountId,
393+
LearnerDetails.Verified,
394+
LearnerDetails.CentreName,
395+
Supervisor.SupervisorName ,
396+
Supervisor.SupervisorPRN ,
397+
Supervisor.SupervisorCentreName,
398+
LearnerDetails.BrandName ,
399+
LearnerDetails.BrandImage,
400+
LearnerDetails.CandidateAssessmentID,
401+
LearnerDetails.SelfAssessmentID,
402+
LearnerDetails.Vocabulary,
403+
LearnerDetails.SupervisorDelegateId,
404+
LearnerDetails.FormattedDate,
405+
LearnerDetails.NonReportable
406+
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,
407+
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,
408+
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)
409+
% 10 = 3 THEN 'rd' ELSE 'th' END + ' ' + FORMAT(casv.Verified, 'MMMM yyyy') AS FormattedDate
410+
FROM dbo.CandidateAssessments AS ca LEFT OUTER JOIN
411+
dbo.DelegateAccounts AS da RIGHT OUTER JOIN
412+
dbo.Users AS Learner ON da.UserID = Learner.ID ON ca.CentreID = da.CentreID AND ca.DelegateUserID = Learner.ID LEFT OUTER JOIN
413+
dbo.Centres AS ce ON ca.CentreID = ce.CentreID LEFT OUTER JOIN
414+
dbo.Brands AS b RIGHT OUTER JOIN
415+
dbo.SelfAssessments AS sa ON b.BrandID = sa.BrandID ON ca.SelfAssessmentID = sa.ID LEFT OUTER JOIN
416+
dbo.CandidateAssessmentSupervisors AS cas ON ca.ID = cas.CandidateAssessmentID LEFT OUTER JOIN
417+
dbo.Users AS Supervisor RIGHT OUTER JOIN
418+
dbo.AdminAccounts AS aa ON Supervisor.ID = aa.UserID RIGHT OUTER JOIN
419+
dbo.CandidateAssessmentSupervisorVerifications AS casv ON aa.ID = casv.ID ON cas.ID = casv.CandidateAssessmentSupervisorID
420+
WHERE (CA.SelfAssessmentID =@selfassessmentId AND Learner.ID = @userId) AND (casv.SignedOff = 1) AND (NOT (casv.Verified IS NULL))) LearnerDetails INNER JOIN
421+
(select sd.SupervisorAdminID, casv.ID ,u.FirstName + ' ' + u.LastName AS SupervisorName,
422+
u.ProfessionalRegistrationNumber AS SupervisorPRN,
423+
c.CentreName AS SupervisorCentreName,ca.CentreID
424+
from CandidateAssessmentSupervisorVerifications AS casv INNER JOIN
425+
CandidateAssessmentSupervisors AS cas ON casv.CandidateAssessmentSupervisorID = cas.ID INNER JOIN
426+
SupervisorDelegates AS sd ON sd.ID = cas.SupervisorDelegateId INNER JOIN
427+
AdminAccounts AS aa ON sd.SupervisorAdminID = aa.ID INNER JOIN
428+
Users AS u ON aa.UserID = u.ID INNER JOIN
429+
Centres c ON aa.CentreID = c.CentreID INNER JOIN
430+
CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID
431+
where (CA.SelfAssessmentID =@selfassessmentId AND u.ID = @userId) AND (casv.SignedOff = 1)
432+
AND (NOT (casv.Verified IS NULL))) Supervisor ON LearnerDetails.Id =Supervisor.Id
433+
ORDER BY Verified DESC",
434+
new { selfassessmentId , userId }
435+
);
436+
}
385437
public IEnumerable<CompetencyCountSelfAssessmentCertificate> GetCompetencyCountSelfAssessmentCertificate(int candidateAssessmentID)
386438
{
387439
return connection.Query<CompetencyCountSelfAssessmentCertificate>(

DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/SelfAssessmentDataService.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,17 @@ IEnumerable<SelfAssessmentDelegate> GetSelfAssessmentActivityDelegatesExport(str
157157
int? selfAssessmentId, int centreId, bool? isDelegateActive, bool? removed, int currentRun, bool? submitted, bool? signedOff);
158158
int GetSelfAssessmentActivityDelegatesExportCount(string searchString, string sortBy, string sortDirection,
159159
int? selfAssessmentId, int centreId, bool? isDelegateActive, bool? removed, bool? submitted, bool? signedOff);
160-
string GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId);
160+
string? GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId);
161161

162-
RemoveSelfAssessmentDelegate GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId);
162+
RemoveSelfAssessmentDelegate? GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId);
163163
void RemoveDelegateSelfAssessment(int candidateAssessmentsId);
164164
int? GetSupervisorsCountFromCandidateAssessmentId(int candidateAssessmentsId);
165165
bool CheckForSameCentre(int centreId, int candidateAssessmentsId);
166166
int? GetDelegateAccountId(int centreId, int delegateUserId);
167167
int CheckDelegateSelfAssessment(int candidateAssessmentsId);
168168
IEnumerable<CompetencyCountSelfAssessmentCertificate> GetCompetencyCountSelfAssessmentCertificate(int candidateAssessmentID);
169-
CompetencySelfAssessmentCertificate GetCompetencySelfAssessmentCertificate(int candidateAssessmentID);
169+
CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int candidateAssessmentID);
170+
CompetencySelfAssessmentCertificate? GetCompetencySelfAssessmentCertificate(int selfassessmentId, int userId);
170171
IEnumerable<Accessor> GetAccessor(int selfAssessmentId, int delegateUserID);
171172
ActivitySummaryCompetencySelfAssesment GetActivitySummaryCompetencySelfAssesment(int CandidateAssessmentSupervisorVerificationsId);
172173
bool IsUnsupervisedSelfAssessment(int selfAssessmentId);
@@ -624,7 +625,7 @@ LEFT OUTER JOIN AdminAccounts AS aaEnrolledBy WITH (NOLOCK) ON aaEnrolledBy.ID =
624625
);
625626
return ResultCount;
626627
}
627-
public string GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId)
628+
public string? GetSelfAssessmentActivityDelegatesSupervisor(int selfAssessmentId, int delegateUserId)
628629
{
629630
return connection.Query<string>(
630631
@$"SELECT
@@ -647,7 +648,7 @@ LEFT OUTER JOIN SelfAssessmentSupervisorRoles AS sasr
647648
new { delegateUserId, selfAssessmentId }
648649
).FirstOrDefault();
649650
}
650-
public RemoveSelfAssessmentDelegate GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId)
651+
public RemoveSelfAssessmentDelegate? GetDelegateSelfAssessmentByCandidateAssessmentsId(int candidateAssessmentsId)
651652
{
652653
return connection.QueryFirstOrDefault<RemoveSelfAssessmentDelegate>(
653654
@"Select

0 commit comments

Comments
 (0)