From 33aeaf9825fef011562fcb8ef01aa06b8677ac26 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Mon, 12 Feb 2024 17:32:08 -0700 Subject: [PATCH] front end logic for saving extra fields. --- Controllers/HomeController.cs | 4 +++ Controllers/VehicleController.cs | 46 ++++++++++++++++++++------------ Helper/StaticHelper.cs | 14 ++++++++++ Models/RecordExtraField.cs | 5 +++- Views/Home/_Settings.cshtml | 2 +- wwwroot/js/collisionrecord.js | 7 ++++- wwwroot/js/gasrecord.js | 7 ++++- wwwroot/js/odometerrecord.js | 7 ++++- wwwroot/js/planrecord.js | 7 ++++- wwwroot/js/servicerecord.js | 7 ++++- wwwroot/js/supplyrecord.js | 7 ++++- wwwroot/js/taxrecord.js | 7 ++++- wwwroot/js/upgraderecord.js | 7 ++++- 13 files changed, 100 insertions(+), 27 deletions(-) diff --git a/Controllers/HomeController.cs b/Controllers/HomeController.cs index 3079415..d604e55 100644 --- a/Controllers/HomeController.cs +++ b/Controllers/HomeController.cs @@ -73,6 +73,10 @@ namespace CarCareTracker.Controllers public IActionResult GetExtraFieldsModal(int importMode = 0) { var recordExtraFields = _extraFieldDataAccess.GetExtraFieldsById(importMode); + if (recordExtraFields.Id != importMode) + { + recordExtraFields.Id = importMode; + } return PartialView("_ExtraFields", recordExtraFields); } public IActionResult UpdateExtraFields(RecordExtraField record) diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 3aa8d27..5971fea 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -36,6 +36,7 @@ namespace CarCareTracker.Controllers private readonly IReminderHelper _reminderHelper; private readonly IReportHelper _reportHelper; private readonly IUserLogic _userLogic; + private readonly IExtraFieldDataAccess _extraFieldDataAccess; public VehicleController(ILogger logger, IFileHelper fileHelper, @@ -54,6 +55,7 @@ namespace CarCareTracker.Controllers IPlanRecordDataAccess planRecordDataAccess, IPlanRecordTemplateDataAccess planRecordTemplateDataAccess, IOdometerRecordDataAccess odometerRecordDataAccess, + IExtraFieldDataAccess extraFieldDataAccess, IUserLogic userLogic, IWebHostEnvironment webEnv, IConfigHelper config) @@ -75,6 +77,7 @@ namespace CarCareTracker.Controllers _planRecordDataAccess = planRecordDataAccess; _planRecordTemplateDataAccess = planRecordTemplateDataAccess; _odometerRecordDataAccess = odometerRecordDataAccess; + _extraFieldDataAccess = extraFieldDataAccess; _userLogic = userLogic; _webEnv = webEnv; _config = config; @@ -589,7 +592,7 @@ namespace CarCareTracker.Controllers var vehicleData = _dataAccess.GetVehicleById(vehicleId); var vehicleIsElectric = vehicleData.IsElectric; var vehicleUseHours = vehicleData.UseHours; - return PartialView("_GasModal", new GasRecordInputContainer() { UseKwh = vehicleIsElectric, UseHours = vehicleUseHours, GasRecord = new GasRecordInput() }); + return PartialView("_GasModal", new GasRecordInputContainer() { UseKwh = vehicleIsElectric, UseHours = vehicleUseHours, GasRecord = new GasRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.GasRecord).ExtraFields } }); } [HttpGet] public IActionResult GetGasRecordForEditById(int gasRecordId) @@ -607,7 +610,8 @@ namespace CarCareTracker.Controllers IsFillToFull = result.IsFillToFull, MissedFuelUp = result.MissedFuelUp, Notes = result.Notes, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.GasRecord).ExtraFields) }; var vehicleData = _dataAccess.GetVehicleById(convertedResult.VehicleId); var vehicleIsElectric = vehicleData.IsElectric; @@ -678,7 +682,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddServiceRecordPartialView() { - return PartialView("_ServiceRecordModal", new ServiceRecordInput()); + return PartialView("_ServiceRecordModal", new ServiceRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.ServiceRecord).ExtraFields }); } [HttpGet] public IActionResult GetServiceRecordForEditById(int serviceRecordId) @@ -695,7 +699,8 @@ namespace CarCareTracker.Controllers Notes = result.Notes, VehicleId = result.VehicleId, Files = result.Files, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.ServiceRecord).ExtraFields) }; return PartialView("_ServiceRecordModal", convertedResult); } @@ -748,7 +753,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddCollisionRecordPartialView() { - return PartialView("_CollisionRecordModal", new CollisionRecordInput()); + return PartialView("_CollisionRecordModal", new CollisionRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.RepairRecord).ExtraFields }); } [HttpGet] public IActionResult GetCollisionRecordForEditById(int collisionRecordId) @@ -765,7 +770,8 @@ namespace CarCareTracker.Controllers Notes = result.Notes, VehicleId = result.VehicleId, Files = result.Files, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.RepairRecord).ExtraFields) }; return PartialView("_CollisionRecordModal", convertedResult); } @@ -822,7 +828,8 @@ namespace CarCareTracker.Controllers RecurringInterval = recurringFee.RecurringInterval, CustomMonthInterval = recurringFee.CustomMonthInterval, Files = recurringFee.Files, - Tags = recurringFee.Tags + Tags = recurringFee.Tags, + ExtraFields = recurringFee.ExtraFields }; _taxRecordDataAccess.SaveTaxRecordToVehicle(recurringFee); _taxRecordDataAccess.SaveTaxRecordToVehicle(newRecurringFee); @@ -841,7 +848,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddTaxRecordPartialView() { - return PartialView("_TaxRecordModal", new TaxRecordInput()); + return PartialView("_TaxRecordModal", new TaxRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.TaxRecord).ExtraFields }); } [HttpGet] public IActionResult GetTaxRecordForEditById(int taxRecordId) @@ -860,7 +867,8 @@ namespace CarCareTracker.Controllers RecurringInterval = result.RecurringInterval, CustomMonthInterval = result.CustomMonthInterval, Files = result.Files, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.TaxRecord).ExtraFields) }; return PartialView("_TaxRecordModal", convertedResult); } @@ -1417,7 +1425,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddUpgradeRecordPartialView() { - return PartialView("_UpgradeRecordModal", new UpgradeRecordInput()); + return PartialView("_UpgradeRecordModal", new UpgradeRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.UpgradeRecord).ExtraFields }); } [HttpGet] public IActionResult GetUpgradeRecordForEditById(int upgradeRecordId) @@ -1434,7 +1442,8 @@ namespace CarCareTracker.Controllers Notes = result.Notes, VehicleId = result.VehicleId, Files = result.Files, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.UpgradeRecord).ExtraFields) }; return PartialView("_UpgradeRecordModal", convertedResult); } @@ -1569,7 +1578,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddSupplyRecordPartialView() { - return PartialView("_SupplyRecordModal", new SupplyRecordInput()); + return PartialView("_SupplyRecordModal", new SupplyRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.SupplyRecord).ExtraFields }); } [HttpGet] public IActionResult GetSupplyRecordForEditById(int supplyRecordId) @@ -1588,7 +1597,8 @@ namespace CarCareTracker.Controllers Notes = result.Notes, VehicleId = result.VehicleId, Files = result.Files, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.SupplyRecord).ExtraFields) }; return PartialView("_SupplyRecordModal", convertedResult); } @@ -1682,7 +1692,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddPlanRecordPartialView() { - return PartialView("_PlanRecordModal", new PlanRecordInput()); + return PartialView("_PlanRecordModal", new PlanRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.PlanRecord).ExtraFields }); } [HttpPost] public IActionResult UpdatePlanRecordProgress(int planRecordId, PlanProgress planProgress, int odometer = 0) @@ -1766,7 +1776,8 @@ namespace CarCareTracker.Controllers Cost = result.Cost, Notes = result.Notes, VehicleId = result.VehicleId, - Files = result.Files + Files = result.Files, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.PlanRecord).ExtraFields) }; return PartialView("_PlanRecordModal", convertedResult); } @@ -1805,7 +1816,7 @@ namespace CarCareTracker.Controllers [HttpGet] public IActionResult GetAddOdometerRecordPartialView() { - return PartialView("_OdometerRecordModal", new OdometerRecordInput()); + return PartialView("_OdometerRecordModal", new OdometerRecordInput() { ExtraFields = _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.OdometerRecord).ExtraFields }); } [HttpGet] public IActionResult GetOdometerRecordForEditById(int odometerRecordId) @@ -1820,7 +1831,8 @@ namespace CarCareTracker.Controllers Notes = result.Notes, VehicleId = result.VehicleId, Files = result.Files, - Tags = result.Tags + Tags = result.Tags, + ExtraFields = StaticHelper.AddExtraFields(result.ExtraFields, _extraFieldDataAccess.GetExtraFieldsById((int)ImportMode.OdometerRecord).ExtraFields) }; return PartialView("_OdometerRecordModal", convertedResult); } diff --git a/Helper/StaticHelper.cs b/Helper/StaticHelper.cs index d8ab1f0..f8b1cb7 100644 --- a/Helper/StaticHelper.cs +++ b/Helper/StaticHelper.cs @@ -1,5 +1,6 @@ using CarCareTracker.Models; using System.Globalization; +using System.Linq; namespace CarCareTracker.Helper { @@ -163,6 +164,19 @@ namespace CarCareTracker.Helper }; } + public static List AddExtraFields(List recordExtraFields, List templateExtraFields) + { + var fieldNames = recordExtraFields.Select(x => x.Name); + foreach(ExtraField field in templateExtraFields) + { + if (!fieldNames.Contains(field.Name)) + { + recordExtraFields.Add(field); + } + } + return recordExtraFields; + } + public static string GetFuelEconomyUnit(bool useKwh, bool useHours, bool useMPG, bool useUKMPG) { string fuelEconomyUnit; diff --git a/Models/RecordExtraField.cs b/Models/RecordExtraField.cs index 68eb9a3..2a07717 100644 --- a/Models/RecordExtraField.cs +++ b/Models/RecordExtraField.cs @@ -1,10 +1,13 @@ -namespace CarCareTracker.Models +using LiteDB; + +namespace CarCareTracker.Models { public class RecordExtraField { /// /// Corresponds to int value of ImportMode enum /// + [BsonId(false)] public int Id { get; set; } public List ExtraFields { get; set; } = new List(); } diff --git a/Views/Home/_Settings.cshtml b/Views/Home/_Settings.cshtml index 8041133..e93672d 100644 --- a/Views/Home/_Settings.cshtml +++ b/Views/Home/_Settings.cshtml @@ -183,7 +183,7 @@ @translator.Translate(userLanguage, "Manage Extra Fields")
- +
diff --git a/wwwroot/js/collisionrecord.js b/wwwroot/js/collisionrecord.js index c5d4459..5c352d6 100644 --- a/wwwroot/js/collisionrecord.js +++ b/wwwroot/js/collisionrecord.js @@ -88,6 +88,10 @@ function getAndValidateCollisionRecordValues() { var addReminderRecord = $("#addReminderCheck").is(":checked"); //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (collisionDate.trim() == '') { //eliminates whitespace. hasError = true; $("#collisionRecordDate").addClass("is-invalid"); @@ -124,6 +128,7 @@ function getAndValidateCollisionRecordValues() { files: uploadedFiles, supplies: selectedSupplies, tags: collisionTags, - addReminderRecord: addReminderRecord + addReminderRecord: addReminderRecord, + extraFields: extraFields.extraFields } } \ No newline at end of file diff --git a/wwwroot/js/gasrecord.js b/wwwroot/js/gasrecord.js index 5fa0dbd..7d7ce82 100644 --- a/wwwroot/js/gasrecord.js +++ b/wwwroot/js/gasrecord.js @@ -87,6 +87,10 @@ function getAndValidateGasRecordValues() { var gasRecordId = getGasRecordModelData().id; //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (gasDate.trim() == '') { //eliminates whitespace. hasError = true; $("#gasRecordDate").addClass("is-invalid"); @@ -134,7 +138,8 @@ function getAndValidateGasRecordValues() { tags: gasTags, isFillToFull: gasIsFillToFull, missedFuelUp: gasIsMissed, - notes: gasNotes + notes: gasNotes, + extraFields: extraFields.extraFields } } diff --git a/wwwroot/js/odometerrecord.js b/wwwroot/js/odometerrecord.js index e3b1d34..7f9668d 100644 --- a/wwwroot/js/odometerrecord.js +++ b/wwwroot/js/odometerrecord.js @@ -85,6 +85,10 @@ function getAndValidateOdometerRecordValues() { var odometerRecordId = getOdometerRecordModelData().id; //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (serviceDate.trim() == '') { //eliminates whitespace. hasError = true; $("#odometerRecordDate").addClass("is-invalid"); @@ -105,6 +109,7 @@ function getAndValidateOdometerRecordValues() { mileage: serviceMileage, notes: serviceNotes, tags: serviceTags, - files: uploadedFiles + files: uploadedFiles, + extraFields: extraFields.extraFields } } \ No newline at end of file diff --git a/wwwroot/js/planrecord.js b/wwwroot/js/planrecord.js index 148fd91..ba142b9 100644 --- a/wwwroot/js/planrecord.js +++ b/wwwroot/js/planrecord.js @@ -159,6 +159,10 @@ function getAndValidatePlanRecordValues() { var planRecordId = getPlanRecordModelData().id; //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (planDescription.trim() == '') { hasError = true; $("#planRecordDescription").addClass("is-invalid"); @@ -183,7 +187,8 @@ function getAndValidatePlanRecordValues() { supplies: selectedSupplies, priority: planPriority, progress: planProgress, - importMode: planType + importMode: planType, + extraFields: extraFields.extraFields } } //drag and drop stuff. diff --git a/wwwroot/js/servicerecord.js b/wwwroot/js/servicerecord.js index a131b6a..b233568 100644 --- a/wwwroot/js/servicerecord.js +++ b/wwwroot/js/servicerecord.js @@ -88,6 +88,10 @@ function getAndValidateServiceRecordValues() { var addReminderRecord = $("#addReminderCheck").is(":checked"); //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (serviceDate.trim() == '') { //eliminates whitespace. hasError = true; $("#serviceRecordDate").addClass("is-invalid"); @@ -124,6 +128,7 @@ function getAndValidateServiceRecordValues() { files: uploadedFiles, supplies: selectedSupplies, tags: serviceTags, - addReminderRecord: addReminderRecord + addReminderRecord: addReminderRecord, + extraFields: extraFields.extraFields } } \ No newline at end of file diff --git a/wwwroot/js/supplyrecord.js b/wwwroot/js/supplyrecord.js index cb5e98e..76ddb03 100644 --- a/wwwroot/js/supplyrecord.js +++ b/wwwroot/js/supplyrecord.js @@ -89,6 +89,10 @@ function getAndValidateSupplyRecordValues() { var supplyRecordId = getSupplyRecordModelData().id; //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (supplyDate.trim() == '') { //eliminates whitespace. hasError = true; $("#supplyRecordDate").addClass("is-invalid"); @@ -125,6 +129,7 @@ function getAndValidateSupplyRecordValues() { notes: supplyNotes, quantity: supplyQuantity, files: uploadedFiles, - tags: supplyTags + tags: supplyTags, + extraFields: extraFields.extraFields } } \ No newline at end of file diff --git a/wwwroot/js/taxrecord.js b/wwwroot/js/taxrecord.js index 8fb8ae3..d08d338 100644 --- a/wwwroot/js/taxrecord.js +++ b/wwwroot/js/taxrecord.js @@ -126,6 +126,10 @@ function getAndValidateTaxRecordValues() { var addReminderRecord = $("#addReminderCheck").is(":checked"); //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (taxDate.trim() == '') { //eliminates whitespace. hasError = true; $("#taxRecordDate").addClass("is-invalid"); @@ -157,6 +161,7 @@ function getAndValidateTaxRecordValues() { customMonthInterval: customMonthInterval, tags: taxTags, files: uploadedFiles, - addReminderRecord: addReminderRecord + addReminderRecord: addReminderRecord, + extraFields: extraFields.extraFields } } \ No newline at end of file diff --git a/wwwroot/js/upgraderecord.js b/wwwroot/js/upgraderecord.js index 6471c08..d0ce63a 100644 --- a/wwwroot/js/upgraderecord.js +++ b/wwwroot/js/upgraderecord.js @@ -88,6 +88,10 @@ function getAndValidateUpgradeRecordValues() { var addReminderRecord = $("#addReminderCheck").is(":checked"); //validation var hasError = false; + var extraFields = getAndValidateExtraFields(); + if (extraFields.hasError) { + hasError = true; + } if (upgradeDate.trim() == '') { //eliminates whitespace. hasError = true; $("#upgradeRecordDate").addClass("is-invalid"); @@ -124,6 +128,7 @@ function getAndValidateUpgradeRecordValues() { files: uploadedFiles, supplies: selectedSupplies, tags: upgradeTags, - addReminderRecord: addReminderRecord + addReminderRecord: addReminderRecord, + extraFields: extraFields.extraFields } } \ No newline at end of file