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
Expand Up @@ -183,7 +183,7 @@ FROM NRPRoles

private const string SelfAssessmentBaseTables =
@"SelfAssessments AS sa LEFT OUTER JOIN
SelfAssessmentCollaborators AS sac ON sac.SelfAssessmentID = sa.ID AND sac.AdminID = @adminId";
SelfAssessmentCollaborators AS sac ON sac.SelfAssessmentID = sa.ID AND sac.AdminID = @adminId AND sac.IsDeleted = 0";

private const string SelfAssessmentTables =
@" LEFT OUTER JOIN
Expand Down Expand Up @@ -1177,10 +1177,14 @@ public void RemoveCollaboratorFromCompetencyAssessment(int competencyAssessmentI
CASE WHEN sc.CanModify = 1 THEN 'Contributor' ELSE 'Reviewer' END AS CompetencyAssessmentRole,
sa.[Name] AS CompetencyAssessmentName,
(SELECT Forename + ' ' + Surname + (CASE WHEN Active = 1 THEN '' ELSE ' (Inactive)' END) AS Expr1 FROM AdminUsers AS au1 WHERE (AdminID = @invitedByAdminId)) AS InvitedByName,
(SELECT Email FROM AdminUsers AS au2 WHERE (AdminID = @invitedByAdminId)) AS InvitedByEmail
(SELECT Email FROM AdminUsers AS au2 WHERE (AdminID = @invitedByAdminId)) AS InvitedByEmail,
sr.ID AS SelfAssessmentReviewID
FROM SelfAssessmentCollaborators AS sc
INNER JOIN SelfAssessments AS sa ON sc.SelfAssessmentID = sa.ID
INNER JOIN AdminUsers AS au ON sc.AdminID = au.AdminID
INNER JOIN SelfAssessments AS sa ON sc.SelfAssessmentID = sa.ID
INNER JOIN AdminUsers AS au ON sc.AdminID = au.AdminID
LEFT JOIN SelfAssessmentReviews AS sr
ON sr.SelfAssessmentID = sa.ID AND sr.SelfAssessmentCollaboratorID = sc.ID
AND sr.ReviewComplete IS NULL AND sr.Archived IS NULL
WHERE (sc.ID = @id) AND (sc.IsDeleted=0)",
new { invitedByAdminId, id }
).FirstOrDefault();
Expand Down Expand Up @@ -1488,8 +1492,10 @@ INNER JOIN AdminUsers au
ON fc.AdminID = au.AdminID
WHERE fc.FrameworkID = @frameworkId
AND fc.IsDeleted = 0
AND fc.AdminID NOT IN (SELECT AdminID FROM SelfAssessmentCollaborators WHERE SelfAssessmentID = @selfAssessmentId AND IsDeleted = 0)
AND fc.AdminID NOT IN (SELECT CreatedByAdminId FROM SelfAssessmentFrameworks WHERE SelfAssessmentId = @selfAssessmentId AND FrameworkID = @frameworkId AND RemovedDate IS NULL);",
AND NOT EXISTS (SELECT 1 FROM AdminAccounts AS aa JOIN SelfAssessmentCollaborators AS sac ON sac.AdminID = aa.ID
WHERE aa.UserID = au.AdminUserID AND sac.SelfAssessmentID = @selfAssessmentId AND sac.IsDeleted = 0)
AND NOT EXISTS (SELECT 1 FROM AdminAccounts AS aa JOIN SelfAssessments AS sa ON sa.CreatedByAdminID = aa.ID
WHERE aa.UserID = au.AdminUserID AND sa.ID = @selfAssessmentId);",
new { selfAssessmentId, frameworkId }
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2284,7 +2284,7 @@ FROM FrameworkCollaborators
(SELECT COUNT(*) FROM SelfAssessments) AS CompetencyAssessmentCount,

(SELECT COUNT(*) FROM SelfAssessments AS RP LEFT OUTER JOIN
SelfAssessmentCollaborators AS RPC ON RPC.SelfAssessmentID = RP.ID AND RPC.AdminID = @adminId
SelfAssessmentCollaborators AS RPC ON RPC.SelfAssessmentID = RP.ID AND RPC.AdminID = @adminId AND RPC.IsDeleted = 0
WHERE (RP.CreatedByAdminID = @adminId) OR
(@adminId IN
(SELECT AdminID
Expand All @@ -2299,7 +2299,7 @@ public IEnumerable<DashboardToDoItem> GetDashboardToDoItems(int adminId)
return connection.Query<DashboardToDoItem>(
@"SELECT
FW.ID AS FrameworkID,
0 AS SelfAssessmentID,
0 AS CompetencyAssessmentID,
FW.FrameworkName AS ItemName,
AU.Forename + ' ' + AU.Surname + (CASE WHEN AU.Active = 1 THEN '' ELSE ' (Inactive)' END) AS RequestorName,
FWR.SignOffRequired,
Expand All @@ -2319,7 +2319,7 @@ UNION ALL
RPR.ReviewRequested AS Requested
FROM SelfAssessmentReviews AS RPR
INNER JOIN SelfAssessments AS RP ON RPR.SelfAssessmentID = RP.ID
INNER JOIN SelfAssessmentCollaborators AS RPC ON RPR.SelfAssessmentCollaboratorID = RPC.ID
INNER JOIN SelfAssessmentCollaborators AS RPC ON RPR.SelfAssessmentCollaboratorID = RPC.ID AND RPC.IsDeleted = 0
INNER JOIN AdminUsers AS AU ON RP.CreatedByAdminID = AU.AdminID
WHERE (RPC.AdminID = @adminId) AND (RPR.ReviewComplete IS NULL) AND (RPR.Archived IS NULL)",
new { adminId }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ public IActionResult EditRoleProfileLinks(int competencyAssessmentId = 0, string
{
competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
}
if (competencyAssessmentBase.UserRole < 2) actionName = "Summary";
var professionalGroups = competencyAssessmentService.GetNRPProfessionalGroups();
var subGroups = competencyAssessmentService.GetNRPSubGroups(competencyAssessmentBase.NRPProfessionalGroupID);
var roles = competencyAssessmentService.GetNRPRoles(competencyAssessmentBase.NRPSubGroupID);
Expand Down Expand Up @@ -878,7 +879,8 @@ public IActionResult AssessmentWorkingGroup(int competencyAssessmentId, string a
CompetencyAssessmentTaskStatus = taskStatus.WorkingGroupTaskStatus,
UserEmail = null,
Error = false,
ActionName = actionName
ActionName = actionName,
UserRole = competencyAssessmentBase.UserRole
};
if (TempData["CompetencyAssessmentError"] != null)
{
Expand Down Expand Up @@ -955,14 +957,15 @@ public IActionResult ConfigureOptions(int competencyAssessmentId)
data.ReviewerCommentsLabelText = competencyAssessmentBase.ReviewerCommentsLabel?.Trim();
data.IsSupervisionSwitchedOn = competencyAssessmentBase.SupervisorSelfAssessmentReview && competencyAssessmentBase.SupervisorResultsReview;
data.IsSignpostedLearning = competencyAssessmentService.HasCompetencyWithSignpostedLearning(competencyAssessmentId);
data.UserRole = competencyAssessmentBase.UserRole;

var taskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, null);
data.SelfAssessmentOptionsTaskStatus = taskStatus.SelfAssessmentOptionsTaskStatus;

SetOptionsLabelsData(data);

var step = (int)OptionLabel.Declaration;
if (taskStatus.SelfAssessmentOptionsTaskStatus != null)
if (taskStatus.SelfAssessmentOptionsTaskStatus != null || competencyAssessmentBase.UserRole < 2)
step = (int)OptionLabel.Summary;

ValidateStep(data, ref step);
Expand All @@ -980,6 +983,10 @@ public IActionResult OptionsLabels(int competencyAssessmentId, int step)
if (result.StatusCode != 200)
return result;

var competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(competencyAssessmentId, adminId);
if (competencyAssessmentBase.UserRole < 2)
step = (int)OptionLabel.Summary;

var data = GetOptionsLabelslData();

if (ValidateStep(data, ref step))
Expand Down Expand Up @@ -1223,12 +1230,13 @@ public IActionResult SupervisorRoles(int competencyAssessmentId)
competencyAssessmentBase.SignOffSupervisorStatement,
competencyAssessmentBase.SignOffRequestorStatement,
this.config.GetLearnerDefaultText(),
this.config.GetSupervisorDefaultText());
this.config.GetSupervisorDefaultText(),
competencyAssessmentBase.UserRole);

SetManagesupervisionData(model);

var competencyAssessmentTaskStatus = competencyAssessmentService.GetCompetencyAssessmentTaskStatus(competencyAssessmentId, null);
if (competencyAssessmentTaskStatus.SupervisorRolesTaskStatus != null)
if (competencyAssessmentTaskStatus.SupervisorRolesTaskStatus != null || competencyAssessmentBase.UserRole < 2)
return RedirectToAction("ManageSupervisionSettings", "CompetencyAssessments",
new
{
Expand Down Expand Up @@ -1428,17 +1436,20 @@ public IActionResult ManageSupervisionSettings(int competencyAssessmentId, strin
if (actionName == "SupervisorRoles")
{
var model = new ManagesupervisionViewModel(competencyAssessmentId, baseData.CompetencyAssessmentName,
baseData.SupervisorResultsReview,
baseData.SupervisorSelfAssessmentReview,
baseData.SignOffSupervisorStatement,
baseData.SignOffRequestorStatement,
this.config.GetLearnerDefaultText(),
this.config.GetSupervisorDefaultText());
baseData.SupervisorResultsReview,
baseData.SupervisorSelfAssessmentReview,
baseData.SignOffSupervisorStatement,
baseData.SignOffRequestorStatement,
this.config.GetLearnerDefaultText(),
this.config.GetSupervisorDefaultText(),
baseData.UserRole);

model.TaskCompleteChecked = competencyAssessmentTaskStatus.SupervisorRolesTaskStatus;
SetManagesupervisionData(model);
return View(model);
}
var data = GetManagesupervisionData();
data.UserRole = baseData.UserRole;
var dataModel = new ManagesupervisionViewModel(competencyAssessmentId, data, this.config.GetLearnerDefaultText(), this.config.GetSupervisorDefaultText());
dataModel.TaskCompleteChecked = competencyAssessmentTaskStatus.SupervisorRolesTaskStatus;
return View(dataModel);
Expand Down Expand Up @@ -1530,6 +1541,10 @@ public IActionResult PublishWithoutReview(int competencyAssessmentId)
[Route("/CompetencyAssessments/{competencyAssessmentId}/PublishWithoutReview")]
public IActionResult PublishWithoutReview(PublishWithoutReviewViewModel publish)
{
if (!ModelState.IsValid)
{
return View(publish);
}
var adminId = GetAdminID();
var competencyAssessmentBase = competencyAssessmentService.GetCompetencyAssessmentBaseById(publish.CompetencyAssessmentID, adminId);
var result = ValidateCompetencyAssessmentAndRole(publish.CompetencyAssessmentID, adminId, "Publish Without Review", competencyAssessmentBase);
Expand Down Expand Up @@ -1781,10 +1796,6 @@ private StatusCodeResult ValidateCompetencyAssessmentAndRole(int competencyAsses
logger.LogWarning($"Failed to load {pageName} page for competencyAssessmentId: {competencyAssessmentId} adminId: {adminId}");
return StatusCode(500);
}
if (competencyAssessmentBase.UserRole < 2)
{
return StatusCode(403);
}
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ public void SendReviewRequestForCompetencyAssessment(int id, int invitedByAdminI
{
throw new NotificationDataException($"No record found when trying to fetch collaboratorNotification Data. id: {id}, invitedByAdminId: {invitedByAdminId}");
}
var competencyAssessmentUrl = GetCompetencyAssessmentUrl(collaboratorNotification.SelfAssessmentID, "Review");
var competencyAssessmentUrl = GetCompetencyAssessmentUrl(collaboratorNotification.SelfAssessmentID, "Review", collaboratorNotification.SelfAssessmentReviewID);
string emailSubjectLine = (reminder ? " REMINDER: " : "") + "Competency Assessment Review Request - Digital Learning Solutions";
string signOffRequired = required ? "You are required to sign-off this competency assessment before it can be published." : "You are not required to sign-off this competency assessment before it is published.";
var builder = new BodyBuilder
Expand All @@ -168,10 +168,13 @@ public string GetFrameworkUrl(int frameworkId, string tab)
frameworkUrl.Path += $"Framework/{frameworkId}/{tab}/";
return frameworkUrl.Uri.ToString();
}
public string GetCompetencyAssessmentUrl(int selfAssessmentID, string actionName)
public string GetCompetencyAssessmentUrl(int selfAssessmentID, string actionName, int? id = null)
{
var competencyAssessmentUrl = GetDLSUriBuilder();
competencyAssessmentUrl.Path += $"CompetencyAssessments/{selfAssessmentID}/{actionName}";

competencyAssessmentUrl.Path += id != null
? $"CompetencyAssessments/{selfAssessmentID}/{id}/{actionName}"
: $"CompetencyAssessments/{selfAssessmentID}/{actionName}";
return competencyAssessmentUrl.Uri.ToString();
}
public string GetCurrentActivitiesUrl()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,16 @@ public ManagesupervisionViewModel(int competencyAssessmentId,
SupervisorDeclaration.DefaultText = supervisorDefaultText.Replace("{{CompetencyAssessmentName}}", CompetencyAssessmentName);
LearnerDeclaration = model.LearnerDeclaration;
LearnerDeclaration.DefaultText = learnerDefaultText.Replace("{{CompetencyAssessmentName}}", CompetencyAssessmentName);
UserRole = model.UserRole;
}
public ManagesupervisionViewModel(int competencyAssessmentId, string competencyAssessmentName,
bool supervisorResultsReview,
bool SupervisorSelfAssessmentReview,
string? signOffSupervisorStatement,
string? signOffRequestorStatement,
string learnerDefaultText,
string supervisorDefaultText)
bool supervisorResultsReview,
bool SupervisorSelfAssessmentReview,
string? signOffSupervisorStatement,
string? signOffRequestorStatement,
string learnerDefaultText,
string supervisorDefaultText,
int userRole)
{
CompetencyAssessmentId = competencyAssessmentId;
CompetencyAssessmentName = competencyAssessmentName;
Expand All @@ -58,13 +60,15 @@ public ManagesupervisionViewModel(int competencyAssessmentId, string competencyA
LearnerDeclaration.DefaultText = learnerDefaultText.Replace("{{CompetencyAssessmentName}}", CompetencyAssessmentName);
LearnerDeclaration.CompetencyAssessmentName = competencyAssessmentName;
LearnerDeclaration.CompetencyAssessmentId = competencyAssessmentId;
UserRole = userRole;
}
public SupervisedSelfAssessmentSignoffViewModel Signoff { get; set; } = new SupervisedSelfAssessmentSignoffViewModel();
public SupervisorSignoffDeclarationViewModel SupervisorDeclaration { get; set; } = new SupervisorSignoffDeclarationViewModel();
public LearnerSignoffDeclarationViewModel LearnerDeclaration { get; set; } = new LearnerSignoffDeclarationViewModel();
public bool? TaskCompleteChecked { get; set; }
public int CompetencyAssessmentId { get; set; }
public string CompetencyAssessmentName { get; set; } = string.Empty;
public int UserRole { get; set; }

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public OptionsLabelsViewModel(OptionsLabelsViewModel optionsLabels)
SelfAssessmentOptionsTaskStatus = optionsLabels.SelfAssessmentOptionsTaskStatus;
IsSupervisionSwitchedOn = optionsLabels.IsSupervisionSwitchedOn;
IsSignpostedLearning = optionsLabels.IsSignpostedLearning;
UserRole = optionsLabels.UserRole;
}

public int FrameworkId { get; set; }
Expand All @@ -47,7 +48,8 @@ public OptionsLabelsViewModel(OptionsLabelsViewModel optionsLabels)
public string? Vocabulary { get; set; }
public bool? SelfAssessmentOptionsTaskStatus { get; set; }
public bool Error { get; set; }

public int UserRole { get; set; }

}
public enum OptionLabel
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public PublishReviewViewModel(int competencyAssessmentID, string competencyAsses
CompetencyAssessmentName = competencyAssessmentName;
SelfAssessmentReviews = selfAssessmentReviews;
CompetencyAssessmentBase = competencyAssessmentBase;
CanPublish = selfAssessmentReviews?.All(x => x.SignedOff) ?? true;
CanPublish = selfAssessmentReviews?.Where(x => x.SignOffRequired).All(x => x.SignedOff) ?? true;
}
public int CompetencyAssessmentID { get; set; }
public string CompetencyAssessmentName { get; set; } = string.Empty;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class WorkingGroupCollaboratorsViewModel
public string? UserEmail { get; set; }
public bool Error { get; set; }
public string? ActionName { get; set; }
public int UserRole { get; set; }

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,8 @@
<span nhs-validation-for="FrameworkId"></span>
</div>
<input type="hidden" asp-for="@Model.ID" />
<button type="submit" class="nhsuk-button">Next</button>
@if (Model.UserRole > 1)
{
<button type="submit" class="nhsuk-button">Next</button>
}
</form>
Loading
Loading