Skip to content
Merged
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,70 @@
namespace DigitalLearningSolutions.Data.Migrations
{
using FluentMigrator;

[Migration(202508261415, TransactionBehavior.None)]
public class RemoveCustomAdminTitlesAddSupervisorNominatedSupervisor : Migration
{
public override void Up()
{
Execute.Sql(Properties.Resources.TD_5638_SnapshotData_UP);

Execute.Sql($@"
-- 1. Drop old FK
ALTER TABLE [dbo].[SelfAssessmentSupervisorRoles]
DROP CONSTRAINT [FK_SelfAssessmentSupervisorRoles_SelfAssessmentID_SelfAssessments_ID];


-- 2. Make column nullable
ALTER TABLE [dbo].[SelfAssessmentSupervisorRoles]
ALTER COLUMN SelfAssessmentID INT NULL;


-- 3. Recreate FK (allows NULLs by default)
ALTER TABLE [dbo].[SelfAssessmentSupervisorRoles]
ADD CONSTRAINT [FK_SelfAssessmentSupervisorRoles_SelfAssessmentID_SelfAssessments_ID]
FOREIGN KEY (SelfAssessmentID) REFERENCES SelfAssessments(ID);


-- 4. Add two default roles
INSERT INTO [dbo].[SelfAssessmentSupervisorRoles]
([SelfAssessmentID],[RoleName],[SelfAssessmentReview],[ResultsReview]
,[RoleDescription]
,[AllowDelegateNomination],[AllowSupervisorRoleSelection])
VALUES
(NULL,'Supervisor',1,1
,'This person may be the line manager, practice educator or educational supervisor at University.'
,0,1),
(NULL,'Nominated Supervisor',0,1
,'Nominated Supervisors must be deemed competent to administer intravenous medication by their home organisation. Nominated Supervisors should be authorised to supervise and assess the practice of others by their line manager, who should consider their level of experience.'
,1,0);


-- 5. Update all CandidateAssessmentSupervisor records
UPDATE cas
SET cas.SelfAssessmentSupervisorRoleID =
    CASE
        WHEN sasr.RoleName = 'Educator/Manager' THEN sup.ID
        WHEN sasr.RoleName = 'Assessor'         THEN nom.ID
    END
FROM CandidateAssessmentSupervisors cas
INNER JOIN SelfAssessmentSupervisorRoles sasr
    ON cas.SelfAssessmentSupervisorRoleID = sasr.ID
LEFT JOIN SelfAssessmentSupervisorRoles sup
    ON sup.RoleName = 'Supervisor'
LEFT JOIN SelfAssessmentSupervisorRoles nom
    ON nom.RoleName = 'Nominated Supervisor';


-- 6. Remove all existing roles where SelfAssessmentID is not null
DELETE FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID IS NOT NULL;
"
);
}

public override void Down()
{
// Intentionally empty. If things go wrong later, we will manually restore the snapshot
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace DigitalLearningSolutions.Data.Migrations
{
using FluentMigrator;

[Migration(202508281600)]
public class AlterGetCandidateAssessmentResultsByIdSP : Migration
{
public override void Up()
{
Execute.Sql(Properties.Resources.TD_5638_Alter_GetCandidateAssessmentResultsById_Up);
}
public override void Down()
{
Execute.Sql(Properties.Resources.TD_5638_Alter_GetCandidateAssessmentResultsById_DOWN);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@


namespace DigitalLearningSolutions.Data.Migrations
{
using FluentMigrator;

[Migration(202508281630)]
public class AlterGetAssessmentResultsByDelegateSP : Migration
{
public override void Up()
{
Execute.Sql(Properties.Resources.TD_5638_Alter_GetAssessmentResultsByDelegate_Up);
}
public override void Down()
{
Execute.Sql(Properties.Resources.TD_5638_Alter_GetAssessmentResultsByDelegate_DOWN);
}
}
}

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

15 changes: 15 additions & 0 deletions DigitalLearningSolutions.Data.Migrations/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -505,4 +505,19 @@
<data name="TD_5535_Alter_GetActivitiesForDelegateEnrolment_Up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-5535-Alter_GetActivitiesForDelegateEnrolment_Up.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="TD_5638_Alter_GetAssessmentResultsByDelegate_DOWN" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-5638-Alter_GetAssessmentResultsByDelegate_DOWN.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="TD_5638_Alter_GetAssessmentResultsByDelegate_Up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-5638-Alter_GetAssessmentResultsByDelegate_Up.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="TD_5638_Alter_GetCandidateAssessmentResultsById_DOWN" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-5638-Alter_GetCandidateAssessmentResultsById_DOWN.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="TD_5638_Alter_GetCandidateAssessmentResultsById_Up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-5638-Alter_GetCandidateAssessmentResultsById_Up.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16</value>
</data>
<data name="TD_5638_SnapshotData_UP" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Scripts\TD-5638-SnapshotData-UP.sql;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
</root>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
DECLARE @dbName NVARCHAR(128) = DB_NAME()
DECLARE @defaultPath NVARCHAR(500) = CONVERT(NVARCHAR(500), SERVERPROPERTY('InstanceDefaultDataPath'))
DECLARE @snapshotTime NVARCHAR(12) = FORMAT(GETDATE(), 'yyyyMMddHHmm')

DECLARE @snapSql NVARCHAR(4000) = 'CREATE DATABASE ' + @dbName + '_' + @snapshotTime + ' ON
( NAME = mbdbx101, FILENAME = ''' + @defaultPath + @dbName + '_' + @snapshotTime + '''),
( NAME = mbdbx101files, FILENAME = ''' + @defaultPath + @dbName + '_filestream1_' + @snapshotTime + ''')
AS SNAPSHOT OF ' + @dbName

EXEC sp_executesql @stmt = @SnapSql
Original file line number Diff line number Diff line change
Expand Up @@ -202,22 +202,29 @@ CandidateAssessments AS CA LEFT OUTER JOIN
CAST(CASE WHEN CA.SelfAssessmentProcessAgreed IS NOT NULL THEN 1 ELSE 0 END AS BIT) AS SelfAssessmentProcessAgreed,
CAST(CASE WHEN SA.SupervisorSelfAssessmentReview = 1 OR SA.SupervisorResultsReview = 1 THEN 1 ELSE 0 END AS BIT) AS IsSupervised,
CASE
WHEN (SELECT COUNT(*) FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId AND AllowDelegateNomination = 1) > 0
WHEN (SELECT COUNT(*) FROM SelfAssessmentSupervisorRoles WHERE
(SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId)))
AND AllowDelegateNomination = 1) > 0
THEN 1
ELSE 0
END AS HasDelegateNominatedRoles,
COALESCE(
(SELECT TOP (1) RoleName FROM SelfAssessmentSupervisorRoles
WHERE (ResultsReview = 1) AND (SelfAssessmentID = @selfAssessmentId) AND
WHERE (ResultsReview = 1) AND (SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId))) AND
((SELECT COUNT(*) AS Expr1 FROM SelfAssessmentSupervisorRoles AS SelfAssessmentSupervisorRoles_1
WHERE (ResultsReview = 1) AND (SelfAssessmentID = @selfAssessmentId)) = 1)),
WHERE (ResultsReview = 1) AND (SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId)))) = 1)),
'Supervisor') AS VerificationRoleName,
COALESCE(
(SELECT TOP (1) RoleName FROM SelfAssessmentSupervisorRoles
WHERE (SelfAssessmentReview = 1) AND (SelfAssessmentID = @selfAssessmentId) AND
WHERE (SelfAssessmentReview = 1) AND (SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId))) AND
((SELECT COUNT(*) AS Expr1
FROM SelfAssessmentSupervisorRoles AS SelfAssessmentSupervisorRoles_1
WHERE (SelfAssessmentReview = 1) AND (SelfAssessmentID = @selfAssessmentId)) = 1)),
WHERE (SelfAssessmentReview = 1) AND (SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId)))) = 1)),
'Supervisor') AS SignOffRoleName,
SA.SignOffRequestorStatement,
SA.ManageSupervisorsDescription,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,10 @@ INNER JOIN FrameworkCompetencies AS FC
WHERE FC.CompetencyID = C.ID),
'Capability') AS Vocabulary,
CASE
WHEN (SELECT COUNT(*) FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = SAS.SelfAssessmentID) > 0
WHEN (SELECT COUNT(*) FROM SelfAssessmentSupervisorRoles
WHERE (SelfAssessmentID = SAS.SelfAssessmentID OR
(SelfAssessmentID IS NULL AND NOT EXISTS
(SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = SAS.SelfAssessmentID)))) > 0
THEN 1
ELSE 0
END AS HasDelegateNominatedRoles,
Expand Down Expand Up @@ -642,7 +645,7 @@ FROM SelfAssessmentResults s inner join

public void RemoveReviewCandidateAssessmentOptionalCompetencies(int id)
{

connection.Execute(
@"delete from SelfAssessmentResultSupervisorVerifications WHERE SelfAssessmentResultId = @id", new { id });

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -829,7 +829,8 @@ public IEnumerable<SelfAssessmentSupervisorRole> GetSupervisorRolesForSelfAssess
return connection.Query<SelfAssessmentSupervisorRole>(
$@"SELECT ID, SelfAssessmentID, RoleName, RoleDescription, SelfAssessmentReview, ResultsReview,AllowSupervisorRoleSelection
FROM SelfAssessmentSupervisorRoles
WHERE (SelfAssessmentID = @selfAssessmentId)
WHERE SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId))
ORDER BY RoleName", new { selfAssessmentId }
);
}
Expand All @@ -839,7 +840,9 @@ public IEnumerable<SelfAssessmentSupervisorRole> GetSupervisorRolesBySelfAssessm
return connection.Query<SelfAssessmentSupervisorRole>(
$@"SELECT ID, SelfAssessmentID, RoleName, RoleDescription, SelfAssessmentReview, ResultsReview
FROM SelfAssessmentSupervisorRoles
WHERE (SelfAssessmentID = @selfAssessmentId) AND (AllowSupervisorRoleSelection = 1)
WHERE (SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId)))
AND (AllowSupervisorRoleSelection = 1)
ORDER BY RoleName", new { selfAssessmentId }
);
}
Expand All @@ -848,7 +851,9 @@ public IEnumerable<SelfAssessmentSupervisorRole> GetDelegateNominatableSuperviso
return connection.Query<SelfAssessmentSupervisorRole>(
$@"SELECT ID, SelfAssessmentID, RoleName, RoleDescription, SelfAssessmentReview, ResultsReview
FROM SelfAssessmentSupervisorRoles
WHERE (SelfAssessmentID = @selfAssessmentId) AND (AllowDelegateNomination = 1)
WHERE (SelfAssessmentID = @selfAssessmentId OR
(SelfAssessmentID IS NULL AND NOT EXISTS (SELECT 1 FROM SelfAssessmentSupervisorRoles WHERE SelfAssessmentID = @selfAssessmentId)))
AND (AllowDelegateNomination = 1)
ORDER BY RoleName", new { selfAssessmentId }
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace DigitalLearningSolutions.Data.Models.Supervisor
public class SelfAssessmentSupervisorRole
{
public int ID { get; set; }
public int SelfAssessmentID { get; set; }
public int? SelfAssessmentID { get; set; }
public string RoleName { get; set; } = string.Empty;
public string? RoleDescription { get; set; }
public bool SelfAssessmentReview { get; set; }
Expand Down
Loading
Loading