Merge pull request #126 from hargata/Hargata/recurring.reminder

Hargata/recurring.reminder
This commit is contained in:
Hargata Softworks
2024-01-20 09:02:39 -07:00
committed by GitHub
9 changed files with 130 additions and 15 deletions

View File

@@ -222,14 +222,16 @@ namespace CarCareTracker.Controllers
var vehicleRecords = _supplyRecordDataAccess.GetSupplyRecordsByVehicleId(vehicleId); var vehicleRecords = _supplyRecordDataAccess.GetSupplyRecordsByVehicleId(vehicleId);
if (vehicleRecords.Any()) if (vehicleRecords.Any())
{ {
var exportData = vehicleRecords.Select(x => new SupplyRecordExportModel { var exportData = vehicleRecords.Select(x => new SupplyRecordExportModel
{
Date = x.Date.ToShortDateString(), Date = x.Date.ToShortDateString(),
Description = x.Description, Description = x.Description,
Cost = x.Cost.ToString("C"), Cost = x.Cost.ToString("C"),
PartNumber = x.PartNumber, PartNumber = x.PartNumber,
PartQuantity = x.Quantity.ToString(), PartQuantity = x.Quantity.ToString(),
PartSupplier = x.PartSupplier, PartSupplier = x.PartSupplier,
Notes = x.Notes }); Notes = x.Notes
});
using (var writer = new StreamWriter(fullExportFilePath)) using (var writer = new StreamWriter(fullExportFilePath))
{ {
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
@@ -265,7 +267,8 @@ namespace CarCareTracker.Controllers
var vehicleRecords = _planRecordDataAccess.GetPlanRecordsByVehicleId(vehicleId); var vehicleRecords = _planRecordDataAccess.GetPlanRecordsByVehicleId(vehicleId);
if (vehicleRecords.Any()) if (vehicleRecords.Any())
{ {
var exportData = vehicleRecords.Select(x => new PlanRecordExportModel { var exportData = vehicleRecords.Select(x => new PlanRecordExportModel
{
DateCreated = x.DateCreated.ToString("G"), DateCreated = x.DateCreated.ToString("G"),
DateModified = x.DateModified.ToString("G"), DateModified = x.DateModified.ToString("G"),
Description = x.Description, Description = x.Description,
@@ -273,7 +276,8 @@ namespace CarCareTracker.Controllers
Type = x.ImportMode.ToString(), Type = x.ImportMode.ToString(),
Priority = x.Priority.ToString(), Priority = x.Priority.ToString(),
Progress = x.Progress.ToString(), Progress = x.Progress.ToString(),
Notes = x.Notes }); Notes = x.Notes
});
using (var writer = new StreamWriter(fullExportFilePath)) using (var writer = new StreamWriter(fullExportFilePath))
{ {
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
@@ -1022,7 +1026,37 @@ namespace CarCareTracker.Controllers
public IActionResult GetVehicleHaveUrgentOrPastDueReminders(int vehicleId) public IActionResult GetVehicleHaveUrgentOrPastDueReminders(int vehicleId)
{ {
var result = GetRemindersAndUrgency(vehicleId, DateTime.Now); 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); return Json(true);
} }
@@ -1067,7 +1101,10 @@ namespace CarCareTracker.Controllers
Notes = result.Notes, Notes = result.Notes,
VehicleId = result.VehicleId, VehicleId = result.VehicleId,
Mileage = result.Mileage, Mileage = result.Mileage,
Metric = result.Metric Metric = result.Metric,
IsRecurring = result.IsRecurring,
ReminderMileageInterval = result.ReminderMileageInterval,
ReminderMonthInterval = result.ReminderMonthInterval
}; };
return PartialView("_ReminderRecordModal", convertedResult); return PartialView("_ReminderRecordModal", convertedResult);
} }
@@ -1272,7 +1309,8 @@ namespace CarCareTracker.Controllers
Files = existingRecord.Files Files = existingRecord.Files
}; };
_serviceRecordDataAccess.SaveServiceRecordToVehicle(newRecord); _serviceRecordDataAccess.SaveServiceRecordToVehicle(newRecord);
} else if (existingRecord.ImportMode == ImportMode.RepairRecord) }
else if (existingRecord.ImportMode == ImportMode.RepairRecord)
{ {
var newRecord = new CollisionRecord() var newRecord = new CollisionRecord()
{ {
@@ -1285,7 +1323,8 @@ namespace CarCareTracker.Controllers
Files = existingRecord.Files Files = existingRecord.Files
}; };
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(newRecord); _collisionRecordDataAccess.SaveCollisionRecordToVehicle(newRecord);
} else if (existingRecord.ImportMode == ImportMode.UpgradeRecord) }
else if (existingRecord.ImportMode == ImportMode.UpgradeRecord)
{ {
var newRecord = new UpgradeRecord() var newRecord = new UpgradeRecord()
{ {

View File

@@ -0,0 +1,13 @@
namespace CarCareTracker.Models
{
public enum ReminderMileageInterval
{
FiveHundredMiles = 500,
OneThousandMiles = 1000,
ThreeThousandMiles = 3000,
FiveThousandMiles = 5000,
SevenThousandFiveHundredMiles = 7500,
TenThousandMiles = 10000,
FiftyThousandMiles = 50000
}
}

View File

@@ -0,0 +1,10 @@
namespace CarCareTracker.Models
{
public enum ReminderMonthInterval
{
ThreeMonths = 3,
SixMonths = 6,
OneYear = 12,
FiveYears = 60
}
}

View File

@@ -21,7 +21,8 @@ namespace CarCareTracker.Helper
Mileage = reminder.Mileage, Mileage = reminder.Mileage,
Description = reminder.Description, Description = reminder.Description,
Notes = reminder.Notes, Notes = reminder.Notes,
Metric = reminder.Metric Metric = reminder.Metric,
IsRecurring = reminder.IsRecurring
}; };
if (reminder.Metric == ReminderMetric.Both) if (reminder.Metric == ReminderMetric.Both)
{ {

View File

@@ -8,6 +8,9 @@
public int Mileage { get; set; } public int Mileage { get; set; }
public string Description { get; set; } public string Description { get; set; }
public string Notes { 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 ReminderMetric Metric { get; set; } = ReminderMetric.Date;
} }
} }

View File

@@ -8,6 +8,9 @@
public int Mileage { get; set; } public int Mileage { get; set; }
public string Description { get; set; } public string Description { get; set; }
public string Notes { 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 ReminderMetric Metric { get; set; } = ReminderMetric.Date;
public ReminderRecord ToReminderRecord() { return new ReminderRecord { public ReminderRecord ToReminderRecord() { return new ReminderRecord {
Id = Id, Id = Id,
@@ -16,6 +19,9 @@
Mileage = Mileage, Mileage = Mileage,
Description = Description, Description = Description,
Metric = Metric, Metric = Metric,
IsRecurring = IsRecurring,
ReminderMileageInterval = ReminderMileageInterval,
ReminderMonthInterval = ReminderMonthInterval,
Notes = Notes }; } Notes = Notes }; }
} }
} }

View File

@@ -13,5 +13,9 @@
/// </summary> /// </summary>
public ReminderMetric Metric { get; set; } = ReminderMetric.Date; public ReminderMetric Metric { get; set; } = ReminderMetric.Date;
public ReminderUrgency Urgency { get; set; } = ReminderUrgency.NotUrgent; public ReminderUrgency Urgency { get; set; } = ReminderUrgency.NotUrgent;
/// <summary>
/// Recurring Reminders
/// </summary>
public bool IsRecurring { get; set; } = false;
} }
} }

View File

@@ -41,6 +41,27 @@
<div class="col-md-6 col-12"> <div class="col-md-6 col-12">
<label for="reminderNotes">Notes(optional)</label> <label for="reminderNotes">Notes(optional)</label>
<textarea id="reminderNotes" class="form-control" rows="5">@Model.Notes</textarea> <textarea id="reminderNotes" class="form-control" rows="5">@Model.Notes</textarea>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" onChange="enableRecurring()" role="switch" id="reminderIsRecurring" checked="@Model.IsRecurring">
<label class="form-check-label" for="reminderIsRecurring">Is Recurring</label>
</div>
<label for="reminderRecurringMileage">Odometer</label>
<select class="form-select" id="reminderRecurringMileage" @(Model.IsRecurring ? "" : "disabled")>
<!option value="FiveHundredMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.FiveHundredMiles || isNew ? "selected" : "")>500 mi. / Km</!option>
<!option value="OneThousandMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.OneThousandMiles ? "selected" : "")>1000 mi. / Km</!option>
<!option value="ThreeThousandMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.ThreeThousandMiles ? "selected" : "")>3000 mi. / Km</!option>
<!option value="FiveThousandMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.FiveThousandMiles || isNew ? "selected" : "")>5000 mi. / Km</!option>
<!option value="SevenThousandFiveHundredMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.SevenThousandFiveHundredMiles ? "selected" : "")>7500 mi. / Km</!option>
<!option value="TenThousandMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.TenThousandMiles ? "selected" : "")>10000 mi. / Km</!option>
<!option value="FiftyThousandMiles" @(Model.ReminderMileageInterval == ReminderMileageInterval.FiftyThousandMiles ? "selected" : "")>50000 mi. / Km</!option>
</select>
<label for="reminderRecurringMonth">Month</label>
<select class="form-select" id="reminderRecurringMonth" @(Model.IsRecurring ? "" : "disabled")>
<!option value="ThreeMonths" @(Model.ReminderMonthInterval == ReminderMonthInterval.ThreeMonths || isNew ? "selected" : "")>3 Months</!option>
<!option value="SixMonths" @(Model.ReminderMonthInterval == ReminderMonthInterval.SixMonths ? "selected" : "")>6 Months</!option>
<!option value="OneYear" @(Model.ReminderMonthInterval == ReminderMonthInterval.OneYear ? "selected" : "")>1 Year</!option>
<!option value="FiveYears" @(Model.ReminderMonthInterval == ReminderMonthInterval.FiveYears ? "selected" : "")>5 Years</!option>
</select>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -69,12 +69,27 @@ function appendMileageToOdometer(increment) {
reminderMileage += increment; reminderMileage += increment;
$("#reminderMileage").val(reminderMileage); $("#reminderMileage").val(reminderMileage);
} }
function enableRecurring() {
var reminderIsRecurring = $("#reminderIsRecurring").is(":checked");
if (reminderIsRecurring) {
$("#reminderRecurringMileage").attr('disabled', false);
$("#reminderRecurringMonth").attr('disabled', false);
} else {
$("#reminderRecurringMileage").attr('disabled', true);
$("#reminderRecurringMonth").attr('disabled', true);
}
}
function getAndValidateReminderRecordValues() { function getAndValidateReminderRecordValues() {
var reminderDate = $("#reminderDate").val(); var reminderDate = $("#reminderDate").val();
var reminderMileage = $("#reminderMileage").val(); var reminderMileage = $("#reminderMileage").val();
var reminderDescription = $("#reminderDescription").val(); var reminderDescription = $("#reminderDescription").val();
var reminderNotes = $("#reminderNotes").val(); var reminderNotes = $("#reminderNotes").val();
var reminderOption = $('#reminderOptions input:radio:checked').val(); var reminderOption = $('#reminderOptions input:radio:checked').val();
var reminderIsRecurring = $("#reminderIsRecurring").is(":checked");
var reminderRecurringMonth = $("#reminderRecurringMonth").val();
var reminderRecurringMileage = $("#reminderRecurringMileage").val();
var vehicleId = GetVehicleId().vehicleId; var vehicleId = GetVehicleId().vehicleId;
var reminderId = getReminderRecordModelData().id; var reminderId = getReminderRecordModelData().id;
//validation //validation
@@ -118,6 +133,9 @@ function getAndValidateReminderRecordValues() {
mileage: reminderMileage, mileage: reminderMileage,
description: reminderDescription, description: reminderDescription,
notes: reminderNotes, notes: reminderNotes,
metric: reminderOption metric: reminderOption,
isRecurring: reminderIsRecurring,
reminderMileageInterval: reminderRecurringMileage,
reminderMonthInterval: reminderRecurringMonth
} }
} }