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