diff --git a/DigitalLearningSolutions.Data.Migrations/202412020900_UpdateCandidateAssessmentSupervisorsTable.cs b/DigitalLearningSolutions.Data.Migrations/202412020900_UpdateCandidateAssessmentSupervisorsTable.cs new file mode 100644 index 0000000000..0304c7aade --- /dev/null +++ b/DigitalLearningSolutions.Data.Migrations/202412020900_UpdateCandidateAssessmentSupervisorsTable.cs @@ -0,0 +1,36 @@ +namespace DigitalLearningSolutions.Data.Migrations +{ + using FluentMigrator; + + [Migration(202412020900)] + public class UpdateCandidateAssessmentSupervisorsTable : ForwardOnlyMigration + { + public override void Up() + { + Execute.Sql($@"UPDATE cas + SET SelfAssessmentSupervisorRoleID = (SELECT ID FROM SelfAssessmentSupervisorRoles + WHERE SelfAssessmentID = ssr.SelfAssessmentID and AllowDelegateNomination = 1) + FROM CandidateAssessmentSupervisors cas INNER JOIN + SelfAssessmentSupervisorRoles ssr ON cas.SelfAssessmentSupervisorRoleID = ssr.ID + AND cas.Removed IS NULL AND ssr.AllowDelegateNomination = 0 INNER JOIN + SupervisorDelegates sd ON cas.SupervisorDelegateId = sd.ID INNER JOIN + AdminAccounts aa ON sd.SupervisorAdminID = aa.ID + WHERE aa.IsSupervisor = 0 AND aa.IsNominatedSupervisor = 1 + -- to exclude duplicate CandidateAssessmentID from update + AND cas.CandidateAssessmentID NOT IN ( + SELECT CandidateAssessmentID FROM CandidateAssessmentSupervisors WHERE CandidateAssessmentID in ( + SELECT Cas2.CandidateAssessmentID + FROM CandidateAssessmentSupervisors cas2 with (nolock) INNER JOIN + SelfAssessmentSupervisorRoles ssr2 with (nolock) ON cas2.SelfAssessmentSupervisorRoleID = ssr2.ID + AND cas2.Removed IS NULL AND ssr2.AllowDelegateNomination = 0 INNER JOIN + SupervisorDelegates sd2 with (nolock) ON cas2.SupervisorDelegateId = sd2.ID INNER JOIN + AdminAccounts aa2 with (nolock) ON sd2.SupervisorAdminID = aa2.ID + WHERE aa2.IsSupervisor = 0 AND aa2.IsNominatedSupervisor = 1 + ) + GROUP BY CandidateAssessmentID,SupervisorDelegateId + HAVING COUNT(*)>1 + )" + ); + } + } +} diff --git a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs index 9f0ab58aec..9e3addf30f 100644 --- a/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/CourseDataService.cs @@ -542,7 +542,7 @@ LEFT OUTER JOIN UserCentreDetails AS UCD ON new { candidateAssessmentId, enrolmentMethodId, completeByDateDynamic } ); } - if (candidateAssessmentId > 1 && supervisorDelegateId !=0) + if (candidateAssessmentId > 1 && supervisorDelegateId != 0) { string sqlQuery = $@" BEGIN TRANSACTION @@ -551,17 +551,17 @@ BEGIN TRANSACTION UPDATE CandidateAssessmentSupervisors SET Removed = NULL {((selfAssessmentSupervisorRoleId > 0) ? " ,SelfAssessmentSupervisorRoleID = @selfAssessmentSupervisorRoleID" : string.Empty)} - WHERE CandidateAssessmentID = @candidateAssessmentId + WHERE CandidateAssessmentID = @candidateAssessmentId AND SupervisorDelegateId = @supervisorDelegateId COMMIT TRANSACTION"; connection.Execute(sqlQuery - , new { candidateAssessmentId, selfAssessmentSupervisorRoleId, enrolmentMethodId, completeByDateDynamic }); + , new { candidateAssessmentId, selfAssessmentSupervisorRoleId, enrolmentMethodId, completeByDateDynamic, supervisorDelegateId }); } if (supervisorId > 0) { - + var adminUserId = Convert.ToInt32(connection.ExecuteScalar(@"SELECT UserID FROM AdminAccounts WHERE (AdminAccounts.ID = @supervisorId)", new { supervisorId }) );