From 6b0f7555b0e1a30862b76b0857a040179c0e71cb Mon Sep 17 00:00:00 2001 From: Jonathan Bloxsom Date: Wed, 9 Jun 2021 09:58:00 +0100 Subject: [PATCH 01/17] HEEDLS-459 activity services WIP --- .../DataServices/ActivityDataService.cs | 34 +++++++++++++++++++ .../Services/ActivityService.cs | 10 ++++++ 2 files changed, 44 insertions(+) create mode 100644 DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs create mode 100644 DigitalLearningSolutions.Data/Services/ActivityService.cs diff --git a/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs b/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs new file mode 100644 index 0000000000..50424a6248 --- /dev/null +++ b/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs @@ -0,0 +1,34 @@ +namespace DigitalLearningSolutions.Data.DataServices +{ + using System.Collections.Generic; + using System.Data; + using System.Linq; + using Dapper; + + public interface IActivityDataService + { + int GetActivityForMonthAndYear(int year, int month, string activityType); + } + + public class ActivityDataService : IActivityDataService + { + private readonly IDbConnection connection; + + public ActivityDataService(IDbConnection connection) + { + this.connection = connection; + } + + public int GetActivityForMonthAndYear(int year, int month, string activityType) + { + return connection.Query( + @"SELECT COUNT (LogID) + FROM tActivityLog + WHERE @activityType = 1 + AND LogYear = @year + AND LogMonth = @month", + new {year, month, activityType} + ).First(); + } + } +} diff --git a/DigitalLearningSolutions.Data/Services/ActivityService.cs b/DigitalLearningSolutions.Data/Services/ActivityService.cs new file mode 100644 index 0000000000..7b58fb5cdf --- /dev/null +++ b/DigitalLearningSolutions.Data/Services/ActivityService.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace DigitalLearningSolutions.Data.Services +{ + class ActivityService + { + } +} From 12e505494f127f1fd81c4017d78705fd0bbfbe29 Mon Sep 17 00:00:00 2001 From: Jonathan Bloxsom Date: Wed, 9 Jun 2021 16:42:22 +0100 Subject: [PATCH 02/17] HEEDLS-459 controller and services WIP --- .../DataServices/ActivityDataService.cs | 21 +++++++----- .../Models/TrackingSystem/MonthOfActivity.cs | 11 +++++++ .../Services/ActivityService.cs | 32 +++++++++++++++---- .../Centre/Reports/ReportsController.cs | 5 +++ .../Centre/Reports/ReportsViewModel.cs | 16 ++++++++++ 5 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 DigitalLearningSolutions.Data/Models/TrackingSystem/MonthOfActivity.cs diff --git a/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs b/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs index 50424a6248..8c3815d3f6 100644 --- a/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs @@ -4,10 +4,11 @@ using System.Data; using System.Linq; using Dapper; + using DigitalLearningSolutions.Data.Models.TrackingSystem; public interface IActivityDataService { - int GetActivityForMonthAndYear(int year, int month, string activityType); + MonthOfActivity GetActivityForMonthAndYear(int year, int month); } public class ActivityDataService : IActivityDataService @@ -19,15 +20,19 @@ public ActivityDataService(IDbConnection connection) this.connection = connection; } - public int GetActivityForMonthAndYear(int year, int month, string activityType) + public MonthOfActivity GetActivityForMonthAndYear(int year, int month) { - return connection.Query( - @"SELECT COUNT (LogID) - FROM tActivityLog - WHERE @activityType = 1 - AND LogYear = @year + return connection.Query( + @"SELECT + @year AS Year, + @month AS Month, + SUM(CONVERT(INT, Completed)) AS Completions, + SUM(CONVERT(INT, Evaluated)) AS Evaluations, + SUM(CONVERT(INT, Registered)) AS Registrations + FROM tActivityLog + WHERE LogYear = @year AND LogMonth = @month", - new {year, month, activityType} + new {year, month} ).First(); } } diff --git a/DigitalLearningSolutions.Data/Models/TrackingSystem/MonthOfActivity.cs b/DigitalLearningSolutions.Data/Models/TrackingSystem/MonthOfActivity.cs new file mode 100644 index 0000000000..64b23f6103 --- /dev/null +++ b/DigitalLearningSolutions.Data/Models/TrackingSystem/MonthOfActivity.cs @@ -0,0 +1,11 @@ +namespace DigitalLearningSolutions.Data.Models.TrackingSystem +{ + public class MonthOfActivity + { + public int Year { get; set; } + public int Month { get; set; } + public int Completions { get; set; } + public int Evaluations { get; set; } + public int Registrations { get; set; } + } +} diff --git a/DigitalLearningSolutions.Data/Services/ActivityService.cs b/DigitalLearningSolutions.Data/Services/ActivityService.cs index 7b58fb5cdf..62a4443f0c 100644 --- a/DigitalLearningSolutions.Data/Services/ActivityService.cs +++ b/DigitalLearningSolutions.Data/Services/ActivityService.cs @@ -1,10 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace DigitalLearningSolutions.Data.Services +namespace DigitalLearningSolutions.Data.Services { - class ActivityService + using System; + using System.Collections.Generic; + using DigitalLearningSolutions.Data.DataServices; + using DigitalLearningSolutions.Data.Models.TrackingSystem; + + public interface IActivityService { + public IEnumerable GetRecentActivity( + int months, + int centreId + ); + } + + public class ActivityService : IActivityService + { + private readonly IActivityDataService activityDataService; + + public ActivityService(IActivityDataService activityDataService) + { + this.activityDataService = activityDataService; + } + + public IEnumerable GetRecentActivity(int months, int centreId) + { + throw new NotImplementedException(); + } } } diff --git a/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Centre/Reports/ReportsController.cs b/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Centre/Reports/ReportsController.cs index 492f4c7ce8..44f9830d91 100644 --- a/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Centre/Reports/ReportsController.cs +++ b/DigitalLearningSolutions.Web/Controllers/TrackingSystem/Centre/Reports/ReportsController.cs @@ -1,5 +1,6 @@ namespace DigitalLearningSolutions.Web.Controllers.TrackingSystem.Centre.Reports { + using DigitalLearningSolutions.Data.Services; using DigitalLearningSolutions.Web.Helpers; using DigitalLearningSolutions.Web.ViewModels.TrackingSystem.Centre.Reports; using Microsoft.AspNetCore.Authorization; @@ -9,8 +10,12 @@ [Route("/TrackingSystem/Centre/Reports")] public class ReportsController : Controller { + private readonly IActivityService activityService; + public IActionResult Index() { + + var model = new ReportsViewModel(); return View(model); } diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs index c6aa4694b7..b67893c028 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs @@ -1,6 +1,22 @@ namespace DigitalLearningSolutions.Web.ViewModels.TrackingSystem.Centre.Reports { + using System.Collections.Generic; + public class ReportsViewModel { + public ActivityTableViewModel ActivityTableViewModel { get; set; } + } + + public class ActivityTableViewModel + { + public IEnumerable Rows { get; set; } + } + + public class ActivityTableRow + { + public string? Month { get; set; } + public int Completions { get; set; } + public int Evaluations { get; set; } + public int Registrations { get; set; } } } From e18ef04b1f41d6a2e5badb60af639bfea32b2da1 Mon Sep 17 00:00:00 2001 From: Jonathan Bloxsom Date: Wed, 16 Jun 2021 17:05:59 +0100 Subject: [PATCH 03/17] HEEDLS-459: services to fetch activity data --- .../DataServices/ActivityDataService.cs | 17 +++++++------- .../Services/ActivityService.cs | 23 ++++++++++++++----- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs b/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs index 8c3815d3f6..09c63472e2 100644 --- a/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs +++ b/DigitalLearningSolutions.Data/DataServices/ActivityDataService.cs @@ -8,7 +8,7 @@ public interface IActivityDataService { - MonthOfActivity GetActivityForMonthAndYear(int year, int month); + IEnumerable GetActivityForMonthsInYear(int year, IEnumerable months); } public class ActivityDataService : IActivityDataService @@ -20,19 +20,20 @@ public ActivityDataService(IDbConnection connection) this.connection = connection; } - public MonthOfActivity GetActivityForMonthAndYear(int year, int month) + public IEnumerable GetActivityForMonthsInYear(int year, IEnumerable months) { - return connection.Query( + return connection.Query>( @"SELECT - @year AS Year, - @month AS Month, + LogYear AS Year, + LogMonth AS Month, SUM(CONVERT(INT, Completed)) AS Completions, SUM(CONVERT(INT, Evaluated)) AS Evaluations, SUM(CONVERT(INT, Registered)) AS Registrations FROM tActivityLog - WHERE LogYear = @year - AND LogMonth = @month", - new {year, month} + WHERE (LogYear = @year AND LogMonth IN @months) + GROUP BY LogYear, LogMonth + ORDER BY LogYear, LogMonth", + new {year, months} ).First(); } } diff --git a/DigitalLearningSolutions.Data/Services/ActivityService.cs b/DigitalLearningSolutions.Data/Services/ActivityService.cs index 62a4443f0c..9259b4934c 100644 --- a/DigitalLearningSolutions.Data/Services/ActivityService.cs +++ b/DigitalLearningSolutions.Data/Services/ActivityService.cs @@ -2,15 +2,13 @@ { using System; using System.Collections.Generic; + using System.Linq; using DigitalLearningSolutions.Data.DataServices; using DigitalLearningSolutions.Data.Models.TrackingSystem; public interface IActivityService { - public IEnumerable GetRecentActivity( - int months, - int centreId - ); + public IEnumerable GetRecentActivity(int centreId); } public class ActivityService : IActivityService @@ -22,9 +20,22 @@ public ActivityService(IActivityDataService activityDataService) this.activityDataService = activityDataService; } - public IEnumerable GetRecentActivity(int months, int centreId) + public IEnumerable GetRecentActivity(int centreId) { - throw new NotImplementedException(); + var date = DateTime.Now; + var currentYear = date.Year; + var monthsToDate = Enumerable.Range(1, date.Month); + + var activity = activityDataService.GetActivityForMonthsInYear(currentYear, monthsToDate); + + if (date.Month < 12) + { + var monthsLastYear = Enumerable.Range(date.Month + 1, 12); + var lastYearActivity = activityDataService.GetActivityForMonthsInYear(currentYear - 1, monthsLastYear); + activity = lastYearActivity.Concat(activity); + } + + return activity; } } } From da036d8f015625bdbda177ecf6bb469522684091 Mon Sep 17 00:00:00 2001 From: Jonathan Bloxsom Date: Wed, 16 Jun 2021 17:31:23 +0100 Subject: [PATCH 04/17] HEEDLS-459: view model and views --- .../Centre/Reports/ReportsViewModel.cs | 11 +++++ .../Centre/Reports/Index.cshtml | 3 +- .../Centre/Reports/_ActivityTable.cshtml | 40 +++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 DigitalLearningSolutions.Web/Views/TrackingSystem/Centre/Reports/_ActivityTable.cshtml diff --git a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs index b67893c028..e4ce30777c 100644 --- a/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs +++ b/DigitalLearningSolutions.Web/ViewModels/TrackingSystem/Centre/Reports/ReportsViewModel.cs @@ -1,6 +1,7 @@ namespace DigitalLearningSolutions.Web.ViewModels.TrackingSystem.Centre.Reports { using System.Collections.Generic; + using DigitalLearningSolutions.Data.Models.TrackingSystem; public class ReportsViewModel { @@ -14,6 +15,16 @@ public class ActivityTableViewModel public class ActivityTableRow { + private static string[] MonthNames = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Nov", "Dec"}; + + public ActivityTableRow(MonthOfActivity monthOfActivity) + { + Month = MonthNames[monthOfActivity.Month - 1]; + Completions = monthOfActivity.Completions; + Evaluations = monthOfActivity.Evaluations; + Registrations = monthOfActivity.Registrations; + } + public string? Month { get; set; } public int Completions { get; set; } public int Evaluations { get; set; } diff --git a/DigitalLearningSolutions.Web/Views/TrackingSystem/Centre/Reports/Index.cshtml b/DigitalLearningSolutions.Web/Views/TrackingSystem/Centre/Reports/Index.cshtml index 3bcc710602..9df1e09871 100644 --- a/DigitalLearningSolutions.Web/Views/TrackingSystem/Centre/Reports/Index.cshtml +++ b/DigitalLearningSolutions.Web/Views/TrackingSystem/Centre/Reports/Index.cshtml @@ -24,7 +24,8 @@
-

Centre reports

+

Reports

+