Merge pull request #894 from hargata/Hargata/893

added urgency and due metrics for recurring reminder selector
This commit is contained in:
Hargata Softworks
2025-03-26 11:51:30 -06:00
committed by GitHub
7 changed files with 57 additions and 18 deletions

View File

@@ -64,8 +64,9 @@ namespace CarCareTracker.Controllers
[HttpGet]
public IActionResult GetRecurringReminderRecordsByVehicleId(int vehicleId)
{
var result = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicleId);
var result = GetRemindersAndUrgency(vehicleId, DateTime.Now);
result.RemoveAll(x => !x.IsRecurring);
result = result.OrderByDescending(x => x.Urgency).ThenBy(x => x.Description).ToList();
return PartialView("_RecurringReminderSelector", result);
}
[HttpPost]

View File

@@ -38,7 +38,7 @@
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('collisionRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
<a onclick="showRecurringReminderSelector('collisionRecordDescription', 'collisionRecordNotes')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}

View File

@@ -5,7 +5,7 @@
var userLanguage = userConfig.UserLanguage;
}
@using CarCareTracker.Helper
@model List<ReminderRecord>
@model List<ReminderRecordViewModel>
@if (Model.Count() > 1)
{
<div class="mb-2">
@@ -16,9 +16,25 @@
<select class="form-select" id="recurringReminderInput">
@if (Model.Any())
{
@foreach (ReminderRecord reminderRecord in Model)
@foreach (ReminderRecordViewModel reminderRecord in Model)
{
<!option value="@reminderRecord.Id">@reminderRecord.Description</!option>
@switch(reminderRecord.UserMetric){
case (ReminderMetric.Both):
<!option value="@reminderRecord.Id" data-description="@reminderRecord.Description" class="@StaticHelper.GetReminderUrgencyColor(reminderRecord.Urgency)">
@($"{reminderRecord.Description} | {reminderRecord.Date.ToShortDateString()} | {reminderRecord.Mileage}")
</!option>
break;
case (ReminderMetric.Odometer):
<!option value="@reminderRecord.Id" data-description="@reminderRecord.Description" class="@StaticHelper.GetReminderUrgencyColor(reminderRecord.Urgency)">
@($"{reminderRecord.Description} | {reminderRecord.Mileage}")
</!option>
break;
case (ReminderMetric.Date):
<!option value="@reminderRecord.Id" data-description="@reminderRecord.Description" class="@StaticHelper.GetReminderUrgencyColor(reminderRecord.Urgency)">
@($"{reminderRecord.Description} | {reminderRecord.Date.ToShortDateString()}")
</!option>
break;
}
}
} else
{
@@ -27,11 +43,26 @@
</select>
<div id="recurringMultipleReminders" style="display:none;">
<ul class="list-group">
@foreach (ReminderRecord reminderRecord in Model)
@foreach (ReminderRecordViewModel reminderRecord in Model)
{
<li class="list-group-item text-start">
<input class="form-check-input" type="checkbox" value="@reminderRecord.Id" id="recurringReminder_@reminderRecord.Id">
<label class="form-check-label stretched-link" for="recurringReminder_@reminderRecord.Id">@reminderRecord.Description</label>
<input class="form-check-input" type="checkbox" value="@reminderRecord.Id" data-description="@reminderRecord.Description" id="recurringReminder_@reminderRecord.Id">
<label class="form-check-label stretched-link" for="recurringReminder_@reminderRecord.Id">
@reminderRecord.Description
<br /><small class="badge @StaticHelper.GetReminderUrgencyColor(reminderRecord.Urgency)">
@switch (reminderRecord.UserMetric){
case (ReminderMetric.Both):
<i class='bi bi-calendar-event me-2'></i>@reminderRecord.Date.ToShortDateString()<i class='bi bi-speedometer ms-2 me-2'></i>@reminderRecord.Mileage
break;
case (ReminderMetric.Odometer):
<i class='bi bi-speedometer me-2'></i>@reminderRecord.Mileage
break;
case (ReminderMetric.Date):
<i class='bi bi-calendar-event me-2'></i>@reminderRecord.Date.ToShortDateString()
break;
}
</small>
</label>
</li>
}
</ul>

View File

@@ -38,7 +38,7 @@
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('serviceRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
<a onclick="showRecurringReminderSelector('serviceRecordDescription', 'serviceRecordNotes')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}

View File

@@ -28,7 +28,7 @@
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('taxRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
<a onclick="showRecurringReminderSelector('taxRecordDescription', 'taxRecordNotes')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}

View File

@@ -38,7 +38,7 @@
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('upgradeRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
<a onclick="showRecurringReminderSelector('upgradeRecordDescription', 'upgradeRecordNotes')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}

View File

@@ -336,7 +336,7 @@ function moveRecord(recordId, source, dest) {
}
});
}
function showRecurringReminderSelector(descriptionFieldName) {
function showRecurringReminderSelector(descriptionFieldName, noteFieldName) {
$.get(`/Vehicle/GetRecurringReminderRecordsByVehicleId?vehicleId=${GetVehicleId().vehicleId}`, function (data) {
if (data) {
//prompt user to select a recurring reminder
@@ -356,9 +356,16 @@ function showRecurringReminderSelector(descriptionFieldName) {
}).then(function (result) {
if (result.isConfirmed) {
recurringReminderRecordId = result.value.selectedRecurringReminderData.ids;
var descriptionField = $(`#${descriptionFieldName}`);
let descriptionField = $(`#${descriptionFieldName}`);
let noteField = $(`#${noteFieldName}`);
if (descriptionField.length > 0) {
descriptionField.val(result.value.selectedRecurringReminderData.text);
let descriptionFieldText = result.value.selectedRecurringReminderData.text.join(', ');
descriptionField.val(descriptionFieldText);
}
if (noteField.length > 0 && result.value.selectedRecurringReminderData.text.length > 1) {
result.value.selectedRecurringReminderData.text.map(x => {
noteField.append(`- ${x}\r\n`);
});
}
}
});
@@ -583,7 +590,7 @@ function getAndValidateSelectedRecurringReminder() {
$("#recurringMultipleReminders :checked").map(function () {
selectedRecurringRemindersArray.push({
value: this.value,
text: $(this).parent().find('.form-check-label').text()
text: $(this).attr("data-description")
});
});
if (selectedRecurringRemindersArray.length == 0) {
@@ -596,13 +603,13 @@ function getAndValidateSelectedRecurringReminder() {
return {
hasError: false,
ids: selectedRecurringRemindersArray.map(x=>x.value),
text: selectedRecurringRemindersArray.map(x=>x.text).join(', ')
text: selectedRecurringRemindersArray.map(x=>x.text)
}
}
} else {
//validate single reminder
var selectedRecurringReminder = $("#recurringReminderInput").val();
var selectedRecurringReminderText = $("#recurringReminderInput option:selected").text();
var selectedRecurringReminderText = $("#recurringReminderInput option:selected").attr("data-description");
if (!selectedRecurringReminder || parseInt(selectedRecurringReminder) == 0) {
return {
hasError: true,
@@ -613,7 +620,7 @@ function getAndValidateSelectedRecurringReminder() {
return {
hasError: false,
ids: [selectedRecurringReminder],
text: selectedRecurringReminderText
text: [selectedRecurringReminderText]
}
}
}