From bf984f280edad0fd0cf9d2ddfdddd4c2cfd07c38 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Fri, 15 Mar 2024 16:48:23 -0600 Subject: [PATCH] added feature to make odometer adjustments a piece of cake. --- Controllers/VehicleController.cs | 59 ++++++++++++++++++++++++++ Views/Vehicle/_CollisionRecords.cshtml | 2 + Views/Vehicle/_Gas.cshtml | 2 + Views/Vehicle/_OdometerRecords.cshtml | 2 + Views/Vehicle/_ServiceRecords.cshtml | 2 + Views/Vehicle/_UpgradeRecords.cshtml | 2 + wwwroot/js/garage.js | 2 +- wwwroot/js/shared.js | 5 +++ wwwroot/js/vehicle.js | 53 +++++++++++++++++++++++ 9 files changed, 128 insertions(+), 1 deletion(-) diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index c223572..5aa0de3 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -2425,6 +2425,65 @@ namespace CarCareTracker.Controllers } return Json(result); } + [TypeFilter(typeof(CollaboratorFilter))] + [HttpPost] + public IActionResult AdjustRecordsOdometer(List recordIds, int vehicleId, ImportMode importMode) + { + bool result = false; + //get vehicle's odometer adjustments + var vehicleData = _dataAccess.GetVehicleById(vehicleId); + foreach (int recordId in recordIds) + { + switch (importMode) + { + case ImportMode.ServiceRecord: + { + var existingRecord = _serviceRecordDataAccess.GetServiceRecordById(recordId); + existingRecord.Mileage += int.Parse(vehicleData.OdometerDifference); + existingRecord.Mileage = decimal.ToInt32(existingRecord.Mileage * decimal.Parse(vehicleData.OdometerMultiplier, NumberStyles.Any)); + result = _serviceRecordDataAccess.SaveServiceRecordToVehicle(existingRecord); + } + break; + case ImportMode.RepairRecord: + { + var existingRecord = _collisionRecordDataAccess.GetCollisionRecordById(recordId); + existingRecord.Mileage += int.Parse(vehicleData.OdometerDifference); + existingRecord.Mileage = decimal.ToInt32(existingRecord.Mileage * decimal.Parse(vehicleData.OdometerMultiplier, NumberStyles.Any)); + result = _collisionRecordDataAccess.SaveCollisionRecordToVehicle(existingRecord); + } + break; + case ImportMode.UpgradeRecord: + { + var existingRecord = _upgradeRecordDataAccess.GetUpgradeRecordById(recordId); + existingRecord.Mileage += int.Parse(vehicleData.OdometerDifference); + existingRecord.Mileage = decimal.ToInt32(existingRecord.Mileage * decimal.Parse(vehicleData.OdometerMultiplier, NumberStyles.Any)); + result = _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(existingRecord); + } + break; + case ImportMode.GasRecord: + { + var existingRecord = _gasRecordDataAccess.GetGasRecordById(recordId); + existingRecord.Mileage += int.Parse(vehicleData.OdometerDifference); + existingRecord.Mileage = decimal.ToInt32(existingRecord.Mileage * decimal.Parse(vehicleData.OdometerMultiplier, NumberStyles.Any)); + result = _gasRecordDataAccess.SaveGasRecordToVehicle(existingRecord); + } + break; + case ImportMode.OdometerRecord: + { + var existingRecord = _odometerRecordDataAccess.GetOdometerRecordById(recordId); + existingRecord.Mileage += int.Parse(vehicleData.OdometerDifference); + existingRecord.Mileage = decimal.ToInt32(existingRecord.Mileage * decimal.Parse(vehicleData.OdometerMultiplier, NumberStyles.Any)); + result = _odometerRecordDataAccess.SaveOdometerRecordToVehicle(existingRecord); + } + break; + } + } + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Adjusted odometer for multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)}"); + } + return Json(result); + } public IActionResult DuplicateRecords(List recordIds, ImportMode importMode) { bool result = false; diff --git a/Views/Vehicle/_CollisionRecords.cshtml b/Views/Vehicle/_CollisionRecords.cshtml index 94cfea2..2b5dfaf 100644 --- a/Views/Vehicle/_CollisionRecords.cshtml +++ b/Views/Vehicle/_CollisionRecords.cshtml @@ -159,6 +159,8 @@
  • @translator.Translate(userLanguage, "Delete")
  • @translator.Translate(userLanguage, "Statistics")
  • +
  • +
  • @translator.Translate(userLanguage, "Adjust Odometer")
  • @if (userColumnPreferences.Any()) { diff --git a/Views/Vehicle/_Gas.cshtml b/Views/Vehicle/_Gas.cshtml index 60baa60..ddb7f0d 100644 --- a/Views/Vehicle/_Gas.cshtml +++ b/Views/Vehicle/_Gas.cshtml @@ -222,6 +222,8 @@
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • +
  • +
  • @translator.Translate(userLanguage, "Adjust Odometer")
  • @if (userColumnPreferences.Any()) { diff --git a/Views/Vehicle/_OdometerRecords.cshtml b/Views/Vehicle/_OdometerRecords.cshtml index 5c10de9..f0e4c62 100644 --- a/Views/Vehicle/_OdometerRecords.cshtml +++ b/Views/Vehicle/_OdometerRecords.cshtml @@ -155,6 +155,8 @@
  • @translator.Translate(userLanguage, "Duplicate")
  • @translator.Translate(userLanguage, "Delete")
  • +
  • +
  • @translator.Translate(userLanguage, "Adjust Odometer")
  • @if (userColumnPreferences.Any()) { diff --git a/Views/Vehicle/_ServiceRecords.cshtml b/Views/Vehicle/_ServiceRecords.cshtml index 2923a61..74ea53c 100644 --- a/Views/Vehicle/_ServiceRecords.cshtml +++ b/Views/Vehicle/_ServiceRecords.cshtml @@ -159,6 +159,8 @@
  • @translator.Translate(userLanguage, "Delete")
  • @translator.Translate(userLanguage, "Statistics")
  • +
  • +
  • @translator.Translate(userLanguage, "Adjust Odometer")
  • @if (userColumnPreferences.Any()) { diff --git a/Views/Vehicle/_UpgradeRecords.cshtml b/Views/Vehicle/_UpgradeRecords.cshtml index 7b4aa44..432434c 100644 --- a/Views/Vehicle/_UpgradeRecords.cshtml +++ b/Views/Vehicle/_UpgradeRecords.cshtml @@ -158,6 +158,8 @@
  • @translator.Translate(userLanguage, "Delete")
  • @translator.Translate(userLanguage, "Statistics")
  • +
  • +
  • @translator.Translate(userLanguage, "Adjust Odometer")
  • @if (userColumnPreferences.Any()) { diff --git a/wwwroot/js/garage.js b/wwwroot/js/garage.js index ef2158a..a6e4162 100644 --- a/wwwroot/js/garage.js +++ b/wwwroot/js/garage.js @@ -35,7 +35,7 @@ function getVehicleSupplyRecords() { }); } function GetVehicleId() { - return { vehicleId: 0 }; + return { vehicleId: 0, hasOdometerAdjustment: false }; } function bindTabEvent() { $('button[data-bs-toggle="tab"]').on('show.bs.tab', function (e) { diff --git a/wwwroot/js/shared.js b/wwwroot/js/shared.js index d2302f6..332edf6 100644 --- a/wwwroot/js/shared.js +++ b/wwwroot/js/shared.js @@ -814,6 +814,11 @@ function determineContextMenuItems() { } else { $(".context-menu-multiple").hide(); } + if (GetVehicleId().hasOdometerAdjustment) { + $(".context-menu-odometer-adjustment").show(); + } else { + $(".context-menu-odometer-adjustment").hide(); + } } function getMenuPosition(mouse, direction, scrollDir) { var win = $(window)[direction](), diff --git a/wwwroot/js/vehicle.js b/wwwroot/js/vehicle.js index d4d6015..d45ff9f 100644 --- a/wwwroot/js/vehicle.js +++ b/wwwroot/js/vehicle.js @@ -501,4 +501,57 @@ function GetAdjustedOdometer(id, odometerInput) { //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) { + $.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(); + } + }); } \ No newline at end of file