|
1 | | -namespace DigitalLearningSolutions.Data.DataServices.SelfAssessmentDataService |
2 | | -{ |
3 | | - using Dapper; |
4 | | - using DigitalLearningSolutions.Data.Models.SelfAssessments.Export; |
5 | | - using DigitalLearningSolutions.Data.Models.SelfAssessments; |
6 | | - using Microsoft.Extensions.Logging; |
7 | | - using System.Collections.Generic; |
8 | | - using System.Data; |
9 | | - |
10 | | - public interface ISelfAssessmentReportDataService |
11 | | - { |
12 | | - IEnumerable<SelfAssessmentSelect> GetSelfAssessmentsForReportList(int centreId, int? categoryId); |
13 | | - IEnumerable<SelfAssessmentReportData> GetSelfAssessmentReportDataForCentre(int centreId, int selfAssessmentId); |
14 | | - } |
15 | | - public partial class SelfAssessmentReportDataService : ISelfAssessmentReportDataService |
16 | | - { |
17 | | - private readonly IDbConnection connection; |
18 | | - private readonly ILogger<SelfAssessmentReportDataService> logger; |
19 | | - |
20 | | - public SelfAssessmentReportDataService(IDbConnection connection, ILogger<SelfAssessmentReportDataService> logger) |
21 | | - { |
22 | | - this.connection = connection; |
23 | | - this.logger = logger; |
24 | | - } |
25 | | - |
26 | | - public IEnumerable<SelfAssessmentSelect> GetSelfAssessmentsForReportList(int centreId, int? categoryId) |
27 | | - { |
28 | | - return connection.Query<SelfAssessmentSelect>( |
29 | | - @"SELECT csa.SelfAssessmentID AS Id, sa.Name, |
30 | | - (SELECT COUNT (DISTINCT da.UserID) AS Learners |
31 | | - FROM CandidateAssessments AS ca1 INNER JOIN |
32 | | - DelegateAccounts AS da ON ca1.DelegateUserID = da.UserID |
33 | | - WHERE (da.CentreID = @centreId) AND (ca1.RemovedDate IS NULL) AND (ca1.SelfAssessmentID = csa.SelfAssessmentID) AND ca1.NonReportable=0) AS LearnerCount |
34 | | - FROM CentreSelfAssessments AS csa INNER JOIN |
35 | | - SelfAssessments AS sa ON csa.SelfAssessmentID = sa.ID |
36 | | - WHERE (csa.CentreID = @centreId) AND (sa.CategoryID = @categoryId) AND (sa.SupervisorResultsReview = 1) AND (sa.ArchivedDate IS NULL) OR |
37 | | - (csa.CentreID = @centreId) AND (sa.CategoryID = @categoryId) AND (sa.ArchivedDate IS NULL) AND (sa.SupervisorSelfAssessmentReview = 1) OR |
38 | | - (csa.CentreID = @centreId) AND (sa.SupervisorResultsReview = 1) AND (sa.ArchivedDate IS NULL) AND (@categoryId = 0) OR |
39 | | - (csa.CentreID = @centreId) AND (sa.ArchivedDate IS NULL) AND (sa.SupervisorSelfAssessmentReview = 1) AND (@categoryId = 0) |
40 | | - ORDER BY sa.Name", |
41 | | - new { centreId, categoryId = categoryId ??= 0 } |
42 | | - ); |
43 | | - } |
44 | | - |
45 | | - public IEnumerable<SelfAssessmentReportData> GetSelfAssessmentReportDataForCentre(int centreId, int selfAssessmentId) |
46 | | - { |
47 | | - return connection.Query<SelfAssessmentReportData>( |
48 | | - @"WITH LatestAssessmentResults AS |
49 | | - ( |
50 | | - SELECT s.DelegateUserID |
51 | | - , CASE WHEN COALESCE (rr.LevelRAG, 0) = 3 THEN s.ID ELSE NULL END AS SelfAssessed |
52 | | - , CASE WHEN sv.Verified IS NOT NULL AND sv.SignedOff = 1 AND COALESCE (rr.LevelRAG, 0) = 3 THEN s.ID ELSE NULL END AS Confirmed |
53 | | - , CASE WHEN sas.Optional = 1 THEN s.CompetencyID ELSE NULL END AS Optional |
54 | | - FROM SelfAssessmentResults AS s LEFT OUTER JOIN |
55 | | - SelfAssessmentStructure AS sas ON sas.SelfAssessmentID = @selfAssessmentId AND s.CompetencyID = sas.CompetencyID LEFT OUTER JOIN |
56 | | - SelfAssessmentResultSupervisorVerifications AS sv ON s.ID = sv.SelfAssessmentResultId AND sv.Superceded = 0 LEFT OUTER JOIN |
57 | | - CompetencyAssessmentQuestionRoleRequirements AS rr ON s.CompetencyID = rr.CompetencyID AND s.AssessmentQuestionID = rr.AssessmentQuestionID AND sas.SelfAssessmentID = rr.SelfAssessmentID AND s.Result = rr.LevelValue |
58 | | - WHERE (sas.SelfAssessmentID = @selfAssessmentId) |
59 | | - ) |
60 | | - SELECT |
61 | | - sa.Name AS SelfAssessment |
62 | | - , u.LastName + ', ' + u.FirstName AS Learner |
63 | | - , da.Active AS LearnerActive |
64 | | - , u.ProfessionalRegistrationNumber AS PRN |
65 | | - , jg.JobGroupName AS JobGroup |
66 | | - , CASE WHEN c.CustomField1PromptID = 10 THEN da.Answer1 WHEN c.CustomField2PromptID = 10 THEN da.Answer2 WHEN c.CustomField3PromptID = 10 THEN da.Answer3 WHEN c.CustomField4PromptID = 10 THEN da.Answer4 WHEN c.CustomField5PromptID = 10 THEN da.Answer5 WHEN c.CustomField6PromptID = 10 THEN da.Answer6 ELSE '' END AS 'ProgrammeCourse' |
67 | | - , CASE WHEN c.CustomField1PromptID = 4 THEN da.Answer1 WHEN c.CustomField2PromptID = 4 THEN da.Answer2 WHEN c.CustomField3PromptID = 4 THEN da.Answer3 WHEN c.CustomField4PromptID = 4 THEN da.Answer4 WHEN c.CustomField5PromptID = 4 THEN da.Answer5 WHEN c.CustomField6PromptID = 4 THEN da.Answer6 ELSE '' END AS 'Organisation' |
68 | | - , CASE WHEN c.CustomField1PromptID = 1 THEN da.Answer1 WHEN c.CustomField2PromptID = 1 THEN da.Answer2 WHEN c.CustomField3PromptID = 1 THEN da.Answer3 WHEN c.CustomField4PromptID = 1 THEN da.Answer4 WHEN c.CustomField5PromptID = 1 THEN da.Answer5 WHEN c.CustomField6PromptID = 1 THEN da.Answer6 ELSE '' END AS 'DepartmentTeam' |
69 | | - , dbo.GetOtherCentresForSelfAssessment(da.UserID, @SelfAssessmentID, c.CentreID) AS OtherCentres |
70 | | - , CASE |
71 | | - WHEN aa.ID IS NULL THEN 'Learner' |
72 | | - WHEN aa.IsCentreManager = 1 THEN 'Centre Manager' |
73 | | - WHEN aa.IsCentreAdmin = 1 AND aa.IsCentreManager = 0 THEN 'Centre Admin' |
74 | | - WHEN aa.IsSupervisor = 1 THEN 'Supervisor' |
75 | | - WHEN aa.IsNominatedSupervisor = 1 THEN 'Nominated supervisor' |
76 | | - END AS DLSRole |
77 | | - , da.DateRegistered AS Registered |
78 | | - , ca.StartedDate AS Started |
79 | | - , ca.LastAccessed |
80 | | - , COALESCE(COUNT(DISTINCT LAR.Optional), NULL) AS [OptionalProficienciesAssessed] |
81 | | - , COALESCE(COUNT(DISTINCT LAR.SelfAssessed), NULL) AS [SelfAssessedAchieved] |
82 | | - , COALESCE(COUNT(DISTINCT LAR.Confirmed), NULL) AS [ConfirmedResults] |
83 | | - , max(casv.Requested) AS SignOffRequested |
84 | | - , max(1*casv.SignedOff) AS SignOffAchieved |
85 | | - , min(casv.Verified) AS ReviewedDate |
86 | | - FROM |
87 | | - CandidateAssessments AS ca INNER JOIN |
88 | | - DelegateAccounts AS da ON ca.DelegateUserID = da.UserID and da.CentreID = @centreId INNER JOIN |
89 | | - Users as u ON u.ID = da.UserID INNER JOIN |
90 | | - SelfAssessments AS sa INNER JOIN |
91 | | - CentreSelfAssessments AS csa ON sa.ID = csa.SelfAssessmentID INNER JOIN |
92 | | - Centres AS c ON csa.CentreID = c.CentreID ON da.CentreID = c.CentreID AND ca.SelfAssessmentID = sa.ID INNER JOIN |
93 | | - JobGroups AS jg ON u.JobGroupID = jg.JobGroupID LEFT OUTER JOIN |
94 | | - AdminAccounts AS aa ON da.UserID = aa.UserID AND aa.CentreID = da.CentreID AND aa.Active = 1 LEFT OUTER JOIN |
95 | | - CandidateAssessmentSupervisors AS cas ON ca.ID = cas.CandidateAssessmentID left JOIN |
96 | | - CandidateAssessmentSupervisorVerifications AS casv ON casv.CandidateAssessmentSupervisorID = cas.ID LEFT JOIN |
97 | | - SupervisorDelegates AS sd ON cas.SupervisorDelegateId = sd.ID |
98 | | - LEFT OUTER JOIN LatestAssessmentResults AS LAR ON LAR.DelegateUserID = ca.DelegateUserID |
99 | | - WHERE |
100 | | - (sa.ID = @SelfAssessmentID) AND (sa.ArchivedDate IS NULL) AND (c.Active = 1) AND (ca.RemovedDate IS NULL AND ca.NonReportable = 0) |
101 | | - Group by sa.Name |
102 | | - , u.LastName + ', ' + u.FirstName |
103 | | - , da.Active |
104 | | - , u.ProfessionalRegistrationNumber |
105 | | - , c.CustomField1PromptID |
106 | | - , c.CustomField2PromptID |
107 | | - , c.CustomField3PromptID |
108 | | - , c.CustomField4PromptID |
109 | | - , c.CustomField5PromptID |
110 | | - , c.CustomField6PromptID |
111 | | - , c.CentreID |
112 | | - , jg.JobGroupName |
113 | | - , da.ID |
114 | | - , da.Answer1 |
115 | | - , da.Answer2 |
116 | | - , da.Answer3 |
117 | | - , da.Answer4 |
118 | | - , da.Answer5 |
119 | | - , da.Answer6 |
120 | | - , da.DateRegistered |
121 | | - , da.UserID |
122 | | - , aa.ID |
123 | | - , aa.IsCentreManager |
124 | | - , aa.IsCentreAdmin |
125 | | - , aa.IsSupervisor |
126 | | - , aa.IsNominatedSupervisor |
127 | | - , ca.StartedDate |
128 | | - , ca.LastAccessed |
129 | | - ORDER BY |
130 | | - SelfAssessment, u.LastName + ', ' + u.FirstName", |
131 | | - new { centreId, selfAssessmentId } |
132 | | - ); |
133 | | - } |
134 | | - } |
135 | | -} |
| 1 | +namespace DigitalLearningSolutions.Data.DataServices.SelfAssessmentDataService |
| 2 | +{ |
| 3 | + using Dapper; |
| 4 | + using DigitalLearningSolutions.Data.Models.SelfAssessments.Export; |
| 5 | + using DigitalLearningSolutions.Data.Models.SelfAssessments; |
| 6 | + using Microsoft.Extensions.Logging; |
| 7 | + using System.Collections.Generic; |
| 8 | + using System.Data; |
| 9 | + using ClosedXML.Excel; |
| 10 | + |
| 11 | + public interface ISelfAssessmentReportDataService |
| 12 | + { |
| 13 | + IEnumerable<SelfAssessmentSelect> GetSelfAssessmentsForReportList(int centreId, int? categoryId); |
| 14 | + IEnumerable<SelfAssessmentReportData> GetSelfAssessmentReportDataForCentre(int centreId, int selfAssessmentId); |
| 15 | + } |
| 16 | + public partial class SelfAssessmentReportDataService : ISelfAssessmentReportDataService |
| 17 | + { |
| 18 | + private readonly IDbConnection connection; |
| 19 | + private readonly ILogger<SelfAssessmentReportDataService> logger; |
| 20 | + |
| 21 | + public SelfAssessmentReportDataService(IDbConnection connection, ILogger<SelfAssessmentReportDataService> logger) |
| 22 | + { |
| 23 | + this.connection = connection; |
| 24 | + this.logger = logger; |
| 25 | + } |
| 26 | + |
| 27 | + public IEnumerable<SelfAssessmentSelect> GetSelfAssessmentsForReportList(int centreId, int? categoryId) |
| 28 | + { |
| 29 | + return connection.Query<SelfAssessmentSelect>( |
| 30 | + @"SELECT csa.SelfAssessmentID AS Id, sa.Name, |
| 31 | + (SELECT COUNT (DISTINCT da.UserID) AS Learners |
| 32 | + FROM CandidateAssessments AS ca1 INNER JOIN |
| 33 | + DelegateAccounts AS da ON ca1.DelegateUserID = da.UserID |
| 34 | + WHERE (da.CentreID = @centreId) AND (ca1.RemovedDate IS NULL) AND (ca1.SelfAssessmentID = csa.SelfAssessmentID) AND ca1.NonReportable=0) AS LearnerCount |
| 35 | + FROM CentreSelfAssessments AS csa INNER JOIN |
| 36 | + SelfAssessments AS sa ON csa.SelfAssessmentID = sa.ID |
| 37 | + WHERE (csa.CentreID = @centreId) AND (sa.CategoryID = @categoryId) AND (sa.SupervisorResultsReview = 1) AND (sa.ArchivedDate IS NULL) OR |
| 38 | + (csa.CentreID = @centreId) AND (sa.CategoryID = @categoryId) AND (sa.ArchivedDate IS NULL) AND (sa.SupervisorSelfAssessmentReview = 1) OR |
| 39 | + (csa.CentreID = @centreId) AND (sa.SupervisorResultsReview = 1) AND (sa.ArchivedDate IS NULL) AND (@categoryId = 0) OR |
| 40 | + (csa.CentreID = @centreId) AND (sa.ArchivedDate IS NULL) AND (sa.SupervisorSelfAssessmentReview = 1) AND (@categoryId = 0) |
| 41 | + ORDER BY sa.Name", |
| 42 | + new { centreId, categoryId = categoryId ??= 0 } |
| 43 | + ); |
| 44 | + } |
| 45 | + |
| 46 | + public IEnumerable<SelfAssessmentReportData> GetSelfAssessmentReportDataForCentre(int centreId, int selfAssessmentId) |
| 47 | + { |
| 48 | + return connection.Query<SelfAssessmentReportData>( |
| 49 | + @"WITH LatestAssessmentResults AS |
| 50 | + ( |
| 51 | + SELECT s.DelegateUserID |
| 52 | + , CASE WHEN COALESCE (rr.LevelRAG, 0) = 3 THEN s.ID ELSE NULL END AS SelfAssessed |
| 53 | + , CASE WHEN sv.Verified IS NOT NULL AND sv.SignedOff = 1 AND COALESCE (rr.LevelRAG, 0) = 3 THEN s.ID ELSE NULL END AS Confirmed |
| 54 | + , CASE WHEN sas.Optional = 1 THEN s.CompetencyID ELSE NULL END AS Optional |
| 55 | + FROM SelfAssessmentResults AS s LEFT OUTER JOIN |
| 56 | + SelfAssessmentStructure AS sas ON sas.SelfAssessmentID = @selfAssessmentId AND s.CompetencyID = sas.CompetencyID LEFT OUTER JOIN |
| 57 | + SelfAssessmentResultSupervisorVerifications AS sv ON s.ID = sv.SelfAssessmentResultId AND sv.Superceded = 0 LEFT OUTER JOIN |
| 58 | + CompetencyAssessmentQuestionRoleRequirements AS rr ON s.CompetencyID = rr.CompetencyID AND s.AssessmentQuestionID = rr.AssessmentQuestionID AND sas.SelfAssessmentID = rr.SelfAssessmentID AND s.Result = rr.LevelValue |
| 59 | + WHERE (sas.SelfAssessmentID = @selfAssessmentId) |
| 60 | + ) |
| 61 | + SELECT |
| 62 | + sa.Name AS SelfAssessment |
| 63 | + , u.LastName + ', ' + u.FirstName AS Learner |
| 64 | + , da.Active AS LearnerActive |
| 65 | + , u.ProfessionalRegistrationNumber AS PRN |
| 66 | + , jg.JobGroupName AS JobGroup |
| 67 | + , da.Answer1 AS RegistrationAnswer1 |
| 68 | + , da.Answer2 AS RegistrationAnswer2 |
| 69 | + , da.Answer3 AS RegistrationAnswer3 |
| 70 | + , da.Answer4 AS RegistrationAnswer4 |
| 71 | + , da.Answer5 AS RegistrationAnswer5 |
| 72 | + , da.Answer6 AS RegistrationAnswer6 |
| 73 | + , dbo.GetOtherCentresForSelfAssessment(da.UserID, @SelfAssessmentID, c.CentreID) AS OtherCentres |
| 74 | + , CASE |
| 75 | + WHEN aa.ID IS NULL THEN 'Learner' |
| 76 | + WHEN aa.IsCentreManager = 1 THEN 'Centre Manager' |
| 77 | + WHEN aa.IsCentreAdmin = 1 AND aa.IsCentreManager = 0 THEN 'Centre Admin' |
| 78 | + WHEN aa.IsSupervisor = 1 THEN 'Supervisor' |
| 79 | + WHEN aa.IsNominatedSupervisor = 1 THEN 'Nominated supervisor' |
| 80 | + END AS DLSRole |
| 81 | + , da.DateRegistered AS Registered |
| 82 | + , ca.StartedDate AS Started |
| 83 | + , ca.LastAccessed |
| 84 | + , COALESCE(COUNT(DISTINCT LAR.Optional), NULL) AS [OptionalProficienciesAssessed] |
| 85 | + , COALESCE(COUNT(DISTINCT LAR.SelfAssessed), NULL) AS [SelfAssessedAchieved] |
| 86 | + , COALESCE(COUNT(DISTINCT LAR.Confirmed), NULL) AS [ConfirmedResults] |
| 87 | + , max(casv.Requested) AS SignOffRequested |
| 88 | + , max(1*casv.SignedOff) AS SignOffAchieved |
| 89 | + , min(casv.Verified) AS ReviewedDate |
| 90 | + FROM |
| 91 | + CandidateAssessments AS ca INNER JOIN |
| 92 | + DelegateAccounts AS da ON ca.DelegateUserID = da.UserID and da.CentreID = @centreId INNER JOIN |
| 93 | + Users as u ON u.ID = da.UserID INNER JOIN |
| 94 | + SelfAssessments AS sa INNER JOIN |
| 95 | + CentreSelfAssessments AS csa ON sa.ID = csa.SelfAssessmentID INNER JOIN |
| 96 | + Centres AS c ON csa.CentreID = c.CentreID ON da.CentreID = c.CentreID AND ca.SelfAssessmentID = sa.ID INNER JOIN |
| 97 | + JobGroups AS jg ON u.JobGroupID = jg.JobGroupID LEFT OUTER JOIN |
| 98 | + AdminAccounts AS aa ON da.UserID = aa.UserID AND aa.CentreID = da.CentreID AND aa.Active = 1 LEFT OUTER JOIN |
| 99 | + CandidateAssessmentSupervisors AS cas ON ca.ID = cas.CandidateAssessmentID left JOIN |
| 100 | + CandidateAssessmentSupervisorVerifications AS casv ON casv.CandidateAssessmentSupervisorID = cas.ID LEFT JOIN |
| 101 | + SupervisorDelegates AS sd ON cas.SupervisorDelegateId = sd.ID |
| 102 | + LEFT OUTER JOIN LatestAssessmentResults AS LAR ON LAR.DelegateUserID = ca.DelegateUserID |
| 103 | + WHERE |
| 104 | + (sa.ID = @SelfAssessmentID) AND (sa.ArchivedDate IS NULL) AND (c.Active = 1) AND (ca.RemovedDate IS NULL AND ca.NonReportable = 0) |
| 105 | + Group by sa.Name |
| 106 | + , u.LastName + ', ' + u.FirstName |
| 107 | + , da.Active |
| 108 | + , u.ProfessionalRegistrationNumber |
| 109 | + , c.CustomField1PromptID |
| 110 | + , c.CustomField2PromptID |
| 111 | + , c.CustomField3PromptID |
| 112 | + , c.CustomField4PromptID |
| 113 | + , c.CustomField5PromptID |
| 114 | + , c.CustomField6PromptID |
| 115 | + , c.CentreID |
| 116 | + , jg.JobGroupName |
| 117 | + , da.ID |
| 118 | + , da.Answer1 |
| 119 | + , da.Answer2 |
| 120 | + , da.Answer3 |
| 121 | + , da.Answer4 |
| 122 | + , da.Answer5 |
| 123 | + , da.Answer6 |
| 124 | + , da.DateRegistered |
| 125 | + , da.UserID |
| 126 | + , aa.ID |
| 127 | + , aa.IsCentreManager |
| 128 | + , aa.IsCentreAdmin |
| 129 | + , aa.IsSupervisor |
| 130 | + , aa.IsNominatedSupervisor |
| 131 | + , ca.StartedDate |
| 132 | + , ca.LastAccessed |
| 133 | + ORDER BY |
| 134 | + SelfAssessment, u.LastName + ', ' + u.FirstName", |
| 135 | + new { centreId, selfAssessmentId } |
| 136 | + ); |
| 137 | + } |
| 138 | + } |
| 139 | +} |
0 commit comments