Skip to content

Commit 63521f4

Browse files
committed
Merge branch 'master' into DLS-Release-v1.2.0
2 parents f10e104 + e90895c commit 63521f4

File tree

25 files changed

+360
-247
lines changed

25 files changed

+360
-247
lines changed

DigitalLearningSolutions.Data/DataServices/CourseCategoriesDataService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public interface ICourseCategoriesDataService
1010
{
1111
IEnumerable<Category> GetCategoriesForCentreAndCentrallyManagedCourses(int centreId);
12-
string? GetCourseCategoryName(int categoryId);
12+
string? GetCourseCategoryName(int? categoryId);
1313
}
1414

1515
public class CourseCategoriesDataService : ICourseCategoriesDataService
@@ -34,7 +34,7 @@ FROM CourseCategories
3434
);
3535
}
3636

37-
public string? GetCourseCategoryName(int categoryId)
37+
public string? GetCourseCategoryName(int? categoryId)
3838
{
3939
var name = connection.QueryFirstOrDefault<string?>(
4040
@"SELECT CategoryName

DigitalLearningSolutions.Data/DataServices/CourseDataService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ BEGIN TRANSACTION
551551
552552
UPDATE CandidateAssessmentSupervisors SET Removed = NULL
553553
{((selfAssessmentSupervisorRoleId > 0) ? " ,SelfAssessmentSupervisorRoleID = @selfAssessmentSupervisorRoleID" : string.Empty)}
554-
WHERE CandidateAssessmentID = @candidateAssessmentId AND SupervisorDelegateId = @supervisorDelegateId
554+
WHERE CandidateAssessmentID = @candidateAssessmentId AND SupervisorDelegateId = @supervisorDelegateId AND SelfAssessmentSupervisorRoleID = @selfAssessmentSupervisorRoleID
555555
556556
COMMIT TRANSACTION";
557557

DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CandidateAssessmentsDataService.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,13 @@ INNER JOIN CompetencyGroups AS CG
298298
}
299299
}
300300

301+
public void RemoveSignoffRequestById(int candidateAssessmentSupervisorVerificationsId)
302+
{
303+
var numberOfAffectedRows = connection.Execute(
304+
@" DELETE FROM CandidateAssessmentSupervisorVerifications WHERE ID = @candidateAssessmentSupervisorVerificationsId ",
305+
new { candidateAssessmentSupervisorVerificationsId });
306+
}
307+
301308

302309
public void SetCompleteByDate(int selfAssessmentId, int delegateUserId, DateTime? completeByDate)
303310
{

DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/CompetencyDataService.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -635,16 +635,14 @@ FROM SelfAssessmentResults s inner join
635635
SelfAssessmentResultSupervisorVerifications sv ON s.ID = sv.SelfAssessmentResultId AND sv.Superceded = 0
636636
WHERE s.CompetencyID = @competencyId
637637
AND s.SelfAssessmentID = @selfAssessmentId
638-
AND s.DelegateUserID = @delegateUserId",
638+
AND s.DelegateUserID = @delegateUserId AND sv.Verified IS NULL",
639639
new { selfAssessmentId, delegateUserId, competencyId }
640640
);
641641
}
642642

643643
public void RemoveReviewCandidateAssessmentOptionalCompetencies(int id)
644644
{
645645

646-
connection.Execute(@"UPDATE SelfAssessmentResults SET Result = NULL WHERE ID = @id", new { id});
647-
648646
connection.Execute(
649647
@"delete from SelfAssessmentResultSupervisorVerifications WHERE SelfAssessmentResultId = @id", new { id });
650648

DigitalLearningSolutions.Data/DataServices/SelfAssessmentDataService/SelfAssessmentDataService.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ int competencyId
7878

7979
void UpdateLastAccessed(int selfAssessmentId, int delegateUserId);
8080
void RemoveSignoffRequests(int selfAssessmentId, int delegateUserId, int competencyGroupsId);
81+
void RemoveSignoffRequestById(int candidateAssessmentSupervisorVerificationsId);
8182
void SetCompleteByDate(int selfAssessmentId, int delegateUserId, DateTime? completeByDate);
8283

8384
void SetSubmittedDateNow(int selfAssessmentId, int delegateUserId);
@@ -173,7 +174,7 @@ int GetSelfAssessmentActivityDelegatesExportCount(string searchString, string so
173174
bool IsCentreSelfAssessment(int selfAssessmentId, int centreId);
174175
bool HasMinimumOptionalCompetencies(int selfAssessmentId, int delegateUserId);
175176
int GetSelfAssessmentCategoryId(int selfAssessmentId);
176-
void RemoveReviewCandidateAssessmentOptionalCompetencies(int id);
177+
void RemoveReviewCandidateAssessmentOptionalCompetencies(int id);
177178
public IEnumerable<SelfAssessmentResult> GetSelfAssessmentResultswithSupervisorVerificationsForDelegateSelfAssessmentCompetency(
178179
int delegateUserId,
179180
int selfAssessmentId,
@@ -683,9 +684,6 @@ BEGIN TRANSACTION
683684
UPDATE CandidateAssessments SET RemovedDate = GETUTCDATE(), RemovalMethodID = 2
684685
WHERE ID = @candidateAssessmentsId AND RemovedDate IS NULL
685686
686-
UPDATE CandidateAssessmentSupervisors SET Removed = GETUTCDATE()
687-
WHERE CandidateAssessmentID = @candidateAssessmentsId AND Removed IS NULL
688-
689687
COMMIT TRANSACTION
690688
END TRY
691689
BEGIN CATCH

DigitalLearningSolutions.Data/DataServices/SupervisorDataService.cs

Lines changed: 65 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -620,20 +620,21 @@ FROM CandidateAssessmentSupervisors AS cas INNER JOIN
620620
{
621621
return connection.Query<DelegateSelfAssessment>(
622622
@$"SELECT ca.ID, sa.ID AS SelfAssessmentID, sa.Name AS RoleName, sa.QuestionLabel, sa.DescriptionLabel, sa.ReviewerCommentsLabel,
623-
sa.SupervisorSelfAssessmentReview, sa.SupervisorResultsReview, ca.StartedDate,
624-
COALESCE(ca.LastAccessed, ca.StartedDate) AS LastAccessed,
625-
ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate,
626-
(SELECT COUNT(*) AS Expr1
627-
FROM CandidateAssessmentSupervisorVerifications AS casv
628-
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Requested IS NOT NULL) AND (Verified IS NULL)) AS SignOffRequested,
629-
{signedOffFields}
630-
(SELECT COUNT(*) AS Expr1
631-
FROM SelfAssessmentResultSupervisorVerifications AS sarsv
632-
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Verified IS NULL) AND (sarsv.Superceded = 0)) AS ResultsVerificationRequests
633-
FROM CandidateAssessmentSupervisors AS cas INNER JOIN
634-
CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN
635-
SelfAssessments AS sa ON sa.ID = ca.SelfAssessmentID
636-
WHERE (ca.ID = @candidateAssessmentId) AND (ISNULL(@adminIdCategoryID, 0) = 0 OR sa.CategoryID = @adminIdCategoryId)", new { candidateAssessmentId, adminIdCategoryId }
623+
sa.SupervisorSelfAssessmentReview, sa.SupervisorResultsReview, ca.StartedDate,
624+
COALESCE(ca.LastAccessed, ca.StartedDate) AS LastAccessed,
625+
ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate,
626+
(SELECT COUNT(*) AS Expr1
627+
FROM CandidateAssessmentSupervisorVerifications AS casv
628+
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Requested IS NOT NULL) AND (Verified IS NULL)) AS SignOffRequested,
629+
{signedOffFields}
630+
(SELECT COUNT(*) AS Expr1
631+
FROM SelfAssessmentResultSupervisorVerifications AS sarsv
632+
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Verified IS NULL) AND (sarsv.Superceded = 0)) AS ResultsVerificationRequests,
633+
sa.Vocabulary
634+
FROM CandidateAssessmentSupervisors AS cas INNER JOIN
635+
CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN
636+
SelfAssessments AS sa ON sa.ID = ca.SelfAssessmentID
637+
WHERE (ca.ID = @candidateAssessmentId) AND (ISNULL(@adminIdCategoryID, 0) = 0 OR sa.CategoryID = @adminIdCategoryId)", new { candidateAssessmentId, adminIdCategoryId }
637638
).FirstOrDefault();
638639
}
639640
public DelegateSelfAssessment? GetSelfAssessmentBySupervisorDelegateCandidateAssessmentId(int candidateAssessmentId, int supervisorDelegateId)
@@ -696,23 +697,24 @@ FROM SelfAssessmentResults AS sar2
696697
{
697698
return connection.Query<DelegateSelfAssessment>(
698699
@$"SELECT ca.ID, sa.ID AS SelfAssessmentID, sa.Name AS RoleName, sa.SupervisorSelfAssessmentReview, sa.SupervisorResultsReview, sa.ReviewerCommentsLabel, COALESCE (sasr.RoleName, 'Supervisor') AS SupervisorRoleTitle, ca.StartedDate, ca.LastAccessed, ca.CompleteByDate, ca.LaunchCount, ca.CompletedDate, r.RoleProfile, sg.SubGroup, pg.ProfessionalGroup, sa.SupervisorResultsReview AS IsSupervisorResultsReviewed,
699-
(SELECT COUNT(*) AS Expr1
700-
FROM CandidateAssessmentSupervisorVerifications AS casv
701-
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Requested IS NOT NULL) AND (Verified IS NULL)) AS SignOffRequested,
702-
{signedOffFields}
703-
(SELECT COUNT(*) AS Expr1
704-
FROM SelfAssessmentResultSupervisorVerifications AS sarsv
705-
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Verified IS NULL) AND (Superceded = 0)) AS ResultsVerificationRequests,
706-
ca.NonReportable,ca.DelegateUserID
700+
(SELECT COUNT(*) AS Expr1
701+
FROM CandidateAssessmentSupervisorVerifications AS casv
702+
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Requested IS NOT NULL) AND (Verified IS NULL)) AS SignOffRequested,
703+
{signedOffFields}
704+
(SELECT COUNT(*) AS Expr1
705+
FROM SelfAssessmentResultSupervisorVerifications AS sarsv
706+
WHERE (CandidateAssessmentSupervisorID = cas.ID) AND (Verified IS NULL) AND (Superceded = 0)) AS ResultsVerificationRequests,
707+
ca.NonReportable,ca.DelegateUserID,
708+
sa.Vocabulary
707709
FROM CandidateAssessmentSupervisors AS cas INNER JOIN
708-
CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN
709-
SelfAssessments AS sa ON sa.ID = ca.SelfAssessmentID INNER JOIN
710-
SupervisorDelegates AS sd ON cas.SupervisorDelegateId = sd.ID LEFT OUTER JOIN
711-
NRPProfessionalGroups AS pg ON sa.NRPProfessionalGroupID = pg.ID LEFT OUTER JOIN
712-
NRPSubGroups AS sg ON sa.NRPSubGroupID = sg.ID LEFT OUTER JOIN
713-
NRPRoles AS r ON sa.NRPRoleID = r.ID
714-
LEFT OUTER JOIN SelfAssessmentSupervisorRoles AS sasr ON cas.SelfAssessmentSupervisorRoleID = sasr.ID
715-
WHERE (ca.ID = @candidateAssessmentId) AND (cas.Removed IS NULL) AND (sd.SupervisorAdminID = @adminId) AND (ISNULL(@adminIdCategoryID, 0) = 0 OR sa.CategoryID = @adminIdCategoryId)",
710+
CandidateAssessments AS ca ON cas.CandidateAssessmentID = ca.ID INNER JOIN
711+
SelfAssessments AS sa ON sa.ID = ca.SelfAssessmentID INNER JOIN
712+
SupervisorDelegates AS sd ON cas.SupervisorDelegateId = sd.ID LEFT OUTER JOIN
713+
NRPProfessionalGroups AS pg ON sa.NRPProfessionalGroupID = pg.ID LEFT OUTER JOIN
714+
NRPSubGroups AS sg ON sa.NRPSubGroupID = sg.ID LEFT OUTER JOIN
715+
NRPRoles AS r ON sa.NRPRoleID = r.ID
716+
LEFT OUTER JOIN SelfAssessmentSupervisorRoles AS sasr ON cas.SelfAssessmentSupervisorRoleID = sasr.ID
717+
WHERE (ca.ID = @candidateAssessmentId) AND (cas.Removed IS NULL) AND (sd.SupervisorAdminID = @adminId) AND (ISNULL(@adminIdCategoryID, 0) = 0 OR sa.CategoryID = @adminIdCategoryId)",
716718
new { candidateAssessmentId, adminId, adminIdCategoryId }
717719
).FirstOrDefault();
718720
}
@@ -941,18 +943,45 @@ FROM CandidateAssessmentSupervisors
941943

942944
if (candidateAssessmentSupervisorsId == 0)
943945
{
946+
//For a candidate assessment, only one supervisor role should be active (Removed = null)
944947
var numberOfAffectedRows = connection.Execute(
945-
@"INSERT INTO CandidateAssessmentSupervisors (CandidateAssessmentID, SupervisorDelegateId, SelfAssessmentSupervisorRoleID)
946-
VALUES (@candidateAssessmentId, @supervisorDelegateId, @selfAssessmentSupervisorRoleId)", new { candidateAssessmentId, supervisorDelegateId, selfAssessmentSupervisorRoleId }
948+
@"BEGIN TRY
949+
BEGIN TRANSACTION
950+
UPDATE CandidateAssessmentSupervisors SET Removed = getUTCDate() WHERE CandidateAssessmentID = @candidateAssessmentId
951+
AND SupervisorDelegateId = @supervisorDelegateId
952+
AND Removed IS NULL
953+
954+
INSERT INTO CandidateAssessmentSupervisors (CandidateAssessmentID, SupervisorDelegateId, SelfAssessmentSupervisorRoleID)
955+
VALUES (@candidateAssessmentId, @supervisorDelegateId, @selfAssessmentSupervisorRoleId)
956+
957+
COMMIT TRANSACTION
958+
END TRY
959+
BEGIN CATCH
960+
ROLLBACK TRANSACTION
961+
END CATCH",
962+
new { candidateAssessmentId, supervisorDelegateId, selfAssessmentSupervisorRoleId }
947963
);
948964
}
949965
else
950966
{
967+
//For a candidate assessment, only one supervisor role should be active (Removed = null)
951968
int numberOfAffectedRows = connection.Execute(
952-
@"UPDATE CandidateAssessmentSupervisors SET Removed = NULL WHERE CandidateAssessmentID = @candidateAssessmentId
953-
AND SupervisorDelegateId = @supervisorDelegateId
954-
AND SelfAssessmentSupervisorRoleId=@selfAssessmentSupervisorRoleId",
955-
new { candidateAssessmentId, supervisorDelegateId, selfAssessmentSupervisorRoleId });
969+
@"BEGIN TRY
970+
BEGIN TRANSACTION
971+
UPDATE CandidateAssessmentSupervisors SET Removed = getUTCDate() WHERE CandidateAssessmentID = @candidateAssessmentId
972+
AND SupervisorDelegateId = @supervisorDelegateId
973+
AND Removed IS NULL
974+
975+
UPDATE CandidateAssessmentSupervisors SET Removed = NULL WHERE CandidateAssessmentID = @candidateAssessmentId
976+
AND SupervisorDelegateId = @supervisorDelegateId
977+
AND SelfAssessmentSupervisorRoleId = @selfAssessmentSupervisorRoleId
978+
979+
COMMIT TRANSACTION
980+
END TRY
981+
BEGIN CATCH
982+
ROLLBACK TRANSACTION
983+
END CATCH",
984+
new { candidateAssessmentId, supervisorDelegateId, selfAssessmentSupervisorRoleId });
956985
}
957986
}
958987
return candidateAssessmentId;
@@ -966,9 +995,6 @@ BEGIN TRANSACTION
966995
UPDATE CandidateAssessments SET RemovedDate = getUTCDate(), RemovalMethodID = 2
967996
WHERE ID = @candidateAssessmentId AND RemovedDate IS NULL
968997
969-
UPDATE CandidateAssessmentSupervisors SET Removed = getUTCDate()
970-
WHERE CandidateAssessmentID = @candidateAssessmentId AND Removed IS NULL
971-
972998
COMMIT TRANSACTION
973999
END TRY
9741000
BEGIN CATCH

DigitalLearningSolutions.Data/DigitalLearningSolutions.Data.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<PackageReference Include="Dapper" Version="2.1.24" />
1515
<PackageReference Include="Dapper.FluentMap" Version="2.0.0" />
1616
<PackageReference Include="elfhHub.Nhs.Models" Version="3.0.8" />
17-
<PackageReference Include="Freshdesk.Api" Version="0.13.6" />
17+
<PackageReference Include="Freshdesk.Api" Version="0.17.2" />
1818
<PackageReference Include="FuzzySharp" Version="2.0.2" />
1919
<PackageReference Include="MailKit" Version="4.3.0" />
2020
<PackageReference Include="Microsoft.FeatureManagement.AspNetCore" Version="2.0.0" />

DigitalLearningSolutions.Data/Models/Supervisor/DelegateSelfAssessment.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ public class DelegateSelfAssessment
2828
public bool IsSupervisorResultsReviewed { get; set; }
2929
public bool IsAssignedToSupervisor { get; set; }
3030
public bool NonReportable { get; set; }
31+
public string? Vocabulary { get; set; }
3132
}
3233
}

DigitalLearningSolutions.Web.Tests/Controllers/TrackingSystem/Delegates/PromoteToAdminControllerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public void Summary_post_registers_delegate_with_expected_values()
9494
A<string>._, A<string>._, A<string>._, A<string>._,
9595
A<bool>._, A<bool>._, A<bool>._, A<bool>._,
9696
A<bool>._, A<bool>._, A<bool>._, A<bool>._,
97-
A<string>._, A<string>._
97+
A<string>._, A<string>._, A<string>._
9898
)).Returns(adminRolesEmail);
9999

100100
// When

DigitalLearningSolutions.Web.Tests/Services/EmailGenerationServiceTests.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ bool isCmsManager
4545
const string supervisorFirstName = "TestAdminFirstName";
4646
const string supervisorLastName = "TestAdminFirstName";
4747
const string supervisorEmail = "[email protected]";
48+
const string categoryName = "Digital Workplace";
4849

4950
const string centreName = "Test Centre Name";
5051

@@ -65,7 +66,8 @@ bool isCmsManager
6566
isCmsAdministrator,
6667
isCmsManager,
6768
delegateEmail,
68-
centreName
69+
centreName,
70+
categoryName
6971
);
7072

7173
// Then
@@ -164,6 +166,11 @@ bool isCmsManager
164166
returnedEmail.Body.HtmlBody.Should().NotContain("<li>CMS manager</li>");
165167
returnedEmail.Body.TextBody.Should().NotContain("CMS manager");
166168
}
169+
if (!string.IsNullOrEmpty(categoryName))
170+
{
171+
returnedEmail.Body.HtmlBody.Should().Contain("In the Digital Workplace category.");
172+
returnedEmail.Body.TextBody.Should().Contain("In the Digital Workplace category.");
173+
}
167174

168175
returnedEmail.Body.HtmlBody.Should().Contain("the next time you log in to " + centreName + ".</body>");
169176
returnedEmail.Body.TextBody.Should().Contain("the next time you log in to " + centreName + ".");

0 commit comments

Comments
 (0)