From f4538ffabd50fe3abd191c0450f17ba38e01a803 Mon Sep 17 00:00:00 2001 From: "DESKTOP-T0O5CDB\\DESK-555BD" Date: Sat, 20 Jan 2024 08:21:06 -0700 Subject: [PATCH] method to calculate for recurring reminders. --- Controllers/VehicleController.cs | 65 +++++++++++++++++----- Enum/ReminderMileageInterval.cs | 13 +++++ Enum/ReminderMonthInterval.cs | 10 ++++ Helper/ReminderHelper.cs | 3 +- Models/Reminder/ReminderRecord.cs | 3 + Models/Reminder/ReminderRecordInput.cs | 6 ++ Models/Reminder/ReminderRecordViewModel.cs | 4 ++ 7 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 Enum/ReminderMileageInterval.cs create mode 100644 Enum/ReminderMonthInterval.cs diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 2e7cf13..c072e6c 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -222,14 +222,16 @@ namespace CarCareTracker.Controllers var vehicleRecords = _supplyRecordDataAccess.GetSupplyRecordsByVehicleId(vehicleId); if (vehicleRecords.Any()) { - var exportData = vehicleRecords.Select(x => new SupplyRecordExportModel { - Date = x.Date.ToShortDateString(), - Description = x.Description, - Cost = x.Cost.ToString("C"), + var exportData = vehicleRecords.Select(x => new SupplyRecordExportModel + { + Date = x.Date.ToShortDateString(), + Description = x.Description, + Cost = x.Cost.ToString("C"), PartNumber = x.PartNumber, PartQuantity = x.Quantity.ToString(), PartSupplier = x.PartSupplier, - Notes = x.Notes }); + Notes = x.Notes + }); using (var writer = new StreamWriter(fullExportFilePath)) { using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) @@ -265,15 +267,17 @@ namespace CarCareTracker.Controllers var vehicleRecords = _planRecordDataAccess.GetPlanRecordsByVehicleId(vehicleId); if (vehicleRecords.Any()) { - var exportData = vehicleRecords.Select(x => new PlanRecordExportModel { - DateCreated = x.DateCreated.ToString("G"), + var exportData = vehicleRecords.Select(x => new PlanRecordExportModel + { + DateCreated = x.DateCreated.ToString("G"), DateModified = x.DateModified.ToString("G"), Description = x.Description, - Cost = x.Cost.ToString("C"), + Cost = x.Cost.ToString("C"), Type = x.ImportMode.ToString(), Priority = x.Priority.ToString(), Progress = x.Progress.ToString(), - Notes = x.Notes }); + Notes = x.Notes + }); using (var writer = new StreamWriter(fullExportFilePath)) { using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) @@ -1022,7 +1026,37 @@ namespace CarCareTracker.Controllers public IActionResult GetVehicleHaveUrgentOrPastDueReminders(int vehicleId) { var result = GetRemindersAndUrgency(vehicleId, DateTime.Now); - if (result.Where(x => x.Urgency == ReminderUrgency.VeryUrgent || x.Urgency == ReminderUrgency.PastDue).Any()) + //check for past due reminders that are eligible for recurring. + var pastDueAndRecurring = result.Where(x => x.Urgency == ReminderUrgency.PastDue && x.IsRecurring); + if (pastDueAndRecurring.Any()) + { + foreach (ReminderRecordViewModel reminderRecord in pastDueAndRecurring) + { + //update based on recurring intervals. + //pull reminderRecord based on ID + var existingReminder = _reminderRecordDataAccess.GetReminderRecordById(reminderRecord.Id); + if (existingReminder.Metric == ReminderMetric.Both) + { + existingReminder.Date = existingReminder.Date.AddMonths((int)existingReminder.ReminderMonthInterval); + existingReminder.Mileage += (int)existingReminder.ReminderMileageInterval; + } + else if (existingReminder.Metric == ReminderMetric.Odometer) + { + existingReminder.Mileage += (int)existingReminder.ReminderMileageInterval; + } + else if (existingReminder.Metric == ReminderMetric.Date) + { + existingReminder.Date = existingReminder.Date.AddMonths((int)existingReminder.ReminderMonthInterval); + } + //save to db. + _reminderRecordDataAccess.SaveReminderRecordToVehicle(existingReminder); + //set urgency to not urgent so it gets excluded in count. + reminderRecord.Urgency = ReminderUrgency.NotUrgent; + } + } + //check for very urgent or past due reminders that were not eligible for recurring. + var pastDueAndUrgentReminders = result.Where(x => x.Urgency == ReminderUrgency.VeryUrgent || x.Urgency == ReminderUrgency.PastDue); + if (pastDueAndUrgentReminders.Any()) { return Json(true); } @@ -1067,7 +1101,10 @@ namespace CarCareTracker.Controllers Notes = result.Notes, VehicleId = result.VehicleId, Mileage = result.Mileage, - Metric = result.Metric + Metric = result.Metric, + IsRecurring = result.IsRecurring, + ReminderMileageInterval = result.ReminderMileageInterval, + ReminderMonthInterval = result.ReminderMonthInterval }; return PartialView("_ReminderRecordModal", convertedResult); } @@ -1272,7 +1309,8 @@ namespace CarCareTracker.Controllers Files = existingRecord.Files }; _serviceRecordDataAccess.SaveServiceRecordToVehicle(newRecord); - } else if (existingRecord.ImportMode == ImportMode.RepairRecord) + } + else if (existingRecord.ImportMode == ImportMode.RepairRecord) { var newRecord = new CollisionRecord() { @@ -1285,7 +1323,8 @@ namespace CarCareTracker.Controllers Files = existingRecord.Files }; _collisionRecordDataAccess.SaveCollisionRecordToVehicle(newRecord); - } else if (existingRecord.ImportMode == ImportMode.UpgradeRecord) + } + else if (existingRecord.ImportMode == ImportMode.UpgradeRecord) { var newRecord = new UpgradeRecord() { diff --git a/Enum/ReminderMileageInterval.cs b/Enum/ReminderMileageInterval.cs new file mode 100644 index 0000000..1400aaa --- /dev/null +++ b/Enum/ReminderMileageInterval.cs @@ -0,0 +1,13 @@ +namespace CarCareTracker.Models +{ + public enum ReminderMileageInterval + { + FiveHundredMiles = 500, + OneThousandMiles = 1000, + ThreeThousandMiles = 3000, + FiveThousandMiles = 5000, + SevenThousandFiveHundredMiles = 7500, + TenThousandMiles = 10000, + FiftyThousandMiles = 50000 + } +} diff --git a/Enum/ReminderMonthInterval.cs b/Enum/ReminderMonthInterval.cs new file mode 100644 index 0000000..fb1148e --- /dev/null +++ b/Enum/ReminderMonthInterval.cs @@ -0,0 +1,10 @@ +namespace CarCareTracker.Models +{ + public enum ReminderMonthInterval + { + ThreeMonths = 3, + SixMonths = 6, + OneYear = 12, + FiveYears = 60 + } +} diff --git a/Helper/ReminderHelper.cs b/Helper/ReminderHelper.cs index 7e9ff6e..0709b37 100644 --- a/Helper/ReminderHelper.cs +++ b/Helper/ReminderHelper.cs @@ -21,7 +21,8 @@ namespace CarCareTracker.Helper Mileage = reminder.Mileage, Description = reminder.Description, Notes = reminder.Notes, - Metric = reminder.Metric + Metric = reminder.Metric, + IsRecurring = reminder.IsRecurring }; if (reminder.Metric == ReminderMetric.Both) { diff --git a/Models/Reminder/ReminderRecord.cs b/Models/Reminder/ReminderRecord.cs index 13e8f7a..96ab3f0 100644 --- a/Models/Reminder/ReminderRecord.cs +++ b/Models/Reminder/ReminderRecord.cs @@ -8,6 +8,9 @@ public int Mileage { get; set; } public string Description { get; set; } public string Notes { get; set; } + public bool IsRecurring { get; set; } = false; + public ReminderMileageInterval ReminderMileageInterval { get; set; } = ReminderMileageInterval.FiveThousandMiles; + public ReminderMonthInterval ReminderMonthInterval { get; set; } = ReminderMonthInterval.OneYear; public ReminderMetric Metric { get; set; } = ReminderMetric.Date; } } diff --git a/Models/Reminder/ReminderRecordInput.cs b/Models/Reminder/ReminderRecordInput.cs index f216390..5694afb 100644 --- a/Models/Reminder/ReminderRecordInput.cs +++ b/Models/Reminder/ReminderRecordInput.cs @@ -8,6 +8,9 @@ public int Mileage { get; set; } public string Description { get; set; } public string Notes { get; set; } + public bool IsRecurring { get; set; } = false; + public ReminderMileageInterval ReminderMileageInterval { get; set; } = ReminderMileageInterval.FiveThousandMiles; + public ReminderMonthInterval ReminderMonthInterval { get; set; } = ReminderMonthInterval.OneYear; public ReminderMetric Metric { get; set; } = ReminderMetric.Date; public ReminderRecord ToReminderRecord() { return new ReminderRecord { Id = Id, @@ -16,6 +19,9 @@ Mileage = Mileage, Description = Description, Metric = Metric, + IsRecurring = IsRecurring, + ReminderMileageInterval = ReminderMileageInterval, + ReminderMonthInterval = ReminderMonthInterval, Notes = Notes }; } } } diff --git a/Models/Reminder/ReminderRecordViewModel.cs b/Models/Reminder/ReminderRecordViewModel.cs index 1f3f62e..5a9f65a 100644 --- a/Models/Reminder/ReminderRecordViewModel.cs +++ b/Models/Reminder/ReminderRecordViewModel.cs @@ -13,5 +13,9 @@ /// public ReminderMetric Metric { get; set; } = ReminderMetric.Date; public ReminderUrgency Urgency { get; set; } = ReminderUrgency.NotUrgent; + /// + /// Recurring Reminders + /// + public bool IsRecurring { get; set; } = false; } }