first commit
This commit is contained in:
731
wwwroot/js/vehicle.js
Normal file
731
wwwroot/js/vehicle.js
Normal file
@@ -0,0 +1,731 @@
|
||||
$(document).ready(function () {
|
||||
var vehicleId = GetVehicleId().vehicleId;
|
||||
//bind tabs
|
||||
$('button[data-bs-toggle="tab"]').on('show.bs.tab', function (e) {
|
||||
switch (e.target.id) {
|
||||
case "servicerecord-tab":
|
||||
getVehicleServiceRecords(vehicleId);
|
||||
break;
|
||||
case "notes-tab":
|
||||
getVehicleNotes(vehicleId);
|
||||
break;
|
||||
case "gas-tab":
|
||||
getVehicleGasRecords(vehicleId);
|
||||
break;
|
||||
case "accident-tab":
|
||||
getVehicleCollisionRecords(vehicleId);
|
||||
break;
|
||||
case "tax-tab":
|
||||
getVehicleTaxRecords(vehicleId);
|
||||
break;
|
||||
case "report-tab":
|
||||
getVehicleReport(vehicleId);
|
||||
break;
|
||||
case "reminder-tab":
|
||||
getVehicleReminders(vehicleId);
|
||||
break;
|
||||
case "upgrade-tab":
|
||||
getVehicleUpgradeRecords(vehicleId);
|
||||
break;
|
||||
case "supply-tab":
|
||||
getVehicleSupplyRecords(vehicleId);
|
||||
break;
|
||||
case "plan-tab":
|
||||
getVehiclePlanRecords(vehicleId);
|
||||
break;
|
||||
case "odometer-tab":
|
||||
getVehicleOdometerRecords(vehicleId);
|
||||
break;
|
||||
}
|
||||
switch (e.relatedTarget.id) { //clear out previous tabs with grids in them to help with performance
|
||||
case "servicerecord-tab":
|
||||
$("#servicerecord-tab-pane").html("");
|
||||
break;
|
||||
case "gas-tab":
|
||||
$("#gas-tab-pane").html("");
|
||||
break;
|
||||
case "accident-tab":
|
||||
$("#accident-tab-pane").html("");
|
||||
break;
|
||||
case "tax-tab":
|
||||
$("#tax-tab-pane").html("");
|
||||
break;
|
||||
case "report-tab":
|
||||
$("#report-tab-pane").html("");
|
||||
break;
|
||||
case "reminder-tab":
|
||||
$("#reminder-tab-pane").html("");
|
||||
break;
|
||||
case "upgrade-tab":
|
||||
$("#upgrade-tab-pane").html("");
|
||||
break;
|
||||
case "notes-tab":
|
||||
$("#notes-tab-pane").html("");
|
||||
break;
|
||||
case "supply-tab":
|
||||
$("#supply-tab-pane").html("");
|
||||
break;
|
||||
case "plan-tab":
|
||||
$("#plan-tab-pane").html("");
|
||||
break;
|
||||
case "odometer-tab":
|
||||
$("#odometer-tab-pane").html("");
|
||||
break;
|
||||
}
|
||||
$(`.motovaultpro-tab #${e.target.id}`).addClass('active');
|
||||
$(`.motovaultpro-mobile-nav #${e.target.id}`).addClass('active');
|
||||
$(`.motovaultpro-tab #${e.relatedTarget.id}`).removeClass('active');
|
||||
$(`.motovaultpro-mobile-nav #${e.relatedTarget.id}`).removeClass('active');
|
||||
});
|
||||
var defaultTab = GetDefaultTab().tab;
|
||||
switch (defaultTab) {
|
||||
case "ServiceRecord":
|
||||
getVehicleServiceRecords(vehicleId);
|
||||
break;
|
||||
case "NoteRecord":
|
||||
getVehicleNotes(vehicleId);
|
||||
break;
|
||||
case "GasRecord":
|
||||
getVehicleGasRecords(vehicleId);
|
||||
break;
|
||||
case "RepairRecord":
|
||||
getVehicleCollisionRecords(vehicleId);
|
||||
break;
|
||||
case "TaxRecord":
|
||||
getVehicleTaxRecords(vehicleId);
|
||||
break;
|
||||
case "Dashboard":
|
||||
getVehicleReport(vehicleId);
|
||||
break;
|
||||
case "ReminderRecord":
|
||||
getVehicleReminders(vehicleId);
|
||||
break;
|
||||
case "UpgradeRecord":
|
||||
getVehicleUpgradeRecords(vehicleId);
|
||||
break;
|
||||
case "SupplyRecord":
|
||||
getVehicleSupplyRecords(vehicleId);
|
||||
break;
|
||||
case "PlanRecord":
|
||||
getVehiclePlanRecords(vehicleId);
|
||||
break;
|
||||
case "OdometerRecord":
|
||||
getVehicleOdometerRecords(vehicleId);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
function getVehicleNotes(vehicleId) {
|
||||
$.get(`/Vehicle/GetNotesByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#notes-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleServiceRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetServiceRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#servicerecord-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehiclePlanRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetPlanRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#plan-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleOdometerRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetOdometerRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#odometer-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleSupplyRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetSupplyRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#supply-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleUpgradeRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetUpgradeRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#upgrade-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleGasRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetGasRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#gas-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleCollisionRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetCollisionRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#accident-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleTaxRecords(vehicleId) {
|
||||
$.get(`/Vehicle/GetTaxRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#tax-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleReminders(vehicleId) {
|
||||
$.get(`/Vehicle/GetReminderRecordsByVehicleId?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#reminder-tab-pane").html(data);
|
||||
restoreScrollPosition();
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getVehicleReport(vehicleId) {
|
||||
$.get(`/Vehicle/GetReportPartialView?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#report-tab-pane").html(data);
|
||||
getVehicleHaveImportantReminders(vehicleId);
|
||||
}
|
||||
})
|
||||
}
|
||||
function editVehicle(vehicleId) {
|
||||
$.get(`/Vehicle/GetEditVehiclePartialViewById?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$("#editVehicleModalContent").html(data);
|
||||
initTagSelector($("#inputTag"), true);
|
||||
initDatePicker($('#inputPurchaseDate'));
|
||||
initDatePicker($('#inputSoldDate'));
|
||||
$('#editVehicleModal').modal('show');
|
||||
}
|
||||
});
|
||||
}
|
||||
function hideEditVehicleModal() {
|
||||
$('#editVehicleModal').modal('hide');
|
||||
}
|
||||
function deleteVehicle(vehicleId) {
|
||||
Swal.fire({
|
||||
title: "Confirm Deletion?",
|
||||
text: "This will also delete all data tied to this vehicle. Deleted Vehicles and their associated data cannot be restored.",
|
||||
showCancelButton: true,
|
||||
confirmButtonText: "Delete",
|
||||
confirmButtonColor: "#dc3545"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
$.post('/Vehicle/DeleteVehicle', { vehicleId: vehicleId }, function (data) {
|
||||
if (data) {
|
||||
window.location.href = '/Home';
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
function showAddReminderModal(reminderModalInput) {
|
||||
if (reminderModalInput != undefined) {
|
||||
$.post('/Vehicle/GetAddReminderRecordPartialView', { reminderModel: reminderModalInput }, function (data) {
|
||||
$("#reminderRecordModalContent").html(data);
|
||||
initDatePicker($('#reminderDate'), true);
|
||||
initTagSelector($("#reminderRecordTag"));
|
||||
$("#reminderRecordModal").modal("show");
|
||||
});
|
||||
} else {
|
||||
$.post('/Vehicle/GetAddReminderRecordPartialView', function (data) {
|
||||
$("#reminderRecordModalContent").html(data);
|
||||
initDatePicker($('#reminderDate'), true);
|
||||
initTagSelector($("#reminderRecordTag"));
|
||||
$("#reminderRecordModal").modal("show");
|
||||
});
|
||||
}
|
||||
}
|
||||
function getVehicleHaveImportantReminders(vehicleId) {
|
||||
setTimeout(function () {
|
||||
$.get(`/Vehicle/GetVehicleHaveUrgentOrPastDueReminders?vehicleId=${vehicleId}`, function (data) {
|
||||
if (data) {
|
||||
$(".reminderBell").removeClass("bi-bell");
|
||||
$(".reminderBell").addClass("bi-bell-fill");
|
||||
$(".reminderBell").addClass("text-warning");
|
||||
$(".reminderBellDiv").addClass("bell-shake");
|
||||
} else {
|
||||
$(".reminderBellDiv").removeClass("bell-shake");
|
||||
$(".reminderBell").removeClass("bi-bell-fill");
|
||||
$(".reminderBell").addClass("bi-bell");
|
||||
$(".reminderBell").removeClass("text-warning");
|
||||
}
|
||||
});
|
||||
}, 500);
|
||||
}
|
||||
function moveRecord(recordId, source, dest) {
|
||||
$("#workAroundInput").show();
|
||||
var friendlySource = "";
|
||||
var friendlyDest = "";
|
||||
var hideModalCallBack;
|
||||
var refreshDataCallBack;
|
||||
switch (source) {
|
||||
case "ServiceRecord":
|
||||
friendlySource = "Service Records";
|
||||
hideModalCallBack = hideAddServiceRecordModal;
|
||||
refreshDataCallBack = getVehicleServiceRecords;
|
||||
break;
|
||||
case "RepairRecord":
|
||||
friendlySource = "Repairs";
|
||||
hideModalCallBack = hideAddCollisionRecordModal;
|
||||
refreshDataCallBack = getVehicleCollisionRecords;
|
||||
break;
|
||||
case "UpgradeRecord":
|
||||
friendlySource = "Upgrades";
|
||||
hideModalCallBack = hideAddUpgradeRecordModal;
|
||||
refreshDataCallBack = getVehicleUpgradeRecords;
|
||||
break;
|
||||
}
|
||||
switch (dest) {
|
||||
case "ServiceRecord":
|
||||
friendlyDest = "Service Records";
|
||||
break;
|
||||
case "RepairRecord":
|
||||
friendlyDest = "Repairs";
|
||||
break;
|
||||
case "UpgradeRecord":
|
||||
friendlyDest = "Upgrades";
|
||||
break;
|
||||
}
|
||||
Swal.fire({
|
||||
title: "Confirm Move?",
|
||||
text: `Move this record from ${friendlySource} to ${friendlyDest}?`,
|
||||
showCancelButton: true,
|
||||
confirmButtonText: "Move",
|
||||
confirmButtonColor: "#dc3545"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
$.post('/Vehicle/MoveRecord', { recordId: recordId, source: source, destination: dest }, function (data) {
|
||||
if (data) {
|
||||
hideModalCallBack();
|
||||
successToast("Record Moved");
|
||||
var vehicleId = GetVehicleId().vehicleId;
|
||||
refreshDataCallBack(vehicleId);
|
||||
} else {
|
||||
errorToast(genericErrorMessage());
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$("#workAroundInput").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
function showRecurringReminderSelector(descriptionFieldName, noteFieldName) {
|
||||
$.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: () => {
|
||||
//validate
|
||||
var selectedRecurringReminderData = getAndValidateSelectedRecurringReminder();
|
||||
if (selectedRecurringReminderData.hasError) {
|
||||
Swal.showValidationMessage(`You must select a recurring reminder`);
|
||||
}
|
||||
return { selectedRecurringReminderData }
|
||||
},
|
||||
}).then(function (result) {
|
||||
if (result.isConfirmed) {
|
||||
recurringReminderRecordId = result.value.selectedRecurringReminderData.ids;
|
||||
let descriptionField = $(`#${descriptionFieldName}`);
|
||||
let noteField = $(`#${noteFieldName}`);
|
||||
if (descriptionField.length > 0) {
|
||||
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`);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
errorToast(genericErrorMessage());
|
||||
}
|
||||
})
|
||||
}
|
||||
function editMultipleRecords(ids, dataType) {
|
||||
if (ids.length < 2) {
|
||||
return;
|
||||
}
|
||||
$.post('/Vehicle/GetGenericRecordModal', { recordIds: ids, dataType: dataType }, function (data) {
|
||||
if (data) {
|
||||
$("#genericRecordEditModalContent").html(data);
|
||||
initDatePicker($('#genericRecordDate'));
|
||||
initTagSelector($("#genericRecordTag"));
|
||||
$("#genericRecordEditModal").modal('show');
|
||||
}
|
||||
});
|
||||
}
|
||||
function hideGenericRecordModal() {
|
||||
$("#genericRecordEditModal").modal('hide');
|
||||
}
|
||||
function saveGenericRecord() {
|
||||
//get values
|
||||
var formValues = getAndValidateGenericRecordValues();
|
||||
//validate
|
||||
if (formValues.hasError) {
|
||||
errorToast("Please check the form data");
|
||||
return;
|
||||
}
|
||||
var refreshDataCallBack;
|
||||
switch (formValues.dataType) {
|
||||
case "ServiceRecord":
|
||||
refreshDataCallBack = getVehicleServiceRecords;
|
||||
break;
|
||||
case "RepairRecord":
|
||||
refreshDataCallBack = getVehicleCollisionRecords;
|
||||
break;
|
||||
case "UpgradeRecord":
|
||||
refreshDataCallBack = getVehicleUpgradeRecords;
|
||||
break;
|
||||
}
|
||||
//save to db.
|
||||
$.post('/Vehicle/EditMultipleRecords', { genericRecordEditModel: formValues }, function (data) {
|
||||
if (data) {
|
||||
successToast(formValues.recordIds.length > 1 ? "Records Updated" : "Record Updated.");
|
||||
hideGenericRecordModal();
|
||||
refreshDataCallBack(GetVehicleId().vehicleId);
|
||||
} else {
|
||||
errorToast(genericErrorMessage());
|
||||
}
|
||||
})
|
||||
}
|
||||
function getAndValidateGenericRecordValues() {
|
||||
var genericDate = $("#genericRecordDate").val();
|
||||
var genericMileage = $("#genericRecordMileage").val();
|
||||
var genericMileageToParse = parseInt(globalParseFloat($("#genericRecordMileage").val())).toString();
|
||||
var genericDescription = $("#genericRecordDescription").val();
|
||||
var genericCost = $("#genericRecordCost").val();
|
||||
var genericNotes = $("#genericRecordNotes").val();
|
||||
var genericTags = $("#genericRecordTag").val();
|
||||
var genericExtraFields = getAndValidateExtraFields();
|
||||
//validation
|
||||
var hasError = false;
|
||||
if (genericMileage.trim() != '' && (isNaN(genericMileageToParse) || parseInt(genericMileageToParse) < 0)) {
|
||||
hasError = true;
|
||||
$("#genericRecordMileage").addClass("is-invalid");
|
||||
} else {
|
||||
$("#genericRecordMileage").removeClass("is-invalid");
|
||||
}
|
||||
if (genericCost.trim() != '' && !isValidMoney(genericCost)) {
|
||||
hasError = true;
|
||||
$("#genericRecordCost").addClass("is-invalid");
|
||||
} else {
|
||||
$("#genericRecordCost").removeClass("is-invalid");
|
||||
}
|
||||
return {
|
||||
hasError: hasError,
|
||||
dataType: getGenericRecordEditModelData().dataType,
|
||||
recordIds: recordsToEdit,
|
||||
editRecord: {
|
||||
date: genericDate,
|
||||
mileage: genericMileageToParse,
|
||||
description: genericDescription,
|
||||
cost: genericCost,
|
||||
notes: genericNotes,
|
||||
tags: genericTags,
|
||||
extraFields: genericExtraFields.extraFields
|
||||
}
|
||||
}
|
||||
}
|
||||
function getRecordsDeltaStats(recordIds) {
|
||||
if (recordIds.length < 2) {
|
||||
return;
|
||||
}
|
||||
var odometerReadings = [];
|
||||
var dateReadings = [];
|
||||
var costReadings = [];
|
||||
//get all of the odometer readings
|
||||
recordIds.map(x => {
|
||||
var odometerReading = parseInt($(`tr[data-rowId='${x}'] td[data-column='odometer']`).text());
|
||||
if (!isNaN(odometerReading)) {
|
||||
odometerReadings.push(odometerReading);
|
||||
}
|
||||
var dateReading = parseInt($(`tr[data-rowId=${x}] td[data-column='date']`).attr('data-date'));
|
||||
if (!isNaN(dateReading)) {
|
||||
dateReadings.push(dateReading);
|
||||
}
|
||||
var costReading = globalParseFloat($(`tr[data-rowId='${x}'] td[data-column='cost']`).text());
|
||||
if (costReading > 0) {
|
||||
costReadings.push(costReading);
|
||||
}
|
||||
});
|
||||
//get max stats
|
||||
var maxOdo = odometerReadings.length > 0 ? odometerReadings.reduce((a, b) => a > b ? a : b) : 0;
|
||||
var maxDate = dateReadings.length > 0 ? dateReadings.reduce((a, b) => a > b ? a : b) : 0;
|
||||
//get min stats
|
||||
var minOdo = odometerReadings.length > 0 ? odometerReadings.reduce((a, b) => a < b ? a : b) : 0;
|
||||
var minDate = dateReadings.length > 0 ? dateReadings.reduce((a, b) => a < b ? a : b) : 0;
|
||||
//get sum of costs
|
||||
var costSum = costReadings.length > 0 ? costReadings.reduce((a, b) => a + b) : 0;
|
||||
var diffOdo = maxOdo - minOdo;
|
||||
var diffDate = maxDate - minDate;
|
||||
var divisibleCount = recordIds.length - 1;
|
||||
var averageOdo = diffOdo > 0 ? (diffOdo / divisibleCount).toFixed(2) : '0';
|
||||
var averageDays = diffDate > 0 ? Math.floor((diffDate / divisibleCount) / 8.64e7) : '0';
|
||||
var averageSum = costSum > 0 ? (costSum / recordIds.length).toFixed(2) : '0';
|
||||
costSum = costSum.toFixed(2);
|
||||
Swal.fire({
|
||||
title: "Record Statistics",
|
||||
html: `<p>Average Distance Traveled between Records: ${globalFloatToString(averageOdo)}</p>
|
||||
<br />
|
||||
<p>Average Days between Records: ${averageDays}</p>
|
||||
<br />
|
||||
<p>Total Cost: ${globalAppendCurrency(globalFloatToString(costSum))}</p>
|
||||
<br />
|
||||
<p>Average Cost: ${globalAppendCurrency(globalFloatToString(averageSum))}</p>`
|
||||
,
|
||||
icon: "info"
|
||||
});
|
||||
}
|
||||
function GetAdjustedOdometer(id, odometerInput) {
|
||||
//if editing an existing record or vehicle does not have odometer adjustment or input is NaN then just return the original input.
|
||||
if (id > 0 || !GetVehicleId().hasOdometerAdjustment || isNaN(odometerInput)) {
|
||||
return odometerInput;
|
||||
}
|
||||
//apply odometer adjustments first.
|
||||
var adjustedOdometer = parseInt(odometerInput) + parseInt(GetVehicleId().odometerDifference);
|
||||
//apply odometer multiplier.
|
||||
adjustedOdometer *= globalParseFloat(GetVehicleId().odometerMultiplier);
|
||||
return adjustedOdometer.toFixed(0);
|
||||
}
|
||||
function adjustRecordsOdometer(ids, source) {
|
||||
if (ids.length == 0) {
|
||||
return;
|
||||
}
|
||||
$("#workAroundInput").show();
|
||||
var friendlySource = "";
|
||||
var refreshDataCallBack;
|
||||
var recordVerbiage = ids.length > 1 ? `these ${ids.length} records` : "this record";
|
||||
switch (source) {
|
||||
case "ServiceRecord":
|
||||
friendlySource = "Service Records";
|
||||
refreshDataCallBack = getVehicleServiceRecords;
|
||||
break;
|
||||
case "RepairRecord":
|
||||
friendlySource = "Repairs";
|
||||
refreshDataCallBack = getVehicleCollisionRecords;
|
||||
break;
|
||||
case "UpgradeRecord":
|
||||
friendlySource = "Upgrades";
|
||||
refreshDataCallBack = getVehicleUpgradeRecords;
|
||||
break;
|
||||
case "OdometerRecord":
|
||||
friendlySource = "Odometer Records";
|
||||
refreshDataCallBack = getVehicleOdometerRecords;
|
||||
break;
|
||||
case "GasRecord":
|
||||
friendlySource = "Fuel Records";
|
||||
refreshDataCallBack = getVehicleGasRecords;
|
||||
break;
|
||||
}
|
||||
|
||||
Swal.fire({
|
||||
title: "Adjust Odometer?",
|
||||
text: `Apply Odometer Adjustments to ${recordVerbiage}?`,
|
||||
showCancelButton: true,
|
||||
confirmButtonText: "Adjust",
|
||||
confirmButtonColor: "#dc3545"
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
saveScrollPosition();
|
||||
$.post('/Vehicle/AdjustRecordsOdometer', { recordIds: ids, vehicleId: GetVehicleId().vehicleId, importMode: source }, function (data) {
|
||||
if (data) {
|
||||
successToast(`${ids.length} Record(s) Updated`);
|
||||
var vehicleId = GetVehicleId().vehicleId;
|
||||
refreshDataCallBack(vehicleId);
|
||||
} else {
|
||||
errorToast(genericErrorMessage());
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$("#workAroundInput").hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
function showMultipleRemindersSelector() {
|
||||
if ($("#multipleRemindersCheck").is(":checked")) {
|
||||
$("#recurringMultipleReminders").show();
|
||||
$("#recurringReminderInput").hide();
|
||||
} else {
|
||||
$("#recurringMultipleReminders").hide();
|
||||
$("#recurringReminderInput").show();
|
||||
}
|
||||
}
|
||||
function getAndValidateSelectedRecurringReminder() {
|
||||
if ($("#multipleRemindersCheck").is(":checked")) {
|
||||
//validate multiple reminders
|
||||
var selectedRecurringRemindersArray = [];
|
||||
$("#recurringMultipleReminders :checked").map(function () {
|
||||
selectedRecurringRemindersArray.push({
|
||||
value: this.value,
|
||||
text: $(this).attr("data-description")
|
||||
});
|
||||
});
|
||||
if (selectedRecurringRemindersArray.length == 0) {
|
||||
return {
|
||||
hasError: true,
|
||||
ids: [],
|
||||
text: ''
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
hasError: false,
|
||||
ids: selectedRecurringRemindersArray.map(x=>x.value),
|
||||
text: selectedRecurringRemindersArray.map(x=>x.text)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//validate single reminder
|
||||
var selectedRecurringReminder = $("#recurringReminderInput").val();
|
||||
var selectedRecurringReminderText = $("#recurringReminderInput option:selected").attr("data-description");
|
||||
if (!selectedRecurringReminder || parseInt(selectedRecurringReminder) == 0) {
|
||||
return {
|
||||
hasError: true,
|
||||
ids: [],
|
||||
text: ''
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
hasError: false,
|
||||
ids: [selectedRecurringReminder],
|
||||
text: [selectedRecurringReminderText]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function getLastOdometerReadingAndIncrement(odometerFieldName) {
|
||||
$.get(`/Vehicle/GetMaxMileage?vehicleId=${GetVehicleId().vehicleId}`, function (currentOdometer) {
|
||||
let additionalHtml = isNaN(currentOdometer) || currentOdometer == 0 ? '' : `<span>Current Odometer: ${currentOdometer}</span><br/>`;
|
||||
Swal.fire({
|
||||
title: 'Increment Last Reported Odometer Reading',
|
||||
html: `${additionalHtml}
|
||||
<input type="text" inputmode="decimal" id="inputOdometerIncrement" class="swal2-input" placeholder="Increment" onkeydown="handleSwalEnter(event)">
|
||||
`,
|
||||
confirmButtonText: 'Add',
|
||||
focusConfirm: false,
|
||||
preConfirm: () => {
|
||||
const odometerIncrement = parseInt(globalParseFloat($("#inputOdometerIncrement").val()));
|
||||
if (isNaN(odometerIncrement) || odometerIncrement < 0) {
|
||||
Swal.showValidationMessage(`Please enter a positive amount to increment or 0 to use current odometer`);
|
||||
}
|
||||
return { odometerIncrement }
|
||||
},
|
||||
}).then(function (result) {
|
||||
if (result.isConfirmed) {
|
||||
var amountToIncrement = result.value.odometerIncrement;
|
||||
var newAmount = currentOdometer + amountToIncrement;
|
||||
if (!isNaN(newAmount)) {
|
||||
var odometerField = $(`#${odometerFieldName}`);
|
||||
if (odometerField.length > 0) {
|
||||
odometerField.val(newAmount);
|
||||
} else {
|
||||
errorToast(genericErrorMessage());
|
||||
}
|
||||
} else {
|
||||
errorToast(genericErrorMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function showGlobalSearch() {
|
||||
$('#globalSearchModal').modal('show');
|
||||
}
|
||||
function hideGlobalSearch() {
|
||||
$('#globalSearchModal').modal('hide');
|
||||
}
|
||||
function performGlobalSearch() {
|
||||
var searchQuery = $('#globalSearchInput').val();
|
||||
if (searchQuery.trim() == '') {
|
||||
$('#globalSearchInput').addClass('is-invalid');
|
||||
} else {
|
||||
$('#globalSearchInput').removeClass('is-invalid');
|
||||
}
|
||||
let caseSensitiveSearch = $("#globalSearchCaseSensitiveCheck").is(':checked');
|
||||
$.post('/Vehicle/SearchRecords', { vehicleId: GetVehicleId().vehicleId, searchQuery: searchQuery, caseSensitive: caseSensitiveSearch }, function (data) {
|
||||
$('#globalSearchModalResults').html(data);
|
||||
});
|
||||
}
|
||||
function handleGlobalSearchKeyPress(event) {
|
||||
if ($('#globalSearchAutoSearchCheck').is(':checked')) {
|
||||
setDebounce(performGlobalSearch);
|
||||
} else if (event.keyCode == 13) {
|
||||
performGlobalSearch();
|
||||
}
|
||||
}
|
||||
|
||||
function loadGlobalSearchResult(recordId, recordType) {
|
||||
hideGlobalSearch();
|
||||
switch (recordType) {
|
||||
case "ServiceRecord":
|
||||
$('#servicerecord-tab').tab('show');
|
||||
waitForElement('#serviceRecordModalContent', showEditServiceRecordModal, recordId);
|
||||
break;
|
||||
case "RepairRecord":
|
||||
$('#accident-tab').tab('show');
|
||||
waitForElement('#collisionRecordModalContent', showEditCollisionRecordModal, recordId);
|
||||
break;
|
||||
case "UpgradeRecord":
|
||||
$('#upgrade-tab').tab('show');
|
||||
waitForElement('#upgradeRecordModalContent', showEditUpgradeRecordModal, recordId);
|
||||
break;
|
||||
case "TaxRecord":
|
||||
$('#tax-tab').tab('show');
|
||||
waitForElement('#taxRecordModalContent', showEditTaxRecordModal, recordId);
|
||||
break;
|
||||
case "SupplyRecord":
|
||||
$('#supply-tab').tab('show');
|
||||
waitForElement('#supplyRecordModalContent', showEditSupplyRecordModal, recordId);
|
||||
break;
|
||||
case "NoteRecord":
|
||||
$('#notes-tab').tab('show');
|
||||
waitForElement('#noteModalContent', showEditNoteModal, recordId);
|
||||
break;
|
||||
case "OdometerRecord":
|
||||
$('#odometer-tab').tab('show');
|
||||
waitForElement('#odometerRecordModalContent', showEditOdometerRecordModal, recordId);
|
||||
break;
|
||||
case "ReminderRecord":
|
||||
$('#reminder-tab').tab('show');
|
||||
waitForElement('#reminderRecordModalContent', showEditReminderRecordModal, recordId);
|
||||
break;
|
||||
case "GasRecord":
|
||||
$('#gas-tab').tab('show');
|
||||
waitForElement('#gasRecordModalContent', showEditGasRecordModal, recordId);
|
||||
break;
|
||||
case "PlanRecord":
|
||||
$('#plan-tab').tab('show');
|
||||
waitForElement('#planRecordModalContent', showEditPlanRecordModal, recordId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user