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
2 changes: 1 addition & 1 deletion LearningHub.Nhs.WebUI/Styles/nhsuk/pages/dashboard.scss
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
.course-card {
border: 1px solid #d8dde0;
border-radius: 8px;
box-shadow: 2px 2px 0 #1C366A;
box-shadow: 5px 5px 0 #1C366A;
}

.dashboard-card-content {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
case "in-progress":
return "In Progress";
case "my-recent-completed":
return "Recently Completed";
return "Recently completed";
case "my-certificates":
return "Certificates";
case "my-catalogues":
Expand Down Expand Up @@ -55,7 +55,7 @@
</li>
<li class="subnavwhite-item nhsuk-bg-grey @(Model.MyLearnings.Type == "my-recent-completed" ? "active" : string.Empty)">
<a tabindex="0" class="subnavwhite-link text-nowrap"
asp-controller="Home" asp-action="Index" asp-route-myLearningDashboard="my-recent-completed" asp-route-resourceDashboard="@(Model.Resources.Type)" asp-route-catalogueDashboard="@Model.Catalogues.Type" asp-fragment="my-learning">Recently Completed</a>
asp-controller="Home" asp-action="Index" asp-route-myLearningDashboard="my-recent-completed" asp-route-resourceDashboard="@(Model.Resources.Type)" asp-route-catalogueDashboard="@Model.Catalogues.Type" asp-fragment="my-learning">Recently completed</a>
</li>
<li class="subnavwhite-item nhsuk-bg-grey @(Model.MyLearnings.Type == "my-certificates" ? "active" : string.Empty)">
<a tabindex="0" class="subnavwhite-link text-nowrap"
Expand Down
4 changes: 2 additions & 2 deletions LearningHub.Nhs.WebUI/Views/Home/_ResourceTray.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
return "Most accessed";
case "my-recent-completed":
default:
return "Recently Completed";
return "Recently completed";
}
}
var pagingViewModel = new DashBoardPagingViewModel
Expand Down Expand Up @@ -48,7 +48,7 @@
<ul class="navbar-nav">
<li class="subnavwhite-item nhsuk-bg-grey @(Model.Resources.Type == "my-recent-completed" ? "active" : string.Empty)">
<a tabindex="0" class="subnavwhite-link text-nowrap"
asp-controller="Home" asp-action="Index" asp-route-myLearningDashboard="@(Model.MyLearnings.Type)" asp-route-resourceDashboard="my-recent-completed" asp-route-catalogueDashboard="@Model.Catalogues.Type" asp-fragment="resources">Recently Completed</a>
asp-controller="Home" asp-action="Index" asp-route-myLearningDashboard="@(Model.MyLearnings.Type)" asp-route-resourceDashboard="my-recent-completed" asp-route-catalogueDashboard="@Model.Catalogues.Type" asp-fragment="resources">Recently completed</a>
</li>
<li class="subnavwhite-item nhsuk-bg-grey @(Model.Resources.Type == "rated-resources" ? "active" : string.Empty)">
<a tabindex="0" class="subnavwhite-link text-nowrap"
Expand Down
8 changes: 7 additions & 1 deletion LearningHub.Nhs.WebUI/Views/MyLearning/Index.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,13 @@
<div class="nhs-progress-bar" style="width: @(activity.ScorePercentage)%"></div>
</div>
}

else @if (ViewActivityHelper.CanViewVidoProgress(activity))
{
<div class="nhsuk-u-padding-top-1">
@activity.CompletionPercentage% complete
<a asp-controller="MyLearning" asp-action="ViewProgress" asp-route-resourceId="@activity.ResourceId" asp-route-version="@activity.MajorVersion" asp-route-maxTime="@activity.ResourceDurationMilliseconds" asp-route-returnUrl="@returnUrl" asp-route-resourceReferenceId="@activity.ResourceReferenceId">View Progress</a>
</div>
}

@if (ViewActivityHelper.CanCertificateawarded(activity))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ public async Task<DashboardMyLearningResponseViewModel> GetMyCoursesAndElearning
}
if (myInProgressActivities.TotalCount > 0)
{
foreach (var activity in myInProgressActivities.Activities)
foreach (var activity in myInProgressActivities.Activities)
{
activity.Providers = await providerService.GetByResourceVersionIdAsync(activity.ResourceVersionId);
}
Expand Down Expand Up @@ -270,15 +270,15 @@ public async Task<MyLearningActivitiesDetailedViewModel> GetMyInprogressLearning
// Combine both result sets
var combainedUserActivities = mappedMyLearningActivities.Concat(mappedEnrolledCourses).ToList();
int skip = (pageNumber - 1) * 3;
var totalCount = combainedUserActivities.Count();
bool isLastPage = skip + 3 >= 8;
var totalCount = combainedUserActivities.Count() > 8 ? 8 : combainedUserActivities.Count();
bool isLastPage = skip + 3 >= totalCount;
int pageSize = isLastPage ? 2 : 3;
var pagedResults = combainedUserActivities.OrderByDescending(activity => activity.ActivityDate).Skip(skip).Take(pageSize).ToList();

// Count total records.
MyLearningActivitiesDetailedViewModel viewModel = new MyLearningActivitiesDetailedViewModel()
{
TotalCount = totalCount > 8 ? 8 : totalCount,
TotalCount = totalCount,
Activities = pagedResults,
};

Expand Down Expand Up @@ -346,22 +346,22 @@ public async Task<MyLearningCertificatesDetailedViewModel> GetUserCertificateDet

var allCertificates = resourceCertificates.Concat(mappedCourseCertificates);

var allowedTypeIds = new List<int> { 6,13 };
var allowedTypeIds = new List<int> { 6, 13 };

allCertificates = allCertificates.Where(c => allowedTypeIds.Contains(c.ResourceTypeId));

var orderedCertificates = allCertificates.OrderByDescending(c => c.AwardedDate);

int skip = (pageNumber - 1) * 3;
var totalCount = orderedCertificates.Count();
bool isLastPage = skip + 3 >= 8;
var totalCount = orderedCertificates.Count() > 8 ? 8 : orderedCertificates.Count();
bool isLastPage = skip + 3 >= totalCount;
int pageSize = isLastPage ? 2 : 3;
var pagedResults = orderedCertificates.Skip(skip).Take(pageSize).ToList();

return new MyLearningCertificatesDetailedViewModel
{
Certificates = pagedResults,
TotalCount = totalCount > 8 ? 8 : totalCount
TotalCount = totalCount
};
}
catch (Exception ex)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,13 @@ public async Task<MyLearningActivitiesDetailedViewModel> GetUserRecentMyLearning

if (result != null)
{
// Step 1: Get most recent date per ResourceId
var mostRecentByResource = result
.GroupBy(a => a.ResourceId)
.ToDictionary(
g => g.Key,
g => g.Max(a => a.ActivityDate)
);
mappedMyLearningActivities = result.Select(Activity => new MyLearningCombinedActivitiesViewModel
{
UserId = userId,
Expand All @@ -185,9 +192,12 @@ public async Task<MyLearningActivitiesDetailedViewModel> GetUserRecentMyLearning
ScorePercentage = Activity.ScorePercentage,
TotalActivities = 0,
CompletedActivities = 0,
IsMostRecent = false,
//Set IsMostRecent if this is the most recent activity for the ResourceId
IsMostRecent = mostRecentByResource.TryGetValue(Activity.ResourceId, out var mostRecentDate)
&& Activity.ActivityDate == mostRecentDate,
ResourceDurationMilliseconds = Activity.ResourceDurationMilliseconds,
CompletionPercentage = Activity.CompletionPercentage,

}).ToList();
}

Expand All @@ -214,7 +224,7 @@ public async Task<MyLearningActivitiesDetailedViewModel> GetUserRecentMyLearning
CompletedActivities = course.CompletedActivities,
IsMostRecent = false,
ResourceDurationMilliseconds = 0,
CompletionPercentage=0,
CompletionPercentage = 0,
}).ToList();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,20 @@ BEGIN
sa.CmiCoreScoreMax AS CmiCoreScoreMax,
sa.CmiCoreSession_time AS CmiCoreSessiontime,
sa.DurationSeconds AS DurationSeconds,
CASE
WHEN ResourceTypeId = 2 THEN ISNULL(audiorv.DurationInMilliseconds, 0)
WHEN ResourceTypeId = 7 THEN ISNULL(videorv.DurationInMilliseconds, 0)
ELSE 0
END AS ResourceDurationMilliseconds,
ROW_NUMBER() OVER (PARTITION BY ra.ResourceId ORDER BY ISNULL(ara.ActivityEnd, ra.ActivityStart) DESC) AS rn
FROM activity.ResourceActivity ra
LEFT JOIN activity.ResourceActivity ara ON ara.LaunchResourceActivityId = ra.Id
INNER JOIN [resources].[Resource] r ON ra.ResourceId = r.Id
INNER JOIN [resources].[ResourceVersion] rv ON rv.Id = ra.ResourceVersionId AND rv.Deleted = 0
LEFT JOIN [resources].[ResourceVersionProvider] rvp on rv.Id = rvp.ResourceVersionId
LEFT JOIN [resources].[AssessmentResourceVersion] arv ON arv.ResourceVersionId = ra.ResourceVersionId
LEFT JOIN [resources].[AudioResourceVersion] audiorv ON audiorv.ResourceVersionId = ra.ResourceVersionId
LEFT JOIN [resources].[VideoResourceVersion] videorv ON videorv.ResourceVersionId = ra.ResourceVersionId
LEFT JOIN [activity].[AssessmentResourceActivity] asra ON asra.ResourceActivityId = ra.Id
LEFT JOIN [activity].[MediaResourceActivity] mar ON mar.ResourceActivityId = ra.Id
LEFT JOIN [activity].[ScormActivity] sa ON sa.ResourceActivityId = ra.Id
Expand All @@ -81,7 +88,7 @@ SELECT ActivityId,
ActivityDate,
ActivityDurationSeconds,
ScorePercentage,
0 AS ResourceDurationMilliseconds,
ResourceDurationMilliseconds,
PercentComplete AS CompletionPercentage
FROM CTERecentActivities
WHERE rn = 1
Expand Down
Loading