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