diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs index d604e55..10f7dcd 100644 --- a/Controllers/HomeController.cs +++ b/Controllers/HomeController.cs @@ -18,12 +18,16 @@ namespace CarCareTracker.Controllers private readonly IFileHelper _fileHelper; private readonly IConfigHelper _config; private readonly IExtraFieldDataAccess _extraFieldDataAccess; + private readonly IReminderRecordDataAccess _reminderRecordDataAccess; + private readonly IReminderHelper _reminderHelper; public HomeController(ILogger logger, IVehicleDataAccess dataAccess, IUserLogic userLogic, IConfigHelper configuration, IFileHelper fileHelper, - IExtraFieldDataAccess extraFieldDataAccess) + IExtraFieldDataAccess extraFieldDataAccess, + IReminderRecordDataAccess reminderRecordDataAccess, + IReminderHelper reminderHelper) { _logger = logger; _dataAccess = dataAccess; @@ -31,6 +35,8 @@ namespace CarCareTracker.Controllers _userLogic = userLogic; _fileHelper = fileHelper; _extraFieldDataAccess = extraFieldDataAccess; + _reminderRecordDataAccess = reminderRecordDataAccess; + _reminderHelper = reminderHelper; } private int GetUserID() { @@ -49,6 +55,29 @@ namespace CarCareTracker.Controllers } return PartialView("_GarageDisplay", vehiclesStored); } + public IActionResult Calendar() + { + var vehiclesStored = _dataAccess.GetVehicles(); + if (!User.IsInRole(nameof(UserData.IsRootUser))) + { + vehiclesStored = _userLogic.FilterUserVehicles(vehiclesStored, GetUserID()); + } + List reminders = new List(); + foreach(Vehicle vehicle in vehiclesStored) + { + var vehicleReminders = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicle.Id); + vehicleReminders.RemoveAll(x => x.Metric == ReminderMetric.Odometer); + //we don't care about mileages so we can basically fake the current vehicle mileage. + if (vehicleReminders.Any()) + { + var maxMileage = vehicleReminders.Max(x => x.Mileage) + 1000; + var reminderUrgency = _reminderHelper.GetReminderRecordViewModels(vehicleReminders, maxMileage, DateTime.Now); + reminderUrgency = reminderUrgency.Select(x => new ReminderRecordViewModel { Date = x.Date, Urgency = x.Urgency, Description = $"{vehicle.Year} {vehicle.Make} {vehicle.Model} #{vehicle.LicensePlate} - {x.Description}" }).ToList(); + reminders.AddRange(reminderUrgency); + } + } + return PartialView("_Calendar", reminders); + } public IActionResult Settings() { var userConfig = _config.GetUserConfig(User); diff --git a/Views/Home/Index.cshtml b/Views/Home/Index.cshtml index eed9813..a2aab27 100644 --- a/Views/Home/Index.cshtml +++ b/Views/Home/Index.cshtml @@ -27,6 +27,9 @@ } + @@ -64,6 +67,9 @@ } + @@ -93,6 +99,8 @@
+
+
diff --git a/Views/Home/_Calendar.cshtml b/Views/Home/_Calendar.cshtml new file mode 100644 index 0000000..df5930f --- /dev/null +++ b/Views/Home/_Calendar.cshtml @@ -0,0 +1,82 @@ +@using CarCareTracker.Helper +@inject IConfigHelper config +@inject ITranslationHelper translator +@model List +@{ + var userConfig = config.GetUserConfig(User); + var userLanguage = userConfig.UserLanguage; +} + + +
+
+
+
+
+
+ \ No newline at end of file diff --git a/wwwroot/js/garage.js b/wwwroot/js/garage.js index 9ef26d6..26400d5 100644 --- a/wwwroot/js/garage.js +++ b/wwwroot/js/garage.js @@ -41,11 +41,24 @@ function bindTabEvent() { case "supply-tab": getVehicleSupplyRecords(); break; + case "calendar-tab": + getVehicleCalendarEvents(); + break; } switch (e.relatedTarget.id) { //clear out previous tabs with grids in them to help with performance case "supply-tab": $("#supply-tab-pane").html(""); break; + case "calendar-tab": + $("#calendar-tab-pane").html(""); + break; + } + }); +} +function getVehicleCalendarEvents() { + $.get('/Home/Calendar', function (data) { + if (data) { + $("#calendar-tab-pane").html(data); } }); }