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
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 @@ -1530,6 +1530,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
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 @@ -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 @@ -36,6 +36,11 @@
<dd class="nhsuk-summary-list__value">
@Model.CompetencyAssessmentName
</dd>
@if (Model.SelfAssessmentReviewID != null && Model.SelfAssessmentCommentID is null)
{
<dd class="nhsuk-summary-list__actions">
</dd>
}
<dd class="nhsuk-summary-list__actions">
<a asp-action="CompetencyAssessmentName" asp-route-actionName="Edit" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Change<span class="nhsuk-u-visually-hidden"> assessment name</span>
Expand All @@ -51,14 +56,16 @@
@(Model.PublishStatusID == 1 ? "Draft" : Model.PublishStatusID == 2 ? "In review" : "Published")
</strong>
</dd>
<dd class="nhsuk-summary-list__actions">
@if (Model.SelfAssessmentReviewID != null && Model.SelfAssessmentCommentID is null)
{
@if (Model.SelfAssessmentReviewID != null && Model.SelfAssessmentCommentID is null)
{
<dd class="nhsuk-summary-list__actions">

<a asp-action="SubmitReview" asp-route-selfAssessmentReviewId="@Model.SelfAssessmentReviewID" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Submit my review<span class="nhsuk-u-visually-hidden"> review</span>
</a>
}
</dd>

</dd>
}
@if (Model.HasCompetencies)
{
<dd class="nhsuk-summary-list__actions">
Expand All @@ -73,7 +80,7 @@
<ul class="nhsuk-task-list nhsuk-u-margin-bottom-0">
<li class="nhsuk-task-list__item nhsuk-task-list__item--with-link">
<div class="nhsuk-task-list__name-and-hint" aria-describedby="select-frameworks-status">
<a class="nhsuk-link nhsuk-task-list__link" asp-action="SelectFrameworkSources" asp-route-actionName="@(Model.CompetencyAssessmentTaskStatus.FrameworkLinksTaskStatus == null ? "AddFramework" : "Summary" )" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
<a class="nhsuk-link nhsuk-task-list__link" asp-action="SelectFrameworkSources" asp-route-actionName="@(Model.CompetencyAssessmentTaskStatus.FrameworkLinksTaskStatus == null ? "AddFramework" : "Summary")" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Select (@Model.VocabularySingular) framework sources
</a>
</div>
Expand Down Expand Up @@ -221,49 +228,52 @@
<partial name="Shared/_TaskStatusTag" model="@Model.CompetencyAssessmentTaskStatus.SelfAssessmentOptionsTaskStatus" />
</div>
</li>
<li class="nhsuk-task-list__item">
@if (Model.PublishStatusID != 3)
{
<li class="nhsuk-task-list__item">

@if (Model.CompetencyAssessmentTaskStatus.IntroductoryTextTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.BrandingTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.VocabularyTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.WorkingGroupTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.NationalRoleProfileTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.FrameworkLinksTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.SelectCompetenciesTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.OptionalCompetenciesTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.RoleRequirementsTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.SupervisorRolesTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.SelfAssessmentOptionsTaskStatus != true)
{
<div class="nhsuk-task-list__name-and-hint" aria-describedby="review-status">
<div>
Send for review
</div>
</div>
<div class="nhsuk-task-list__status nhsuk-task-list__status--cannot-start-yet" id="review-status">
Cannot start yet
</div>
}
else
{
<div class="nhsuk-task-list__name-and-hint" aria-describedby="review-status">
@if (Model.PublishStatusID == 1)
{
<a class="nhsuk-link nhsuk-task-list__link" asp-action="SendForReview" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
@if (Model.CompetencyAssessmentTaskStatus.IntroductoryTextTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.BrandingTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.VocabularyTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.WorkingGroupTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.NationalRoleProfileTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.FrameworkLinksTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.SelectCompetenciesTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.OptionalCompetenciesTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.RoleRequirementsTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.SupervisorRolesTaskStatus != true ||
Model.CompetencyAssessmentTaskStatus.SelfAssessmentOptionsTaskStatus != true)
{
<div class="nhsuk-task-list__name-and-hint" aria-describedby="review-status">
<div>
Send for review
</a>
}
else
{
<a class="nhsuk-link nhsuk-task-list__link" asp-action="PublishReview" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Review and publish
</a>
}
</div>
<div class="nhsuk-task-list__status" id="review-status">
<partial name="Shared/_TaskStatusTag" model="@Model.CompetencyAssessmentTaskStatus.ReviewTaskStatus" />
</div>
}
</li>
</div>
</div>
<div class="nhsuk-task-list__status nhsuk-task-list__status--cannot-start-yet" id="review-status">
Cannot start yet
</div>
}
else
{
<div class="nhsuk-task-list__name-and-hint" aria-describedby="review-status">
@if (Model.PublishStatusID == 1)
{
<a class="nhsuk-link nhsuk-task-list__link" asp-action="SendForReview" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Send for review
</a>
}
else
{
<a class="nhsuk-link nhsuk-task-list__link" asp-action="PublishReview" asp-route-competencyAssessmentId="@ViewContext.RouteData.Values["competencyAssessmentId"]">
Review and publish
</a>
}
</div>
<div class="nhsuk-task-list__status" id="review-status">
<partial name="Shared/_TaskStatusTag" model="@Model.CompetencyAssessmentTaskStatus.ReviewTaskStatus" />
</div>
}
</li>
}
</ul>
</div>
6 changes: 3 additions & 3 deletions DigitalLearningSolutions.Web/Views/Frameworks/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,23 @@
</nav>
}
<h1>Frameworks Dashboard</h1>
<p class="nhsuk-body-m">Welcome <span class="nhsuk-u-font-weight-bold">@Model.Username</span>. You are accessing as a <span class="nhsuk-u-font-weight-bold">@(Model.IsFrameworkDeveloper ? "Framework Developer" : Model.IsFrameworkContributor ? "Framework Contributor" : "Framework Viewer")</span><feature name="@(FeatureFlags.WorkforceManagerInterface)"> and a <span class="nhsuk-u-font-weight-bold">@(Model.IsWorkforceManager | Model.IsFrameworkDeveloper ? "Self Assessment Developer" : "Self Assessment Viewer")</span></feature>.</p>
<p class="nhsuk-body-m">Welcome <span class="nhsuk-u-font-weight-bold">@Model.Username</span>. You are accessing as a <span class="nhsuk-u-font-weight-bold">@(Model.IsFrameworkDeveloper ? "Framework Developer" : Model.IsFrameworkContributor ? "Framework Contributor" : "Framework Viewer")</span><feature name="@(FeatureFlags.WorkforceManagerInterface)"> and a <span class="nhsuk-u-font-weight-bold">@(Model.IsWorkforceManager | Model.IsFrameworkDeveloper ? "Self Assessment Developer" : "Self Assessment Viewer")</span></feature>.</p>
<h2>Your to do list</h2>
@if (Model.DashboardToDoItems.Count() > 0)
{
<ul class="nhsuk-contents-list__list">
@foreach (var toDoItem in Model.DashboardToDoItems)
{
<li class="nhsuk-contents-list__item">
@if (toDoItem.FrameworkID != null)
@if (toDoItem.FrameworkID != 0)
{
<a class="nhsuk-contents-list__link nhsuk-link--no-visited-state" asp-controller="Frameworks" asp-route-tabname="Structure" asp-route-frameworkId="@toDoItem.FrameworkID" asp-action="ViewFramework">
@(toDoItem.SignOffRequired ? "Approve " : "Review ") @toDoItem.ItemName for @toDoItem.RequestorName (requested @toDoItem.Requested.ToShortDateString())
</a>
}
else
{
<a class="nhsuk-contents-list__link nhsuk-link--no-visited-state" asp-controller="CompetencyAssessments" asp-route-competencyAssessmentId="@toDoItem.CompetencyAssessmentID" asp-action="ViewCompetencyAssessment">
<a class="nhsuk-contents-list__link nhsuk-link--no-visited-state" asp-controller="CompetencyAssessments" asp-route-competencyAssessmentId="@toDoItem.CompetencyAssessmentID" asp-action="ManageCompetencyAssessment">
@(toDoItem.SignOffRequired ? "Approve " : "Review ") @toDoItem.ItemName for @toDoItem.RequestorName (requested @toDoItem.Requested.ToShortDateString())
</a>
}
Expand Down
Loading