From c55528b8a0bdbaedd43a84ad74469697bc8ebc94 Mon Sep 17 00:00:00 2001 From: "DESKTOP-GENO133\\IvanPlex" Date: Fri, 2 Feb 2024 16:58:37 -0700 Subject: [PATCH] Re-calculate gas tag aggregate labels. --- Helper/GasHelper.cs | 14 +++----- Models/GasRecord/GasRecordViewModel.cs | 1 + Views/Shared/_Layout.cshtml | 4 ++- Views/Vehicle/_Gas.cshtml | 9 ++--- wwwroot/js/gasrecord.js | 46 ++++++++++++++++++++++---- 5 files changed, 54 insertions(+), 20 deletions(-) diff --git a/Helper/GasHelper.cs b/Helper/GasHelper.cs index 6dc6c1b..e31a34b 100644 --- a/Helper/GasHelper.cs +++ b/Helper/GasHelper.cs @@ -11,16 +11,12 @@ namespace CarCareTracker.Helper { public string GetAverageGasMileage(List results, bool useMPG) { - var recordsToCalculateGallons = results.Where(x => x.MilesPerGallon > 0 || !x.IsFillToFull); - var recordWithCalculatedMPG = recordsToCalculateGallons.Where(x => x.MilesPerGallon > 0); - var mileageAdjustment = results.Where(x => x.MissedFuelUp).Sum(y => y.DeltaMileage); - if (recordWithCalculatedMPG.Any()) + var recordsToCalculate = results.Where(x => x.IncludeInAverage); + if (recordsToCalculate.Any()) { - var maxMileage = recordWithCalculatedMPG.Max(x => x.Mileage); - var minMileage = recordWithCalculatedMPG.Min(x => x.Mileage); - var totalGallonsConsumed = recordsToCalculateGallons.Sum(x => x.Gallons); - var deltaMileage = maxMileage - minMileage - mileageAdjustment; - var averageGasMileage = (deltaMileage) / totalGallonsConsumed; + var totalMileage = recordsToCalculate.Sum(x => x.DeltaMileage); + var totalGallons = recordsToCalculate.Sum(x => x.Gallons); + var averageGasMileage = totalMileage / totalGallons; if (!useMPG) { averageGasMileage = 100 / averageGasMileage; diff --git a/Models/GasRecord/GasRecordViewModel.cs b/Models/GasRecord/GasRecordViewModel.cs index b9825f4..6086114 100644 --- a/Models/GasRecord/GasRecordViewModel.cs +++ b/Models/GasRecord/GasRecordViewModel.cs @@ -22,5 +22,6 @@ public bool MissedFuelUp { get; set; } public string Notes { get; set; } public List Tags { get; set; } = new List(); + public bool IncludeInAverage { get { return MilesPerGallon > 0 || (!IsFillToFull && !MissedFuelUp); } } } } diff --git a/Views/Shared/_Layout.cshtml b/Views/Shared/_Layout.cshtml index 932580d..a477fdc 100644 --- a/Views/Shared/_Layout.cshtml +++ b/Views/Shared/_Layout.cshtml @@ -5,6 +5,7 @@ var userConfig = config.GetUserConfig(User); var useDarkMode = userConfig.UseDarkMode; var enableCsvImports = userConfig.EnableCsvImports; + var useMPG = userConfig.UseMPG; var useMarkDown = userConfig.UseMarkDownOnSavedNotes; var useThreeDecimals = userConfig.UseThreeDecimalGasCost; var shortDatePattern = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; @@ -54,7 +55,8 @@ enableCsvImport : "@enableCsvImports" == "True", useMarkDown: "@useMarkDown" == "True", currencySymbol: decodeHTMLEntities("@numberFormat.CurrencySymbol"), - useThreeDecimals: "@useThreeDecimals" == "True" + useThreeDecimals: "@useThreeDecimals" == "True", + useMPG: "@useMPG" == "True" } } function getShortDatePattern() { diff --git a/Views/Vehicle/_Gas.cshtml b/Views/Vehicle/_Gas.cshtml index fb0c839..cb18047 100644 --- a/Views/Vehicle/_Gas.cshtml +++ b/Views/Vehicle/_Gas.cshtml @@ -60,7 +60,7 @@ @($"Total Cost: {Model.GasRecords.Sum(x => x.Cost).ToString(gasCostFormat)}") @foreach (string recordTag in recordTags) { - @recordTag + @recordTag } @foreach (string recordTag in recordTags) @@ -111,9 +111,9 @@ { @gasRecord.Date - @gasRecord.Mileage - @gasRecord.Gallons.ToString("F") - @(gasRecord.MilesPerGallon == 0 ? "---" : gasRecord.MilesPerGallon.ToString("F")) + @gasRecord.Mileage + @gasRecord.Gallons.ToString("F") + @(gasRecord.MilesPerGallon == 0 ? "---" : gasRecord.MilesPerGallon.ToString("F")) @((hideZero && gasRecord.Cost == default) ? "---" : gasRecord.Cost.ToString(gasCostFormat)) @((hideZero && gasRecord.CostPerGallon == default) ? "---" : gasRecord.CostPerGallon.ToString(gasCostFormat)) @@ -141,4 +141,5 @@ { @:convertGasConsumptionUnits(decodeHTMLEntities('@consumptionUnit'), decodeHTMLEntities('@preferredGasUnit'), false); } + \ No newline at end of file diff --git a/wwwroot/js/gasrecord.js b/wwwroot/js/gasrecord.js index 0fbeef7..5c70313 100644 --- a/wwwroot/js/gasrecord.js +++ b/wwwroot/js/gasrecord.js @@ -261,17 +261,20 @@ function convertFuelMileageUnits(currentUnit, destinationUnit, save) { var newAverage = globalParseFloat($("#averageFuelMileageLabel").text().replace("Average Fuel Economy: ", "")); if (newAverage > 0) { newAverage = 100 / newAverage; - $("#averageFuelMileageLabel").text(`Average Fuel Economy: ${newAverage.toFixed(2)}`) + var averageLabel = $("#averageFuelMileageLabel"); + averageLabel.text(`${averageLabel.text().split(':')[0]}: ${newAverage.toFixed(2)}`); } var newMin = globalParseFloat($("#minFuelMileageLabel").text().replace("Min Fuel Economy: ", "")); if (newMin > 0) { newMin = 100 / newMin; - $("#minFuelMileageLabel").text(`Min Fuel Economy: ${newMin.toFixed(2)}`) + var minLabel = $("#minFuelMileageLabel"); + minLabel.text(`${minLabel.text().split(':')[0]}: ${newMin.toFixed(2)}`); } var newMax = globalParseFloat($("#maxFuelMileageLabel").text().replace("Max Fuel Economy: ", "")); if (newMax > 0) { newMax = 100 / newMax; - $("#maxFuelMileageLabel").text(`Max Fuel Economy: ${newMax.toFixed(2)}`) + var maxLabel = $("#maxFuelMileageLabel"); + maxLabel.text(`${maxLabel.text().split(':')[0]}: ${newMax.toFixed(2)}`); } sender.text(sender.text().replace(sender.attr("data-unit"), "km/l")); sender.attr("data-unit", "km/l"); @@ -291,17 +294,20 @@ function convertFuelMileageUnits(currentUnit, destinationUnit, save) { var newAverage = globalParseFloat($("#averageFuelMileageLabel").text().replace("Average Fuel Economy: ", "")); if (newAverage > 0) { newAverage = 100 / newAverage; - $("#averageFuelMileageLabel").text(`Average Fuel Economy: ${newAverage.toFixed(2)}`) + var averageLabel = $("#averageFuelMileageLabel"); + averageLabel.text(`${averageLabel.text().split(':')[0]}: ${newAverage.toFixed(2)}`); } var newMin = globalParseFloat($("#minFuelMileageLabel").text().replace("Min Fuel Economy: ", "")); if (newMin > 0) { newMin = 100 / newMin; - $("#minFuelMileageLabel").text(`Min Fuel Economy: ${newMin.toFixed(2)}`) + var minLabel = $("#minFuelMileageLabel"); + minLabel.text(`${minLabel.text().split(':')[0]}: ${newMin.toFixed(2)}`); } var newMax = globalParseFloat($("#maxFuelMileageLabel").text().replace("Max Fuel Economy: ", "")); if (newMax > 0) { newMax = 100 / newMax; - $("#maxFuelMileageLabel").text(`Max Fuel Economy: ${newMax.toFixed(2)}`) + var maxLabel = $("#maxFuelMileageLabel"); + maxLabel.text(`${maxLabel.text().split(':')[0]}: ${newMax.toFixed(2)}`); } sender.text(sender.text().replace(sender.attr("data-unit"), "l/100km")); sender.attr("data-unit", "l/100km"); @@ -311,6 +317,34 @@ function convertFuelMileageUnits(currentUnit, destinationUnit, save) { } } } +function toggleGasFilter(sender) { + filterTable('gas-tab-pane', sender); + updateMPGLabels(); +} +function updateMPGLabels() { + var averageLabel = $("#averageFuelMileageLabel"); + var minLabel = $("#minFuelMileageLabel"); + var maxLabel = $("#maxFuelMileageLabel"); + if (averageLabel.length > 0 && minLabel.length > 0 && maxLabel.length > 0) { + var rowsToAggregate = $("[data-aggregated='true']").parent(":not('.override-hide')"); + var rowMPG = rowsToAggregate.children('[data-gas-type="fueleconomy"]').toArray().map(x => globalParseFloat(x.textContent)); + var maxMPG = rowMPG.length > 0 ? rowMPG.reduce((a, b) => a > b ? a : b) : 0; + var minMPG = rowMPG.length > 0 ? rowMPG.filter(x=>x>0).reduce((a, b) => a < b ? a : b) : 0; + var totalMilesTraveled = rowMPG.length > 0 ? rowsToAggregate.children('[data-gas-type="mileage"]').toArray().map(x => globalParseFloat($(x).attr("data-gas-aggregate"))).reduce((a, b) => a + b) : 0; + var totalGasConsumed = rowMPG.length > 0 ? rowsToAggregate.children('[data-gas-type="consumption"]').toArray().map(x => globalParseFloat($(x).attr("data-gas-aggregate"))).reduce((a, b) => a + b) : 0; + if (totalGasConsumed > 0) { + var averageMPG = totalMilesTraveled / totalGasConsumed; + if (!getGlobalConfig().useMPG && $("[data-gas='fueleconomy']").attr("data-unit") != 'km/l' && averageMPG > 0) { + averageMPG = 100 / averageMPG; + } + averageLabel.text(`${averageLabel.text().split(':')[0]}: ${averageMPG.toFixed(2)}`); + } else { + averageLabel.text(`${averageLabel.text().split(':')[0]}: 0.00`); + } + minLabel.text(`${minLabel.text().split(':')[0]}: ${minMPG.toFixed(2)}`); + maxLabel.text(`${maxLabel.text().split(':')[0]}: ${maxMPG.toFixed(2)}`); + } +} function toggleUnits(sender) { event.preventDefault();