added shared method to push back recurring reminders.

This commit is contained in:
DESKTOP-GENO133\IvanPlex
2024-02-21 10:10:28 -07:00
parent 0088c74b20
commit 0590f991d2
12 changed files with 132 additions and 22 deletions

View File

@@ -747,6 +747,11 @@ namespace CarCareTracker.Controllers
{ {
serviceRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(serviceRecord.Supplies, DateTime.Parse(serviceRecord.Date), serviceRecord.Description); serviceRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(serviceRecord.Supplies, DateTime.Parse(serviceRecord.Date), serviceRecord.Description);
} }
//push back any reminders
if (serviceRecord.ReminderRecordId != default)
{
PushbackRecurringReminderRecordWithChecks(serviceRecord.ReminderRecordId);
}
var result = _serviceRecordDataAccess.SaveServiceRecordToVehicle(serviceRecord.ToServiceRecord()); var result = _serviceRecordDataAccess.SaveServiceRecordToVehicle(serviceRecord.ToServiceRecord());
return Json(result); return Json(result);
} }
@@ -819,6 +824,11 @@ namespace CarCareTracker.Controllers
{ {
collisionRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(collisionRecord.Supplies, DateTime.Parse(collisionRecord.Date), collisionRecord.Description); collisionRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(collisionRecord.Supplies, DateTime.Parse(collisionRecord.Date), collisionRecord.Description);
} }
//push back any reminders
if (collisionRecord.ReminderRecordId != default)
{
PushbackRecurringReminderRecordWithChecks(collisionRecord.ReminderRecordId);
}
var result = _collisionRecordDataAccess.SaveCollisionRecordToVehicle(collisionRecord.ToCollisionRecord()); var result = _collisionRecordDataAccess.SaveCollisionRecordToVehicle(collisionRecord.ToCollisionRecord());
return Json(result); return Json(result);
} }
@@ -1413,15 +1423,47 @@ namespace CarCareTracker.Controllers
result = result.OrderByDescending(x => x.Urgency).ToList(); result = result.OrderByDescending(x => x.Urgency).ToList();
return PartialView("_ReminderRecords", result); return PartialView("_ReminderRecords", result);
} }
[HttpGet]
public IActionResult GetRecurringReminderRecordsByVehicleId(int vehicleId)
{
var result = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicleId);
result.RemoveAll(x => !x.IsRecurring);
return PartialView("_RecurringReminderSelector", result);
}
[HttpPost] [HttpPost]
public IActionResult PushbackRecurringReminderRecord(int reminderRecordId) public IActionResult PushbackRecurringReminderRecord(int reminderRecordId)
{ {
var existingReminder = _reminderRecordDataAccess.GetReminderRecordById(reminderRecordId); var result = PushbackRecurringReminderRecordWithChecks(reminderRecordId);
existingReminder = _reminderHelper.GetUpdatedRecurringReminderRecord(existingReminder);
//save to db.
var result = _reminderRecordDataAccess.SaveReminderRecordToVehicle(existingReminder);
return Json(result); return Json(result);
} }
private bool PushbackRecurringReminderRecordWithChecks(int reminderRecordId)
{
try
{
var existingReminder = _reminderRecordDataAccess.GetReminderRecordById(reminderRecordId);
if (existingReminder is not null && existingReminder.Id != default && existingReminder.IsRecurring)
{
existingReminder = _reminderHelper.GetUpdatedRecurringReminderRecord(existingReminder);
//save to db.
var reminderUpdateResult = _reminderRecordDataAccess.SaveReminderRecordToVehicle(existingReminder);
if (!reminderUpdateResult)
{
_logger.LogError("Unable to update reminder either because the reminder no longer exists or is no longer recurring");
return false;
}
return true;
}
else
{
_logger.LogError("Unable to update reminder because it no longer exists.");
return false;
}
} catch (Exception ex)
{
_logger.LogError(ex.Message);
return false;
}
}
[HttpPost] [HttpPost]
public IActionResult SaveReminderRecordToVehicleId(ReminderRecordInput reminderRecord) public IActionResult SaveReminderRecordToVehicleId(ReminderRecordInput reminderRecord)
{ {
@@ -1505,6 +1547,11 @@ namespace CarCareTracker.Controllers
{ {
upgradeRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(upgradeRecord.Supplies, DateTime.Parse(upgradeRecord.Date), upgradeRecord.Description); upgradeRecord.RequisitionHistory = RequisitionSupplyRecordsByUsage(upgradeRecord.Supplies, DateTime.Parse(upgradeRecord.Date), upgradeRecord.Description);
} }
//push back any reminders
if (upgradeRecord.ReminderRecordId != default)
{
PushbackRecurringReminderRecordWithChecks(upgradeRecord.ReminderRecordId);
}
var result = _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(upgradeRecord.ToUpgradeRecord()); var result = _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(upgradeRecord.ToUpgradeRecord());
return Json(result); return Json(result);
} }
@@ -1894,21 +1941,7 @@ namespace CarCareTracker.Controllers
//push back any reminders //push back any reminders
if (existingRecord.ReminderRecordId != default) if (existingRecord.ReminderRecordId != default)
{ {
var existingReminder = _reminderRecordDataAccess.GetReminderRecordById(existingRecord.ReminderRecordId); PushbackRecurringReminderRecordWithChecks(existingRecord.ReminderRecordId);
if (existingReminder is not null && existingReminder.Id != default && existingReminder.IsRecurring)
{
existingReminder = _reminderHelper.GetUpdatedRecurringReminderRecord(existingReminder);
//save to db.
var reminderUpdateResult = _reminderRecordDataAccess.SaveReminderRecordToVehicle(existingReminder);
if (!reminderUpdateResult)
{
_logger.LogError("Unable to update reminder either because the reminder no longer exists or is no longer recurring");
}
}
else
{
_logger.LogError("Unable to update reminder because it no longer exists.");
}
} }
} }
return Json(result); return Json(result);

View File

@@ -4,6 +4,7 @@
{ {
public int Id { get; set; } public int Id { get; set; }
public int VehicleId { get; set; } public int VehicleId { get; set; }
public int ReminderRecordId { get; set; }
public string Date { get; set; } = DateTime.Now.ToShortDateString(); public string Date { get; set; } = DateTime.Now.ToShortDateString();
public int Mileage { get; set; } public int Mileage { get; set; }
public string Description { get; set; } public string Description { get; set; }

View File

@@ -4,6 +4,7 @@
{ {
public int Id { get; set; } public int Id { get; set; }
public int VehicleId { get; set; } public int VehicleId { get; set; }
public int ReminderRecordId { get; set; }
public string Date { get; set; } = DateTime.Now.ToShortDateString(); public string Date { get; set; } = DateTime.Now.ToShortDateString();
public int Mileage { get; set; } public int Mileage { get; set; }
public string Description { get; set; } public string Description { get; set; }

View File

@@ -4,6 +4,7 @@
{ {
public int Id { get; set; } public int Id { get; set; }
public int VehicleId { get; set; } public int VehicleId { get; set; }
public int ReminderRecordId { get; set; }
public string Date { get; set; } = DateTime.Now.ToShortDateString(); public string Date { get; set; } = DateTime.Now.ToShortDateString();
public int Mileage { get; set; } public int Mileage { get; set; }
public string Description { get; set; } public string Description { get; set; }

View File

@@ -26,6 +26,14 @@
<input type="number" inputmode="numeric" id="collisionRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading when repaired")" value="@(isNew ? "" : Model.Mileage)"> <input type="number" inputmode="numeric" id="collisionRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading when repaired")" value="@(isNew ? "" : Model.Mileage)">
<label for="collisionRecordDescription">@translator.Translate(userLanguage,"Description")</label> <label for="collisionRecordDescription">@translator.Translate(userLanguage,"Description")</label>
<input type="text" id="collisionRecordDescription" class="form-control" placeholder="@translator.Translate(userLanguage,"Description of item(s) repaired(i.e. Alternator)")" value="@Model.Description"> <input type="text" id="collisionRecordDescription" class="form-control" placeholder="@translator.Translate(userLanguage,"Description of item(s) repaired(i.e. Alternator)")" value="@Model.Description">
@if (isNew)
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('collisionRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}
<label for="collisionRecordCost">@translator.Translate(userLanguage,"Cost")</label> <label for="collisionRecordCost">@translator.Translate(userLanguage,"Cost")</label>
<input type="text" inputmode="decimal" id="collisionRecordCost" class="form-control" placeholder="@translator.Translate(userLanguage,"Cost of the repair")" value="@(isNew ? "" : Model.Cost)"> <input type="text" inputmode="decimal" id="collisionRecordCost" class="form-control" placeholder="@translator.Translate(userLanguage,"Cost of the repair")" value="@(isNew ? "" : Model.Cost)">
@if (isNew) @if (isNew)
@@ -113,6 +121,7 @@
<script> <script>
var uploadedFiles = []; var uploadedFiles = [];
var selectedSupplies = []; var selectedSupplies = [];
var recurringReminderRecordId = 0;
getUploadedFilesFromModel(); getUploadedFilesFromModel();
function getUploadedFilesFromModel() { function getUploadedFilesFromModel() {
@foreach (UploadedFiles filesUploaded in Model.Files) @foreach (UploadedFiles filesUploaded in Model.Files)

View File

@@ -0,0 +1,13 @@
@model List<ReminderRecord>
<select class="form-select" id="recurringReminderInput">
@if (Model.Any())
{
@foreach (ReminderRecord reminderRecord in Model)
{
<!option value="@reminderRecord.Id">@reminderRecord.Description</!option>
}
} else
{
<!option value="0">No Recurring Reminders Found</!option>
}
</select>

View File

@@ -26,6 +26,14 @@
<input type="number" inputmode="numeric" id="serviceRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading when serviced")" value="@(isNew ? "" : Model.Mileage)"> <input type="number" inputmode="numeric" id="serviceRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading when serviced")" value="@(isNew ? "" : Model.Mileage)">
<label for="serviceRecordDescription">@translator.Translate(userLanguage,"Description")</label> <label for="serviceRecordDescription">@translator.Translate(userLanguage,"Description")</label>
<input type="text" id="serviceRecordDescription" class="form-control" placeholder="@translator.Translate(userLanguage,"Description of item(s) serviced(i.e. Oil Change)")" value="@Model.Description"> <input type="text" id="serviceRecordDescription" class="form-control" placeholder="@translator.Translate(userLanguage,"Description of item(s) serviced(i.e. Oil Change)")" value="@Model.Description">
@if (isNew)
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('serviceRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}
<label for="serviceRecordCost">@translator.Translate(userLanguage,"Cost")</label> <label for="serviceRecordCost">@translator.Translate(userLanguage,"Cost")</label>
<input type="text" inputmode="decimal" id="serviceRecordCost" class="form-control" placeholder="@translator.Translate(userLanguage,"Cost of the service")" value="@(isNew ? "" : Model.Cost)"> <input type="text" inputmode="decimal" id="serviceRecordCost" class="form-control" placeholder="@translator.Translate(userLanguage,"Cost of the service")" value="@(isNew ? "" : Model.Cost)">
@if (isNew) @if (isNew)
@@ -113,6 +121,7 @@
<script> <script>
var uploadedFiles = []; var uploadedFiles = [];
var selectedSupplies = []; var selectedSupplies = [];
var recurringReminderRecordId = 0;
getUploadedFilesFromModel(); getUploadedFilesFromModel();
function getUploadedFilesFromModel() { function getUploadedFilesFromModel() {
@foreach (UploadedFiles filesUploaded in Model.Files) @foreach (UploadedFiles filesUploaded in Model.Files)

View File

@@ -26,6 +26,14 @@
<input type="number" inputmode="numeric" id="upgradeRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading when upgraded/modded")" value="@(isNew ? "" : Model.Mileage)"> <input type="number" inputmode="numeric" id="upgradeRecordMileage" class="form-control" placeholder="@translator.Translate(userLanguage,"Odometer reading when upgraded/modded")" value="@(isNew ? "" : Model.Mileage)">
<label for="upgradeRecordDescription">@translator.Translate(userLanguage,"Description")</label> <label for="upgradeRecordDescription">@translator.Translate(userLanguage,"Description")</label>
<input type="text" id="upgradeRecordDescription" class="form-control" placeholder="@translator.Translate(userLanguage,"Description of item(s) upgraded/modded")" value="@Model.Description"> <input type="text" id="upgradeRecordDescription" class="form-control" placeholder="@translator.Translate(userLanguage,"Description of item(s) upgraded/modded")" value="@Model.Description">
@if (isNew)
{
<div class="row">
<div class="col-12">
<a onclick="showRecurringReminderSelector('upgradeRecordDescription')" class="btn btn-link">@translator.Translate(userLanguage, "Select Reminder")</a>
</div>
</div>
}
<label for="upgradeRecordCost">@translator.Translate(userLanguage,"Cost")</label> <label for="upgradeRecordCost">@translator.Translate(userLanguage,"Cost")</label>
<input type="text" inputmode="decimal" id="upgradeRecordCost" class="form-control" placeholder="@translator.Translate(userLanguage,"Cost of the upgrade/mods")" value="@(isNew ? "" : Model.Cost)"> <input type="text" inputmode="decimal" id="upgradeRecordCost" class="form-control" placeholder="@translator.Translate(userLanguage,"Cost of the upgrade/mods")" value="@(isNew ? "" : Model.Cost)">
@if (isNew) @if (isNew)
@@ -113,6 +121,7 @@
<script> <script>
var uploadedFiles = []; var uploadedFiles = [];
var selectedSupplies = []; var selectedSupplies = [];
var recurringReminderRecordId = 0;
getUploadedFilesFromModel(); getUploadedFilesFromModel();
function getUploadedFilesFromModel() { function getUploadedFilesFromModel() {
@foreach (UploadedFiles filesUploaded in Model.Files) @foreach (UploadedFiles filesUploaded in Model.Files)

View File

@@ -130,6 +130,7 @@ function getAndValidateCollisionRecordValues() {
tags: collisionTags, tags: collisionTags,
addReminderRecord: addReminderRecord, addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields, extraFields: extraFields.extraFields,
requisitionHistory: supplyUsageHistory requisitionHistory: supplyUsageHistory,
recurringReminderId: recurringReminderRecordId
} }
} }

View File

@@ -130,6 +130,7 @@ function getAndValidateServiceRecordValues() {
tags: serviceTags, tags: serviceTags,
addReminderRecord: addReminderRecord, addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields, extraFields: extraFields.extraFields,
requisitionHistory: supplyUsageHistory requisitionHistory: supplyUsageHistory,
recurringReminderId: recurringReminderRecordId
} }
} }

View File

@@ -130,6 +130,7 @@ function getAndValidateUpgradeRecordValues() {
tags: upgradeTags, tags: upgradeTags,
addReminderRecord: addReminderRecord, addReminderRecord: addReminderRecord,
extraFields: extraFields.extraFields, extraFields: extraFields.extraFields,
requisitionHistory: supplyUsageHistory requisitionHistory: supplyUsageHistory,
recurringReminderId: recurringReminderRecordId
} }
} }

View File

@@ -562,4 +562,35 @@ function handleTableRowClick(e, callBack, rowId) {
removeFromSelectedRows($(e).attr('data-rowId')); removeFromSelectedRows($(e).attr('data-rowId'));
$(e).removeClass('table-active'); $(e).removeClass('table-active');
} }
}
function showRecurringReminderSelector(descriptionFieldName) {
$.get(`/Vehicle/GetRecurringReminderRecordsByVehicleId?vehicleId=${GetVehicleId().vehicleId}`, function (data) {
if (data) {
//prompt user to select a recurring reminder
Swal.fire({
title: 'Select Recurring Reminder',
html: data,
confirmButtonText: 'Select',
focusConfirm: false,
preConfirm: () => {
const selectedRecurringReminder = $("#recurringReminderInput").val();
const selectedRecurringReminderText = $("#recurringReminderInput").text();
if (!selectedRecurringReminder || parseInt(selectedRecurringReminder) == 0) {
Swal.showValidationMessage(`You must select a recurring reminder`);
}
return { selectedRecurringReminder, selectedRecurringReminderText }
},
}).then(function (result) {
if (result.isConfirmed) {
recurringReminderRecordId = result.value.selectedRecurringReminder;
var descriptionField = $(`#${descriptionFieldName}`);
if (descriptionField.length > 0) {
descriptionField.val(result.value.selectedRecurringReminderText.trim());
}
}
});
} else {
errorToast(genericErrorMessage());
}
})
} }