diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index c941441..d947c53 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -543,18 +543,85 @@ namespace CarCareTracker.Controllers } #endregion #region "Reminders" + private int GetMaxMileage(int vehicleId) + { + var numbersArray = new List + { + _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId).Max(x => x.Mileage), + _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId).Max(x => x.Mileage), + _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId).Max(x => x.Mileage) + }; + return numbersArray.Max(); + } + private List GetRemindersAndUrgency(int vehicleId) + { + var currentMileage = GetMaxMileage(vehicleId); + var reminders = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicleId); + List reminderViewModels = new List(); + foreach(var reminder in reminders) + { + var reminderViewModel = new ReminderRecordViewModel() + { + Id = reminder.Id, + VehicleId = reminder.VehicleId, + Date = reminder.Date, + Mileage = reminder.Mileage, + Description = reminder.Description, + Notes = reminder.Notes + }; + if (reminder.Metric == ReminderMetric.Both) + { + //if less than a week from today or less than 50 miles from current mileage then very urgent. + if (reminder.Date < DateTime.Now.AddDays(7)) + { + reminderViewModel.Urgency = ReminderUrgency.VeryUrgent; + //have to specify by which metric this reminder is urgent. + reminderViewModel.Metric = ReminderMetric.Date; + } + else if (reminder.Date < DateTime.Now.AddDays(30)) + { + reminderViewModel.Urgency = ReminderUrgency.Urgent; + reminderViewModel.Metric = ReminderMetric.Date; + } + else if (reminder.Mileage < currentMileage + 50) + { + reminderViewModel.Urgency = ReminderUrgency.VeryUrgent; + reminderViewModel.Metric = ReminderMetric.Odometer; + } else if (reminder.Mileage < currentMileage + 100) + { + reminderViewModel.Urgency = ReminderUrgency.Urgent; + reminderViewModel.Metric = ReminderMetric.Odometer; + } + } else if (reminder.Metric == ReminderMetric.Date) + { + if (reminder.Date < DateTime.Now.AddDays(7)) + { + reminderViewModel.Urgency = ReminderUrgency.VeryUrgent; + } + else if (reminder.Date < DateTime.Now.AddDays(30)) + { + reminderViewModel.Urgency = ReminderUrgency.Urgent; + } + } else if (reminder.Metric == ReminderMetric.Odometer) + { + if (reminder.Mileage < currentMileage + 50) + { + reminderViewModel.Urgency = ReminderUrgency.VeryUrgent; + } + else if (reminder.Mileage < currentMileage + 100) + { + reminderViewModel.Urgency = ReminderUrgency.Urgent; + } + } + reminderViewModels.Add(reminderViewModel); + } + return reminderViewModels; + } [HttpGet] public IActionResult GetReminderRecordsByVehicleId(int vehicleId) { - var result = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicleId); - if (_useDescending) - { - result = result.OrderByDescending(x => x.Date).ToList(); - } - else - { - result = result.OrderBy(x => x.Date).ToList(); - } + var result = GetRemindersAndUrgency(vehicleId); + return PartialView("_ReminderRecords", result); } [HttpPost] @@ -576,7 +643,6 @@ namespace CarCareTracker.Controllers var convertedResult = new ReminderRecordInput { Id = result.Id, - Cost = result.Cost, Date = result.Date.ToShortDateString(), Description = result.Description, Notes = result.Notes, diff --git a/Enum/ReminderUrgency.cs b/Enum/ReminderUrgency.cs new file mode 100644 index 0000000..07bf45d --- /dev/null +++ b/Enum/ReminderUrgency.cs @@ -0,0 +1,9 @@ +namespace CarCareTracker.Models +{ + public enum ReminderUrgency + { + NotUrgent = 0, + Urgent = 1, + VeryUrgent = 2 + } +} diff --git a/Models/Reminder/ReminderRecordViewModel.cs b/Models/Reminder/ReminderRecordViewModel.cs new file mode 100644 index 0000000..1f3f62e --- /dev/null +++ b/Models/Reminder/ReminderRecordViewModel.cs @@ -0,0 +1,17 @@ +namespace CarCareTracker.Models +{ + public class ReminderRecordViewModel + { + public int Id { get; set; } + public int VehicleId { get; set; } + public DateTime Date { get; set; } + public int Mileage { get; set; } + public string Description { get; set; } + public string Notes { get; set; } + /// + /// Reason why this reminder is urgent + /// + public ReminderMetric Metric { get; set; } = ReminderMetric.Date; + public ReminderUrgency Urgency { get; set; } = ReminderUrgency.NotUrgent; + } +} diff --git a/Views/Vehicle/Index.cshtml b/Views/Vehicle/Index.cshtml index a526aef..b78e94e 100644 --- a/Views/Vehicle/Index.cshtml +++ b/Views/Vehicle/Index.cshtml @@ -8,6 +8,7 @@ + }
@@ -84,6 +85,12 @@
+