Skip to content

Commit 7351191

Browse files
committed
merge
1 parent b40a0b6 commit 7351191

File tree

12 files changed

+315
-2
lines changed

12 files changed

+315
-2
lines changed

LearningHub.Nhs.WebUI/Controllers/MyLearningController.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,68 @@ public async Task<IActionResult> ViewProgress(int resourceId, int resourceRefere
736736
return this.View(vm);
737737
}
738738

739+
/// <summary>
740+
/// Get user certificates.
741+
/// </summary>
742+
/// <param name="certificateRequest">The certificateRequest.</param>
743+
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
744+
[Route("mylearning/certificate")]
745+
[HttpGet]
746+
[HttpPost]
747+
public async Task<IActionResult> Certificates(MyLearningUserCertificatesViewModel certificateRequest = null)
748+
{
749+
var myLearningRequestModel = new MyLearningRequestModel
750+
{
751+
SearchText = certificateRequest.SearchText?.Trim(),
752+
Skip = certificateRequest.CurrentPageIndex * MyLearningPageSize,
753+
Take = MyLearningPageSize,
754+
File = certificateRequest.File,
755+
Video = certificateRequest.Video,
756+
Article = certificateRequest.Article,
757+
Case = certificateRequest.Case,
758+
Image = certificateRequest.Image,
759+
Audio = certificateRequest.Audio,
760+
Elearning = certificateRequest.Elearning,
761+
Html = certificateRequest.Html,
762+
Assessment = certificateRequest.Assessment,
763+
Courses = certificateRequest.Courses,
764+
};
765+
766+
switch (certificateRequest.MyLearningFormActionType)
767+
{
768+
case MyLearningFormActionTypeEnum.NextPageChange:
769+
certificateRequest.CurrentPageIndex += 1;
770+
myLearningRequestModel.Skip = certificateRequest.CurrentPageIndex * MyLearningPageSize;
771+
break;
772+
773+
case MyLearningFormActionTypeEnum.PreviousPageChange:
774+
certificateRequest.CurrentPageIndex -= 1;
775+
myLearningRequestModel.Skip = certificateRequest.CurrentPageIndex * MyLearningPageSize;
776+
break;
777+
case MyLearningFormActionTypeEnum.BasicSearch:
778+
779+
myLearningRequestModel = new MyLearningRequestModel
780+
{
781+
SearchText = certificateRequest.SearchText?.Trim(),
782+
Skip = certificateRequest.CurrentPageIndex * MyLearningPageSize,
783+
Take = MyLearningPageSize,
784+
};
785+
break;
786+
}
787+
788+
var result = await this.myLearningService.GetUserCertificateDetails(myLearningRequestModel);
789+
var response = new MyLearningUserCertificatesViewModel(myLearningRequestModel);
790+
791+
if (result != null)
792+
{
793+
response.TotalCount = result.TotalCount;
794+
response.UserCertificates = result.Certificates;
795+
}
796+
797+
response.MyLearningPaging = new MyLearningPagingModel() { CurrentPage = certificateRequest.CurrentPageIndex, PageSize = MyLearningPageSize, TotalItems = response.TotalCount, HasItems = response.TotalCount > 0 };
798+
return this.View(response);
799+
}
800+
739801
/// <summary>
740802
/// Gets the certificate details of an activity.
741803
/// </summary>

LearningHub.Nhs.WebUI/Helpers/ViewActivityHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ public static Dictionary<string, string> GetActivityParameters(object model)
437437
var routeData = model.GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(model)?.ToString());
438438
routeData.Remove("MostRecentResources");
439439
routeData.Remove("Activities");
440+
routeData.Remove("UserCertificates");
440441
routeData.Remove("TotalCount");
441442
routeData.Remove("MyLearningPaging");
442443
routeData.Remove("Skip");

LearningHub.Nhs.WebUI/Interfaces/IMyLearningService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Threading.Tasks;
6+
using LearningHub.Nhs.Models.Common;
67
using LearningHub.Nhs.Models.MyLearning;
78

89
/// <summary>
@@ -49,6 +50,13 @@ public interface IMyLearningService
4950
/// <returns>The <see cref="Task"/>.</returns>
5051
Task<Tuple<int, MyLearningDetailedItemViewModel>> GetResourceCertificateDetails(int resourceReferenceId, int? majorVersion = 0, int? minorVersion = 0, int? userId = 0);
5152

53+
/// <summary>
54+
/// Gets the user certificates.
55+
/// </summary>
56+
/// <param name="requestModel">The request model.</param>
57+
/// <returns>The <see cref="Task"/>.</returns>
58+
Task<MyLearningCertificatesDetailedViewModel> GetUserCertificateDetails(MyLearningRequestModel requestModel);
59+
5260
/// <summary>
5361
/// Gets the resource URL for a given resource reference ID.
5462
/// </summary>

LearningHub.Nhs.WebUI/Models/SideMenu/SideNavigationConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public static IEnumerable<SideNavigationGroup> GetGroupedMenus()
7777
Text = "Certificates",
7878
Controller = "MyLearning",
7979
Action = "Certificates",
80-
IsActive = route => MatchRoute(route, "Activity", "Certificates"),
80+
IsActive = route => MatchRoute(route, "MyLearning", "Certificates"),
8181
},
8282
new SideNavigationItem
8383
{

LearningHub.Nhs.WebUI/Services/MyLearningService.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
using System.Text;
77
using System.Threading.Tasks;
88
using elfhHub.Nhs.Models.Common;
9+
using LearningHub.Nhs.Models.Common;
10+
using LearningHub.Nhs.Models.Entities.Resource;
911
using LearningHub.Nhs.Models.MyLearning;
1012
using LearningHub.Nhs.WebUI.Configuration;
1113
using LearningHub.Nhs.WebUI.Interfaces;
14+
using Microsoft.AspNetCore.Mvc;
1215
using Microsoft.Extensions.Logging;
1316
using Microsoft.Extensions.Options;
1417
using Newtonsoft.Json;
@@ -189,6 +192,38 @@ public async Task<Tuple<int, MyLearningDetailedItemViewModel>> GetResourceCertif
189192
return viewModel;
190193
}
191194

195+
/// <summary>
196+
/// Gets the user certificates.
197+
/// </summary>
198+
/// <param name="requestModel">The request model.</param>
199+
/// <returns>The <see cref="Task"/>.</returns>
200+
public async Task<MyLearningCertificatesDetailedViewModel> GetUserCertificateDetails(MyLearningRequestModel requestModel)
201+
{
202+
MyLearningCertificatesDetailedViewModel viewModel = null;
203+
204+
var json = JsonConvert.SerializeObject(requestModel);
205+
var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
206+
207+
var client = await this.OpenApiHttpClient.GetClientAsync();
208+
209+
var request = $"MyLearning/GetUserCertificateDetails";
210+
var response = await client.PostAsync(request, stringContent).ConfigureAwait(false);
211+
212+
if (response.IsSuccessStatusCode)
213+
{
214+
var result = response.Content.ReadAsStringAsync().Result;
215+
viewModel = JsonConvert.DeserializeObject<MyLearningCertificatesDetailedViewModel>(result);
216+
}
217+
else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized
218+
||
219+
response.StatusCode == System.Net.HttpStatusCode.Forbidden)
220+
{
221+
throw new Exception("AccessDenied");
222+
}
223+
224+
return viewModel;
225+
}
226+
192227
/// <summary>
193228
/// GetCourseUrl.
194229
/// </summary>

OpenAPI/LearningHub.Nhs.OpenApi.Repositories.Interface/Repositories/IResourceRepository.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ namespace LearningHub.Nhs.OpenApi.Repositories.Interface.Repositories
22
{
33
using System.Collections.Generic;
44
using System.Threading.Tasks;
5+
using LearningHub.Nhs.Models.Common;
56
using LearningHub.Nhs.Models.Entities.Activity;
67
using LearningHub.Nhs.Models.Entities.Resource;
78
using LearningHub.Nhs.Models.Enums;
9+
using LearningHub.Nhs.Models.MyLearning;
810

911
/// <summary>
1012
/// Resource repository interface.
@@ -40,6 +42,14 @@ Task<IEnumerable<ResourceReference>> GetResourceReferencesByOriginalResourceRefe
4042
/// <param name="currentUserId"><see cref="currentUserId"/>.</param>
4143
Task<List<int>> GetAchievedCertificatedResourceIds(int currentUserId);
4244

45+
/// <summary>
46+
/// GetUserCertificateDetails
47+
/// </summary>
48+
/// <param name="userId">The current user Id.</param>
49+
/// <param name="filterText">The filter text</param>
50+
/// <returns>A <see cref="Task{UserCertificateViewModel}"/> representing the result of the asynchronous operation.</returns>
51+
Task<List<UserCertificateViewModel>> GetUserCertificateDetails(int userId, string filterText = "");
52+
4353
/// <summary>
4454
/// The get by id async.
4555
/// </summary>

OpenAPI/LearningHub.Nhs.OpenApi.Repositories/EntityFramework/LearningHubDbContext.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,13 @@ public LearningHubDbContextOptions Options
351351
/// </summary>
352352
public virtual DbSet<DashboardResourceDto> DashboardResourceDto { get; set; }
353353

354+
355+
/// <summary>
356+
/// Gets or sets the UserCertificateViewModel
357+
/// Gets or sets DashboardResourceDto. These are not entities. They are returned from the [resources].[GetUserCertificateDetails] stored proc..
358+
/// </summary>
359+
public virtual DbSet<UserCertificateViewModel> UserCertificateViewModel { get; set; }
360+
354361
/// <summary>
355362
/// Gets or sets the ExternalContentDetailsViewModel.
356363
/// </summary>

OpenAPI/LearningHub.Nhs.OpenApi.Repositories/Repositories/ResourceRepository.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ namespace LearningHub.Nhs.OpenApi.Repositories.Repositories
55
using System.Data;
66
using System.Linq;
77
using System.Threading.Tasks;
8+
using LearningHub.Nhs.Models.Common;
89
using LearningHub.Nhs.Models.Entities.Activity;
910
using LearningHub.Nhs.Models.Entities.Resource;
1011
using LearningHub.Nhs.Models.Enums;
12+
using LearningHub.Nhs.Models.MyLearning;
1113
using LearningHub.Nhs.OpenApi.Repositories.EntityFramework;
1214
using LearningHub.Nhs.OpenApi.Repositories.Interface.Repositories;
1315
using Microsoft.Data.SqlClient;
@@ -87,6 +89,25 @@ public async Task<List<int>> GetAchievedCertificatedResourceIds(int currentUserI
8789
return achievedCertificatedResourceIds;
8890
}
8991

92+
93+
/// <summary>
94+
/// GetUserCertificateDetails
95+
/// </summary>
96+
/// <param name="userId">The current user Id.</param>
97+
/// <param name="filterText">The filter text</param>
98+
/// <returns>A <see cref="Task{UserCertificateViewModel}"/> representing the result of the asynchronous operation.</returns>
99+
public async Task<List<UserCertificateViewModel>> GetUserCertificateDetails(int userId, string filterText = "")
100+
{
101+
var result = new List<UserCertificateViewModel>();
102+
var param0 = new SqlParameter("@UserId", SqlDbType.Int) { Value = userId };
103+
var param1 = new SqlParameter("@FilterText", SqlDbType.NVarChar, 200) { Value = filterText.Trim() ?? string.Empty };
104+
105+
result = await this.DbContext.UserCertificateViewModel
106+
.FromSqlRaw("EXEC resources.GetUserCertificateDetails @UserId = @UserId, @FilterText = @FilterText", param0, param1).AsNoTracking().ToListAsync();
107+
return result;
108+
}
109+
110+
90111
// </summary>
91112
// <param name="resourceReferenceIds"></param>
92113
// <param name="userIds"></param>

OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/Services/IMyLearningService.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Threading.Tasks;
6+
using LearningHub.Nhs.Models.Common;
67
using LearningHub.Nhs.Models.Entities.Activity;
78
using LearningHub.Nhs.Models.MyLearning;
89

@@ -61,5 +62,13 @@ public interface IMyLearningService
6162
/// <param name="userId">The user id.</param>
6263
/// <returns>The <see cref="Task"/>.</returns>
6364
Task<List<MyLearningDetailedItemViewModel>> PopulateMyLearningDetailedItemViewModels(List<ResourceActivity> resourceActivities, int userId);
65+
66+
/// <summary>
67+
/// Gets the resource certificate details.
68+
/// </summary>
69+
/// <param name="userId">The user id.</param>
70+
/// <param name="requestModel">The request model</param>
71+
/// <returns>The <see cref="Task"/>.</returns>
72+
Task<MyLearningCertificatesDetailedViewModel> GetUserCertificateDetails(int userId, MyLearningRequestModel requestModel);
6473
}
6574
}

OpenAPI/LearningHub.Nhs.OpenApi.Services/Services/MoodleApiService.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,40 @@ public async Task<List<MoodleEnrolledCourseResponseModel>> GetEnrolledCoursesHis
207207
}
208208
}
209209

210+
/// <summary>
211+
/// GetUserLearningHistory.
212+
/// </summary>
213+
/// <param name="userId">Moodle user id.</param>
214+
/// <param name="filterText">The page Number.</param>
215+
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation.</returns>
216+
public async Task<List<MoodleUserCertificateResponseModel>> GetUserCertificateAsync(int userId, string filterText="")
217+
{
218+
try
219+
{
220+
userId = 3;
221+
var parameters = new Dictionary<string, string>
222+
{
223+
{ "userid", userId.ToString() },
224+
{ "searchterm", filterText }
225+
};
226+
227+
// Fetch enrolled courses
228+
var userCertificates = await GetCallMoodleApiAsync<List<MoodleUserCertificateResponseModel>>(
229+
"mylearningservice_get_user_certificates",
230+
parameters
231+
);
232+
233+
if (userCertificates == null || userCertificates.Count == 0)
234+
return new List<MoodleUserCertificateResponseModel>();
235+
236+
return userCertificates.ToList();
237+
}
238+
catch (Exception ex)
239+
{
240+
return null;
241+
}
242+
}
243+
210244
/// <summary>
211245
/// GetEnrolledCoursesAsync.
212246
/// </summary>

0 commit comments

Comments
 (0)