Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace DigitalLearningSolutions.Data.Migrations
{
using FluentMigrator;

[Migration(202607301180)]
public class TD_7501_Alter_GetAssessmentResultsByDelegate : Migration
{
public override void Up()
{
Execute.Sql(Properties.Resources.TD_7501_Alter_GetAssessmentResultsByDelegate_Up);
}
public override void Down()
{
Execute.Sql(Properties.Resources.TD_7501_Alter_GetAssessmentResultsByDelegate_Down);
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -553,4 +553,10 @@
<data name="TD_7397_Alter_usp_GetSelfAssessmentReport_Up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-7397-Alter_usp_GetSelfAssessmentReport_Up.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
</root>
<data name="TD_7501_Alter_GetAssessmentResultsByDelegate_Down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TD_7501_Alter_GetAssessmentResultsByDelegate_Down.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="TD_7501_Alter_GetAssessmentResultsByDelegate_Up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TD_7501_Alter_GetAssessmentResultsByDelegate_Up.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
</data>
</root>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@

/****** Object: StoredProcedure [dbo].[GetAssessmentResultsByDelegate] Script Date: 28/07/2026 15:06:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Auldrin Possa
-- Create date: 30/11/2023
-- Description: Returns assessment results for a delegate
-- =============================================
ALTER PROCEDURE [dbo].[GetAssessmentResultsByDelegate]
@selfAssessmentId as Int = 0,
@delegateId as int = 0
AS
BEGIN

SET NOCOUNT ON;

WITH LatestAssessmentResults AS
(
SELECT
s.CompetencyID,
s.AssessmentQuestionID,
s.ID AS ResultID,
s.DateTime AS ResultDateTime,
s.Result,
s.SupportingComments,
sv.ID AS SelfAssessmentResultSupervisorVerificationId,
sv.Requested,
sv.Verified,
sv.Comments,
sv.SignedOff,
adu.Forename + ' ' + adu.Surname AS SupervisorName,
sv.CandidateAssessmentSupervisorID,
sv.EmailSent,
0 AS UserIsVerifier,
COALESCE (rr.LevelRAG, 0) AS ResultRAG
FROM SelfAssessmentResults s
LEFT OUTER JOIN DelegateAccounts AS da ON s.DelegateUserID = da.UserID
LEFT OUTER JOIN SelfAssessmentResultSupervisorVerifications AS sv
ON s.ID = sv.SelfAssessmentResultId AND sv.Superceded = 0
LEFT OUTER JOIN CandidateAssessmentSupervisors AS cas
ON sv.CandidateAssessmentSupervisorID = cas.ID
LEFT OUTER JOIN SupervisorDelegates AS sd
ON cas.SupervisorDelegateId = sd.ID
LEFT OUTER JOIN AdminUsers AS adu
ON sd.SupervisorAdminID = adu.AdminID
LEFT OUTER JOIN CompetencyAssessmentQuestionRoleRequirements rr
ON s.CompetencyID = rr.CompetencyID AND s.AssessmentQuestionID = rr.AssessmentQuestionID
AND s.SelfAssessmentID = rr.SelfAssessmentID AND s.Result = rr.LevelValue
WHERE da.ID = @delegateId
)


SELECT C.ID AS Id,
DENSE_RANK() OVER (ORDER BY SAS.Ordering) as RowNo,
C.Name AS Name,
C.Description AS Description,
COALESCE(CG.Name, 'Ungrouped') AS CompetencyGroup,
COALESCE(CG.ID, 0) AS CompetencyGroupID,
COALESCE(CG.Description, 'Competencies without a group') AS CompetencyGroupDescription,
COALESCE(
(SELECT TOP(1) FrameworkConfig
FROM Frameworks F
INNER JOIN FrameworkCompetencies AS FC
ON FC.FrameworkID = F.ID
WHERE FC.CompetencyID = C.ID),
'Capability') AS Vocabulary,
1 AS HasDelegateNominatedRoles,
SAS.Optional,
C.AlwaysShowDescription,
AQ.ID AS Id,
AQ.Question,
AQ.MaxValueDescription,
AQ.MinValueDescription,
AQ.ScoringInstructions,
AQ.MinValue,
AQ.MaxValue,
AQ.AssessmentQuestionInputTypeID,
AQ.IncludeComments,
AQ.CommentsPrompt,
AQ.CommentsHint,
CAQ.Required,
LAR.ResultId,
LAR.Result,
LAR.ResultDateTime,
LAR.SupportingComments,
LAR.SelfAssessmentResultSupervisorVerificationId,
LAR.Requested,
LAR.Verified,
LAR.Comments AS SupervisorComments,
LAR.SignedOff,
LAR.UserIsVerifier,
LAR.ResultRAG,
LAR.SupervisorName

FROM Competencies AS C
INNER JOIN CompetencyAssessmentQuestions AS CAQ
ON CAQ.CompetencyID = C.ID
INNER JOIN AssessmentQuestions AS AQ
ON AQ.ID = CAQ.AssessmentQuestionID
INNER JOIN CandidateAssessments AS CA
ON CA.SelfAssessmentID = @selfAssessmentId AND CA.RemovedDate IS NULL
INNER JOIN DelegateAccounts AS DA ON CA.DelegateUserID = DA.UserID AND DA.ID = @delegateId
LEFT OUTER JOIN LatestAssessmentResults AS LAR
ON LAR.CompetencyID = C.ID AND LAR.AssessmentQuestionID = AQ.ID
INNER JOIN SelfAssessmentStructure AS SAS
ON C.ID = SAS.CompetencyID AND SAS.SelfAssessmentID = @selfAssessmentId
LEFT JOIN CompetencyGroups AS CG
ON SAS.CompetencyGroupID = CG.ID AND SAS.SelfAssessmentID = @selfAssessmentId
LEFT OUTER JOIN (
SELECT
CandidateAssessmentID,
CompetencyID,
CompetencyGroupID,
CAST(MAX(CAST(IncludedInSelfAssessment AS int)) AS bit) AS IncludedInSelfAssessment
FROM CandidateAssessmentOptionalCompetencies
GROUP BY CandidateAssessmentID, CompetencyID, CompetencyGroupID
) AS CAOC
ON CA.ID = CAOC.CandidateAssessmentID AND C.ID = CAOC.CompetencyID AND (
CG.ID = CAOC.CompetencyGroupID
OR (CG.ID IS NULL AND CAOC.CompetencyGroupID IS NULL)
)

WHERE (CAOC.IncludedInSelfAssessment = 1) OR (SAS.Optional = 0)
ORDER BY SAS.Ordering, CAQ.Ordering
END
Original file line number Diff line number Diff line change
Expand Up @@ -459,10 +459,16 @@ INNER JOIN CandidateAssessments AS CA
ON CA.SelfAssessmentID = @selfAssessmentId AND CA.DelegateUserID = @delegateUserId AND CA.RemovedDate IS NULL
INNER JOIN SelfAssessmentStructure AS SAS
ON C.ID = SAS.CompetencyID AND SAS.SelfAssessmentID = @selfAssessmentId
INNER JOIN CompetencyGroups AS CG
LEFT OUTER JOIN CompetencyGroups AS CG
ON SAS.CompetencyGroupID = CG.ID AND SAS.SelfAssessmentID = @selfAssessmentId
LEFT OUTER JOIN CandidateAssessmentOptionalCompetencies AS CAOC
ON CA.ID = CAOC.CandidateAssessmentID AND C.ID = CAOC.CompetencyID AND CG.ID = CAOC.CompetencyGroupID
LEFT OUTER JOIN (SELECT
CandidateAssessmentID,
CompetencyID,
CAST(MAX(CAST(IncludedInSelfAssessment AS int)) AS bit) AS IncludedInSelfAssessment
FROM CandidateAssessmentOptionalCompetencies
GROUP BY CandidateAssessmentID, CompetencyID
) AS CAOC
ON CA.ID = CAOC.CandidateAssessmentID AND C.ID = CAOC.CompetencyID
WHERE (SAS.Optional = 1)
ORDER BY SAS.Ordering",
new { selfAssessmentId, delegateUserId }
Expand All @@ -474,12 +480,16 @@ public void InsertCandidateAssessmentOptionalCompetenciesIfNotExist(int selfAsse
connection.Execute(
@"UPDATE CandidateAssessmentOptionalCompetencies
SET IncludedInSelfAssessment = 0
FROM CandidateAssessmentOptionalCompetencies AS CAOC
FROM (
SELECT DISTINCT
CandidateAssessmentID,
CompetencyID
FROM CandidateAssessmentOptionalCompetencies
) AS CAOC
INNER JOIN CandidateAssessments AS CA
ON CAOC.CandidateAssessmentID = CA.ID
INNER JOIN SelfAssessmentStructure AS SAS
ON CA.SelfAssessmentID = SAS.SelfAssessmentID AND CAOC.CompetencyID = SAS.CompetencyID AND CA.SelfAssessmentID = @selfAssessmentId
AND CAOC.CompetencyGroupID = SAS.CompetencyGroupID
WHERE (CA.DelegateUserID = @delegateUserId) AND (CA.RemovedDate IS NULL)
",
new { selfAssessmentId, delegateUserId }
Expand All @@ -504,12 +514,16 @@ public void UpdateCandidateAssessmentOptionalCompetencies(int selfAssessmentStru
var numberOfAffectedRows = connection.Execute(
@"UPDATE CandidateAssessmentOptionalCompetencies
SET IncludedInSelfAssessment = 1
FROM CandidateAssessmentOptionalCompetencies AS CAOC
FROM (
SELECT DISTINCT
CandidateAssessmentID,
CompetencyID
FROM CandidateAssessmentOptionalCompetencies
) AS CAOC
INNER JOIN CandidateAssessments AS CA
ON CAOC.CandidateAssessmentID = CA.ID
INNER JOIN SelfAssessmentStructure AS SAS
ON CA.SelfAssessmentID = SAS.SelfAssessmentID AND CAOC.CompetencyID = SAS.CompetencyID
AND CAOC.CompetencyGroupID = SAS.CompetencyGroupID
WHERE (SAS.ID = @selfAssessmentStructureId) AND (CA.DelegateUserID = @delegateUserId) AND (CA.RemovedDate IS NULL)",
new { selfAssessmentStructureId, delegateUserId }
);
Expand Down Expand Up @@ -553,14 +567,21 @@ public List<int> GetCandidateAssessmentIncludedSelfAssessmentStructureIds(int se
return connection.Query<int>(
@"SELECT
SAS.ID
FROM CandidateAssessmentOptionalCompetencies AS CAOC
INNER JOIN CandidateAssessments AS CA
ON CAOC.CandidateAssessmentID = CA.ID AND CA.SelfAssessmentID = @selfAssessmentId
AND CA.DelegateUserID = @delegateUserId AND CA.RemovedDate IS NULL
FROM (
SELECT DISTINCT
CandidateAssessmentID,
CompetencyID
FROM CandidateAssessmentOptionalCompetencies
WHERE IncludedInSelfAssessment = 1
) AS CAOC
INNER JOIN CandidateAssessments AS CA
ON CAOC.CandidateAssessmentID = CA.ID
AND CA.SelfAssessmentID = @selfAssessmentId
AND CA.DelegateUserID = @delegateUserId
AND CA.RemovedDate IS NULL
INNER JOIN SelfAssessmentStructure AS SAS
ON CAOC.CompetencyID = SAS.CompetencyID AND CAOC.CompetencyGroupID = SAS.CompetencyGroupID
AND SAS.SelfAssessmentID = @selfAssessmentId
WHERE (CAOC.IncludedInSelfAssessment = 1)",
ON CAOC.CompetencyID = SAS.CompetencyID
AND SAS.SelfAssessmentID = @selfAssessmentId;",
new { selfAssessmentId, delegateUserId }
).ToList();
}
Expand Down
Loading