Skip to content

Commit 202431b

Browse files
authored
Merge pull request #3311 from TechnologyEnhancedLearning/Develop/Fixes/TD-5759-RefactorSelfAssessmentReportQueries
TD-5759 Fix column names in SP return table for self assessment report
2 parents d22f00a + 89fa017 commit 202431b

File tree

4 files changed

+156
-0
lines changed

4 files changed

+156
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace DigitalLearningSolutions.Data.Migrations
2+
{
3+
using FluentMigrator;
4+
[Migration(202507040803)]
5+
public class FixCreateOrAlterGetSelfAssessmentReport : ForwardOnlyMigration
6+
{
7+
public override void Up()
8+
{
9+
Execute.Sql(Properties.Resources.TD_5759_CreateOrAlterSelfAssessmentReportSPandTVF_Fix_UP);
10+
}
11+
}
12+
}

DigitalLearningSolutions.Data.Migrations/Properties/Resources.Designer.cs

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

DigitalLearningSolutions.Data.Migrations/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,4 +490,7 @@
490490
<data name="TD-5759_CreateOrAlterSelfAssessmentReportSPandTVF_UP" type="System.Resources.ResXFileRef, System.Windows.Forms">
491491
<value>..\Scripts\TD-5759_CreateOrAlterSelfAssessmentReportSPandTVF_UP.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
492492
</data>
493+
<data name="TD-5759_CreateOrAlterSelfAssessmentReportSPandTVF-Fix_UP" type="System.Resources.ResXFileRef, System.Windows.Forms">
494+
<value>..\Scripts\TD-5759_CreateOrAlterSelfAssessmentReportSPandTVF-Fix_UP.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
495+
</data>
493496
</root>
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
CREATE OR ALTER PROCEDURE [dbo].[usp_GetSelfAssessmentReport]
2+
@SelfAssessmentID INT,
3+
@CentreID INT
4+
AS
5+
BEGIN
6+
SET NOCOUNT ON;
7+
8+
-- Step 1: Materialize the LatestAssessmentResults into a temp table
9+
IF OBJECT_ID('tempdb..#LatestAssessmentResults') IS NOT NULL
10+
DROP TABLE #LatestAssessmentResults;
11+
12+
SELECT
13+
s.DelegateUserID,
14+
CASE WHEN COALESCE(rr.LevelRAG, 0) = 3 THEN s.ID ELSE NULL END AS SelfAssessed,
15+
CASE
16+
WHEN sv.Verified IS NOT NULL AND sv.SignedOff = 1 AND COALESCE(rr.LevelRAG, 0) = 3
17+
THEN s.ID ELSE NULL
18+
END AS Confirmed,
19+
CASE WHEN sas.Optional = 1 THEN s.CompetencyID ELSE NULL END AS Optional
20+
INTO #LatestAssessmentResults
21+
FROM SelfAssessmentResults AS s
22+
LEFT JOIN SelfAssessmentStructure AS sas
23+
ON sas.SelfAssessmentID = @SelfAssessmentID
24+
AND s.CompetencyID = sas.CompetencyID
25+
LEFT JOIN SelfAssessmentResultSupervisorVerifications AS sv
26+
ON s.ID = sv.SelfAssessmentResultId
27+
AND sv.Superceded = 0
28+
LEFT JOIN CompetencyAssessmentQuestionRoleRequirements AS rr
29+
ON s.CompetencyID = rr.CompetencyID
30+
AND s.AssessmentQuestionID = rr.AssessmentQuestionID
31+
AND sas.SelfAssessmentID = rr.SelfAssessmentID
32+
AND s.Result = rr.LevelValue
33+
WHERE sas.SelfAssessmentID = @SelfAssessmentID;
34+
35+
CREATE NONCLUSTERED INDEX IX_LAR_DelegateUserID ON #LatestAssessmentResults(DelegateUserID);
36+
37+
-- Step 2: Run the main query
38+
SELECT
39+
sa.Name AS SelfAssessment,
40+
u.LastName + ', ' + u.FirstName AS Learner,
41+
da.Active AS LearnerActive,
42+
u.ProfessionalRegistrationNumber AS PRN,
43+
jg.JobGroupName AS JobGroup,
44+
da.Answer1 AS RegistrationAnswer1,
45+
da.Answer2 AS RegistrationAnswer2,
46+
da.Answer3 AS RegistrationAnswer3,
47+
da.Answer4 AS RegistrationAnswer4,
48+
da.Answer5 AS RegistrationAnswer5,
49+
da.Answer6 AS RegistrationAnswer6,
50+
oc.OtherCentres,
51+
CASE
52+
WHEN aa.ID IS NULL THEN 'Learner'
53+
WHEN aa.IsCentreManager = 1 THEN 'Centre Manager'
54+
WHEN aa.IsCentreAdmin = 1 AND aa.IsCentreManager = 0 THEN 'Centre Admin'
55+
WHEN aa.IsSupervisor = 1 THEN 'Supervisor'
56+
WHEN aa.IsNominatedSupervisor = 1 THEN 'Nominated supervisor'
57+
END AS DLSRole,
58+
da.DateRegistered AS Registered,
59+
ca.StartedDate AS [Started],
60+
ca.LastAccessed,
61+
COUNT(DISTINCT LAR.Optional) AS [OptionalProficienciesAssessed],
62+
COUNT(DISTINCT LAR.SelfAssessed) AS [SelfAssessedAchieved],
63+
COUNT(DISTINCT LAR.Confirmed) AS [ConfirmedResults],
64+
MAX(casv.Requested) AS SignOffRequested,
65+
MAX(1 * casv.SignedOff) AS SignOffAchieved,
66+
MIN(casv.Verified) AS ReviewedDate
67+
FROM CandidateAssessments AS ca
68+
INNER JOIN DelegateAccounts AS da
69+
ON ca.DelegateUserID = da.UserID
70+
AND da.CentreID = @CentreID
71+
INNER JOIN Users AS u
72+
ON u.ID = da.UserID
73+
INNER JOIN SelfAssessments AS sa
74+
ON ca.SelfAssessmentID = sa.ID
75+
INNER JOIN CentreSelfAssessments AS csa
76+
ON sa.ID = csa.SelfAssessmentID
77+
INNER JOIN Centres AS c
78+
ON csa.CentreID = c.CentreID
79+
AND da.CentreID = c.CentreID
80+
INNER JOIN JobGroups AS jg
81+
ON u.JobGroupID = jg.JobGroupID
82+
LEFT JOIN AdminAccounts AS aa
83+
ON da.UserID = aa.UserID
84+
AND aa.CentreID = da.CentreID
85+
AND aa.Active = 1
86+
LEFT JOIN CandidateAssessmentSupervisors AS cas
87+
ON ca.ID = cas.CandidateAssessmentID
88+
LEFT JOIN CandidateAssessmentSupervisorVerifications AS casv
89+
ON casv.CandidateAssessmentSupervisorID = cas.ID
90+
LEFT JOIN SupervisorDelegates AS sd
91+
ON cas.SupervisorDelegateId = sd.ID
92+
LEFT JOIN #LatestAssessmentResults AS LAR
93+
ON LAR.DelegateUserID = ca.DelegateUserID
94+
OUTER APPLY dbo.GetOtherCentresForSelfAssessmentTVF(da.UserID, @SelfAssessmentID, c.CentreID) AS oc
95+
WHERE
96+
sa.ID = @SelfAssessmentID
97+
AND sa.ArchivedDate IS NULL
98+
AND c.Active = 1
99+
AND ca.RemovedDate IS NULL
100+
AND ca.NonReportable = 0
101+
GROUP BY
102+
sa.Name,
103+
u.LastName + ', ' + u.FirstName,
104+
da.Active,
105+
u.ProfessionalRegistrationNumber,
106+
jg.JobGroupName,
107+
da.Answer1, da.Answer2, da.Answer3, da.Answer4, da.Answer5, da.Answer6,
108+
da.DateRegistered,
109+
ca.StartedDate,
110+
ca.LastAccessed,
111+
oc.OtherCentres,
112+
aa.ID, aa.IsCentreManager, aa.IsCentreAdmin, aa.IsSupervisor, aa.IsNominatedSupervisor
113+
ORDER BY
114+
sa.Name, u.LastName + ', ' + u.FirstName;
115+
116+
END;
117+
GO

0 commit comments

Comments
 (0)