From 1c2368f5a1c17bf6ce46b7af503f9f6852ef223f Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Fri, 5 Jan 2024 22:53:27 -0700 Subject: [PATCH] added option to mark gas record as not filled to full so that MPG calculations are deferred --- Controllers/VehicleController.cs | 63 ++++++++++++++++++++---------- Models/GasRecord/GasRecord.cs | 1 + Models/GasRecord/GasRecordInput.cs | 12 +++++- Views/Vehicle/_Gas.cshtml | 2 +- Views/Vehicle/_GasModal.cshtml | 8 +++- wwwroot/js/gasrecord.js | 4 +- 6 files changed, 65 insertions(+), 25 deletions(-) diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 084a16b..aa0c884 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -24,11 +24,11 @@ namespace CarCareTracker.Controllers private readonly IConfiguration _config; private readonly IFileHelper _fileHelper; - public VehicleController(ILogger logger, - IFileHelper fileHelper, - IVehicleDataAccess dataAccess, - INoteDataAccess noteDataAccess, - IServiceRecordDataAccess serviceRecordDataAccess, + public VehicleController(ILogger logger, + IFileHelper fileHelper, + IVehicleDataAccess dataAccess, + INoteDataAccess noteDataAccess, + IServiceRecordDataAccess serviceRecordDataAccess, IGasRecordDataAccess gasRecordDataAccess, ICollisionRecordDataAccess collisionRecordDataAccess, ITaxRecordDataAccess taxRecordDataAccess, @@ -160,7 +160,8 @@ namespace CarCareTracker.Controllers _gasRecordDataAccess.SaveGasRecordToVehicle(convertedRecord); } } - } else if (mode == "servicerecord") + } + else if (mode == "servicerecord") { var records = csv.GetRecords().ToList(); if (records.Any()) @@ -179,7 +180,8 @@ namespace CarCareTracker.Controllers _serviceRecordDataAccess.SaveServiceRecordToVehicle(convertedRecord); } } - } else if (mode == "repairrecord") + } + else if (mode == "repairrecord") { var records = csv.GetRecords().ToList(); if (records.Any()) @@ -198,7 +200,8 @@ namespace CarCareTracker.Controllers _collisionRecordDataAccess.SaveCollisionRecordToVehicle(convertedRecord); } } - } else if (mode == "taxrecord") + } + else if (mode == "taxrecord") { var records = csv.GetRecords().ToList(); if (records.Any()) @@ -239,14 +242,16 @@ namespace CarCareTracker.Controllers bool useMPG = bool.Parse(_config[nameof(UserConfig.UseMPG)]); var computedResults = new List(); int previousMileage = 0; + decimal unFactoredConsumption = 0.00M; + int unFactoredMileage = 0; //perform computation. - for(int i = 0; i < result.Count; i++) + for (int i = 0; i < result.Count; i++) { if (i > 0) { var currentObject = result[i]; var deltaMileage = currentObject.Mileage - previousMileage; - computedResults.Add(new GasRecordViewModel() + var gasRecordViewModel = new GasRecordViewModel() { Id = currentObject.Id, VehicleId = currentObject.VehicleId, @@ -255,10 +260,24 @@ namespace CarCareTracker.Controllers Gallons = currentObject.Gallons, Cost = currentObject.Cost, DeltaMileage = deltaMileage, - MilesPerGallon = useMPG ? (deltaMileage / currentObject.Gallons) : 100 / (deltaMileage / currentObject.Gallons), CostPerGallon = (currentObject.Cost / currentObject.Gallons) - }); - } else + }; + if (currentObject.IsFillToFull) + { + //if user filled to full. + gasRecordViewModel.MilesPerGallon = useMPG ? ((unFactoredMileage + deltaMileage) / (unFactoredConsumption + currentObject.Gallons)) : 100 / ((unFactoredMileage + deltaMileage) / (unFactoredConsumption + currentObject.Gallons)); + //reset unFactored vars + unFactoredConsumption = 0; + unFactoredMileage = 0; + } else + { + unFactoredConsumption += currentObject.Gallons; + unFactoredMileage += deltaMileage; + gasRecordViewModel.MilesPerGallon = 0; + } + computedResults.Add(gasRecordViewModel); + } + else { computedResults.Add(new GasRecordViewModel() { @@ -305,7 +324,8 @@ namespace CarCareTracker.Controllers Cost = result.Cost, Date = result.Date.ToShortDateString(), Files = result.Files, - Gallons = result.Gallons + Gallons = result.Gallons, + IsFillToFull = result.IsFillToFull }; return PartialView("_GasModal", convertedResult); } @@ -349,9 +369,11 @@ namespace CarCareTracker.Controllers { var result = _serviceRecordDataAccess.GetServiceRecordById(serviceRecordId); //convert to Input object. - var convertedResult = new ServiceRecordInput { Id = result.Id, - Cost = result.Cost, - Date = result.Date.ToShortDateString(), + var convertedResult = new ServiceRecordInput + { + Id = result.Id, + Cost = result.Cost, + Date = result.Date.ToShortDateString(), Description = result.Description, Mileage = result.Mileage, Notes = result.Notes, @@ -360,7 +382,7 @@ namespace CarCareTracker.Controllers }; return PartialView("_ServiceRecordModal", convertedResult); } - [HttpPost] + [HttpPost] public IActionResult DeleteServiceRecordById(int serviceRecordId) { var result = _serviceRecordDataAccess.DeleteServiceRecordById(serviceRecordId); @@ -508,9 +530,10 @@ namespace CarCareTracker.Controllers { gasRecords.RemoveAll(x => x.Date.Year != year); } - var groupedGasRecord = gasRecords.GroupBy(x => x.Date.Month).OrderBy(x=>x.Key).Select(x => new GasCostForVehicleByMonth { + var groupedGasRecord = gasRecords.GroupBy(x => x.Date.Month).OrderBy(x => x.Key).Select(x => new GasCostForVehicleByMonth + { MonthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(x.Key), - Cost = x.Sum(y=>y.Cost) + Cost = x.Sum(y => y.Cost) }).ToList(); return PartialView("_GasCostByMonthReport", groupedGasRecord); } diff --git a/Models/GasRecord/GasRecord.cs b/Models/GasRecord/GasRecord.cs index 77b5424..5566537 100644 --- a/Models/GasRecord/GasRecord.cs +++ b/Models/GasRecord/GasRecord.cs @@ -14,6 +14,7 @@ /// public decimal Gallons { get; set; } public decimal Cost { get; set; } + public bool IsFillToFull { get; set; } = true; public List Files { get; set; } = new List(); } } diff --git a/Models/GasRecord/GasRecordInput.cs b/Models/GasRecord/GasRecordInput.cs index 51d23ff..70de8b0 100644 --- a/Models/GasRecord/GasRecordInput.cs +++ b/Models/GasRecord/GasRecordInput.cs @@ -14,7 +14,17 @@ /// public decimal Gallons { get; set; } public decimal Cost { get; set; } + public bool IsFillToFull { get; set; } = true; public List Files { get; set; } = new List(); - public GasRecord ToGasRecord() { return new GasRecord { Id = Id, Cost = Cost, Date = DateTime.Parse(Date), Gallons = Gallons, Mileage = Mileage, VehicleId = VehicleId, Files = Files }; } + public GasRecord ToGasRecord() { return new GasRecord { + Id = Id, + Cost = Cost, + Date = DateTime.Parse(Date), + Gallons = Gallons, + Mileage = Mileage, + VehicleId = VehicleId, + Files = Files, + IsFillToFull = IsFillToFull + }; } } } diff --git a/Views/Vehicle/_Gas.cshtml b/Views/Vehicle/_Gas.cshtml index 7aa6e34..6c3d3e9 100644 --- a/Views/Vehicle/_Gas.cshtml +++ b/Views/Vehicle/_Gas.cshtml @@ -8,7 +8,7 @@
@($"# of Gas Records: {Model.Count()}") - @if (Model.Count() > 1) + @if (Model.Where(x=>x.MilesPerGallon > 0).Any()) { @($"Average Fuel Economy: {Model.Where(y => y.MilesPerGallon > 0)?.Average(x => x.MilesPerGallon).ToString("F") ?? "0"}") @($"Min Fuel Economy: {Model.Where(y => y.MilesPerGallon > 0)?.Min(x => x.MilesPerGallon).ToString("F") ?? "0"}") diff --git a/Views/Vehicle/_GasModal.cshtml b/Views/Vehicle/_GasModal.cshtml index 297a119..ba65279 100644 --- a/Views/Vehicle/_GasModal.cshtml +++ b/Views/Vehicle/_GasModal.cshtml @@ -22,9 +22,13 @@ - + +
+ + +
- +
@if (Model.Files.Any()) diff --git a/wwwroot/js/gasrecord.js b/wwwroot/js/gasrecord.js index 06809bc..a175bca 100644 --- a/wwwroot/js/gasrecord.js +++ b/wwwroot/js/gasrecord.js @@ -74,6 +74,7 @@ function getAndValidateGasRecordValues() { var gasMileage = $("#gasRecordMileage").val(); var gasGallons = $("#gasRecordGallons").val(); var gasCost = $("#gasRecordCost").val(); + var gasIsFillToFull = $("#gasIsFillToFull").is(":checked"); var vehicleId = GetVehicleId().vehicleId; var gasRecordId = getGasRecordModelData().id; //validation @@ -110,7 +111,8 @@ function getAndValidateGasRecordValues() { mileage: gasMileage, gallons: gasGallons, cost: gasCost, - files: uploadedFiles + files: uploadedFiles, + isFillToFull: gasIsFillToFull } } function deleteGasRecordFile(fileLocation, event) {