function successToast(message) { Swal.fire({ toast: true, position: "top-end", showConfirmButton: false, timer: 3000, title: message, timerProgressBar: true, icon: "success", didOpen: (toast) => { toast.onmouseenter = Swal.stopTimer; toast.onmouseleave = Swal.resumeTimer; } }) } function errorToast(message) { Swal.fire({ toast: true, position: "top-end", showConfirmButton: false, timer: 3000, title: message, timerProgressBar: true, icon: "error", didOpen: (toast) => { toast.onmouseenter = Swal.stopTimer; toast.onmouseleave = Swal.resumeTimer; } }) } function viewVehicle(vehicleId) { window.location.href = `/Vehicle/Index?vehicleId=${vehicleId}`; } function saveVehicle(isEdit) { var vehicleId = getVehicleModelData().id; var vehicleYear = $("#inputYear").val(); var vehicleMake = $("#inputMake").val(); var vehicleModel = $("#inputModel").val(); var vehicleTags = $("#inputTag").val(); var vehiclePurchaseDate = $("#inputPurchaseDate").val(); var vehicleSoldDate = $("#inputSoldDate").val(); var vehicleLicensePlate = $("#inputLicensePlate").val(); var vehicleIsElectric = $("#inputFuelType").val() == 'Electric'; var vehicleIsDiesel = $("#inputFuelType").val() == 'Diesel'; var vehicleUseHours = $("#inputUseHours").is(":checked"); var vehicleHasOdometerAdjustment = $("#inputHasOdometerAdjustment").is(':checked'); var vehicleOdometerMultiplier = $("#inputOdometerMultiplier").val(); var vehicleOdometerDifference = parseInt(globalParseFloat($("#inputOdometerDifference").val())).toString(); var vehiclePurchasePrice = $("#inputPurchasePrice").val(); var vehicleSoldPrice = $("#inputSoldPrice").val(); var extraFields = getAndValidateExtraFields(true); //validate var hasError = false; if (extraFields.hasError) { hasError = true; } if (vehicleYear.trim() == '' || parseInt(vehicleYear) < 1900) { hasError = true; $("#inputYear").addClass("is-invalid"); } else { $("#inputYear").removeClass("is-invalid"); } if (vehicleMake.trim() == '') { hasError = true; $("#inputMake").addClass("is-invalid"); } else { $("#inputMake").removeClass("is-invalid"); } if (vehicleModel.trim() == '') { hasError = true; $("#inputModel").addClass("is-invalid"); } else { $("#inputModel").removeClass("is-invalid"); } if (vehicleLicensePlate.trim() == '') { hasError = true; $("#inputLicensePlate").addClass("is-invalid"); } else { $("#inputLicensePlate").removeClass("is-invalid"); } if (vehicleHasOdometerAdjustment) { //validate odometer adjustments //validate multiplier if (vehicleOdometerMultiplier.trim() == '' || !isValidMoney(vehicleOdometerMultiplier)) { hasError = true; $("#inputOdometerMultiplier").addClass("is-invalid"); } else { $("#inputOdometerMultiplier").removeClass("is-invalid"); } //validate difference if (vehicleOdometerDifference.trim() == '' || isNaN(vehicleOdometerDifference)) { hasError = true; $("#inputOdometerDifference").addClass("is-invalid"); } else { $("#inputOdometerDifference").removeClass("is-invalid"); } } if (vehiclePurchasePrice.trim() != '' && !isValidMoney(vehiclePurchasePrice)) { hasError = true; $("#inputPurchasePrice").addClass("is-invalid"); $("#collapsePurchaseInfo").collapse('show'); } else { $("#inputPurchasePrice").removeClass("is-invalid"); } if (vehicleSoldPrice.trim() != '' && !isValidMoney(vehicleSoldPrice)) { hasError = true; $("#inputSoldPrice").addClass("is-invalid"); $("#collapsePurchaseInfo").collapse('show'); } else { $("#inputSoldPrice").removeClass("is-invalid"); } if (hasError) { return; } $.post('/Vehicle/SaveVehicle', { id: vehicleId, imageLocation: uploadedFile, year: vehicleYear, make: vehicleMake, model: vehicleModel, licensePlate: vehicleLicensePlate, isElectric: vehicleIsElectric, isDiesel: vehicleIsDiesel, tags: vehicleTags, useHours: vehicleUseHours, extraFields: extraFields.extraFields, purchaseDate: vehiclePurchaseDate, soldDate: vehicleSoldDate, hasOdometerAdjustment: vehicleHasOdometerAdjustment, odometerMultiplier: vehicleOdometerMultiplier, odometerDifference: vehicleOdometerDifference, purchasePrice: vehiclePurchasePrice, soldPrice: vehicleSoldPrice }, function (data) { if (data) { if (!isEdit) { successToast("Vehicle Added"); hideAddVehicleModal(); loadGarage(); } else { successToast("Vehicle Updated"); hideEditVehicleModal(); viewVehicle(vehicleId); } } else { errorToast(genericErrorMessage()); } }); } function toggleOdometerAdjustment() { var isChecked = $("#inputHasOdometerAdjustment").is(':checked'); if (isChecked) { $("#odometerAdjustments").collapse('show'); } else { $("#odometerAdjustments").collapse('hide'); } } function uploadFileAsync(event) { let formData = new FormData(); formData.append("file", event.files[0]); sloader.show(); $.ajax({ url: "/Files/HandleFileUpload", data: formData, cache: false, processData: false, contentType: false, type: 'POST', success: function (response) { sloader.hide(); if (response.trim() != '') { uploadedFile = response; } }, error: function () { sloader.hide(); errorToast("An error has occurred, please check the file size and try again later.") } }); } function isValidMoney(input) { const euRegex = /^\$?(?=\(.*\)|[^()]*$)\(?\d{1,3}((\.\d{3}){0,8}|(\d{3}){0,8})(,\d{1,3}?)?\)?$/; const usRegex = /^\$?(?=\(.*\)|[^()]*$)\(?\d{1,3}((,\d{3}){0,8}|(\d{3}){0,8})(\.\d{1,3}?)?\)?$/; return (euRegex.test(input) || usRegex.test(input)); } function initDatePicker(input, futureOnly) { if (futureOnly) { input.datepicker({ startDate: "+0d", format: getShortDatePattern().pattern, autoclose: true, weekStart: getGlobalConfig().firstDayOfWeek }); } else { input.datepicker({ endDate: "+0d", format: getShortDatePattern().pattern, autoclose: true, weekStart: getGlobalConfig().firstDayOfWeek }); } } function initTagSelector(input, noDataList) { if (noDataList) { input.tagsinput({ useDataList: false }); } else { input.tagsinput(); } } function showMobileNav() { $(".lubelogger-mobile-nav").addClass("lubelogger-mobile-nav-show"); } function hideMobileNav() { $(".lubelogger-mobile-nav").removeClass("lubelogger-mobile-nav-show"); } function bindWindowResize() { $(window).on('resize', function () { hideMobileNav(); }); } function encodeHTMLInput(input) { const encoded = document.createElement('div'); encoded.innerText = input; return encoded.innerHTML; } function decodeHTMLEntities(text) { return $("