Re-calculate gas tag aggregate labels.
This commit is contained in:
@@ -11,16 +11,12 @@ namespace CarCareTracker.Helper
|
|||||||
{
|
{
|
||||||
public string GetAverageGasMileage(List<GasRecordViewModel> results, bool useMPG)
|
public string GetAverageGasMileage(List<GasRecordViewModel> results, bool useMPG)
|
||||||
{
|
{
|
||||||
var recordsToCalculateGallons = results.Where(x => x.MilesPerGallon > 0 || !x.IsFillToFull);
|
var recordsToCalculate = results.Where(x => x.IncludeInAverage);
|
||||||
var recordWithCalculatedMPG = recordsToCalculateGallons.Where(x => x.MilesPerGallon > 0);
|
if (recordsToCalculate.Any())
|
||||||
var mileageAdjustment = results.Where(x => x.MissedFuelUp).Sum(y => y.DeltaMileage);
|
|
||||||
if (recordWithCalculatedMPG.Any())
|
|
||||||
{
|
{
|
||||||
var maxMileage = recordWithCalculatedMPG.Max(x => x.Mileage);
|
var totalMileage = recordsToCalculate.Sum(x => x.DeltaMileage);
|
||||||
var minMileage = recordWithCalculatedMPG.Min(x => x.Mileage);
|
var totalGallons = recordsToCalculate.Sum(x => x.Gallons);
|
||||||
var totalGallonsConsumed = recordsToCalculateGallons.Sum(x => x.Gallons);
|
var averageGasMileage = totalMileage / totalGallons;
|
||||||
var deltaMileage = maxMileage - minMileage - mileageAdjustment;
|
|
||||||
var averageGasMileage = (deltaMileage) / totalGallonsConsumed;
|
|
||||||
if (!useMPG)
|
if (!useMPG)
|
||||||
{
|
{
|
||||||
averageGasMileage = 100 / averageGasMileage;
|
averageGasMileage = 100 / averageGasMileage;
|
||||||
|
|||||||
@@ -22,5 +22,6 @@
|
|||||||
public bool MissedFuelUp { get; set; }
|
public bool MissedFuelUp { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public List<string> Tags { get; set; } = new List<string>();
|
public List<string> Tags { get; set; } = new List<string>();
|
||||||
|
public bool IncludeInAverage { get { return MilesPerGallon > 0 || (!IsFillToFull && !MissedFuelUp); } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
var userConfig = config.GetUserConfig(User);
|
var userConfig = config.GetUserConfig(User);
|
||||||
var useDarkMode = userConfig.UseDarkMode;
|
var useDarkMode = userConfig.UseDarkMode;
|
||||||
var enableCsvImports = userConfig.EnableCsvImports;
|
var enableCsvImports = userConfig.EnableCsvImports;
|
||||||
|
var useMPG = userConfig.UseMPG;
|
||||||
var useMarkDown = userConfig.UseMarkDownOnSavedNotes;
|
var useMarkDown = userConfig.UseMarkDownOnSavedNotes;
|
||||||
var useThreeDecimals = userConfig.UseThreeDecimalGasCost;
|
var useThreeDecimals = userConfig.UseThreeDecimalGasCost;
|
||||||
var shortDatePattern = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
|
var shortDatePattern = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
|
||||||
@@ -54,7 +55,8 @@
|
|||||||
enableCsvImport : "@enableCsvImports" == "True",
|
enableCsvImport : "@enableCsvImports" == "True",
|
||||||
useMarkDown: "@useMarkDown" == "True",
|
useMarkDown: "@useMarkDown" == "True",
|
||||||
currencySymbol: decodeHTMLEntities("@numberFormat.CurrencySymbol"),
|
currencySymbol: decodeHTMLEntities("@numberFormat.CurrencySymbol"),
|
||||||
useThreeDecimals: "@useThreeDecimals" == "True"
|
useThreeDecimals: "@useThreeDecimals" == "True",
|
||||||
|
useMPG: "@useMPG" == "True"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function getShortDatePattern() {
|
function getShortDatePattern() {
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
<span class="ms-2 badge bg-success" data-aggregate-type="sum">@($"Total Cost: {Model.GasRecords.Sum(x => x.Cost).ToString(gasCostFormat)}")</span>
|
<span class="ms-2 badge bg-success" data-aggregate-type="sum">@($"Total Cost: {Model.GasRecords.Sum(x => x.Cost).ToString(gasCostFormat)}")</span>
|
||||||
@foreach (string recordTag in recordTags)
|
@foreach (string recordTag in recordTags)
|
||||||
{
|
{
|
||||||
<span onclick="filterTable('gas-tab-pane', this)" class="user-select-none ms-2 rounded-pill badge bg-secondary tagfilter" style="cursor:pointer;">@recordTag</span>
|
<span onclick="toggleGasFilter(this)" class="user-select-none ms-2 rounded-pill badge bg-secondary tagfilter" style="cursor:pointer;">@recordTag</span>
|
||||||
}
|
}
|
||||||
<datalist id="tagList">
|
<datalist id="tagList">
|
||||||
@foreach (string recordTag in recordTags)
|
@foreach (string recordTag in recordTags)
|
||||||
@@ -111,9 +111,9 @@
|
|||||||
{
|
{
|
||||||
<tr class="d-flex" style="cursor:pointer;" onclick="showEditGasRecordModal(@gasRecord.Id)" data-tags='@string.Join(" ", gasRecord.Tags)'>
|
<tr class="d-flex" style="cursor:pointer;" onclick="showEditGasRecordModal(@gasRecord.Id)" data-tags='@string.Join(" ", gasRecord.Tags)'>
|
||||||
<td class="col-2">@gasRecord.Date</td>
|
<td class="col-2">@gasRecord.Date</td>
|
||||||
<td class="col-2">@gasRecord.Mileage</td>
|
<td class="col-2" data-gas-type="mileage" data-gas-aggregate="@gasRecord.DeltaMileage">@gasRecord.Mileage</td>
|
||||||
<td class="col-2" data-gas-type="consumption">@gasRecord.Gallons.ToString("F")</td>
|
<td class="col-2" data-gas-type="consumption" data-gas-aggregate="@gasRecord.Gallons">@gasRecord.Gallons.ToString("F")</td>
|
||||||
<td class="col-4" data-gas-type="fueleconomy">@(gasRecord.MilesPerGallon == 0 ? "---" : gasRecord.MilesPerGallon.ToString("F"))</td>
|
<td class="col-4" data-gas-type="fueleconomy" data-aggregated='@(gasRecord.IncludeInAverage.ToString().ToLower())'>@(gasRecord.MilesPerGallon == 0 ? "---" : gasRecord.MilesPerGallon.ToString("F"))</td>
|
||||||
<td class="col-1" data-record-type="cost">@((hideZero && gasRecord.Cost == default) ? "---" : gasRecord.Cost.ToString(gasCostFormat))</td>
|
<td class="col-1" data-record-type="cost">@((hideZero && gasRecord.Cost == default) ? "---" : gasRecord.Cost.ToString(gasCostFormat))</td>
|
||||||
<td class="col-1" data-gas-type="unitcost">@((hideZero && gasRecord.CostPerGallon == default) ? "---" : gasRecord.CostPerGallon.ToString(gasCostFormat))</td>
|
<td class="col-1" data-gas-type="unitcost">@((hideZero && gasRecord.CostPerGallon == default) ? "---" : gasRecord.CostPerGallon.ToString(gasCostFormat))</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -141,4 +141,5 @@
|
|||||||
{
|
{
|
||||||
@:convertGasConsumptionUnits(decodeHTMLEntities('@consumptionUnit'), decodeHTMLEntities('@preferredGasUnit'), false);
|
@:convertGasConsumptionUnits(decodeHTMLEntities('@consumptionUnit'), decodeHTMLEntities('@preferredGasUnit'), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -261,17 +261,20 @@ function convertFuelMileageUnits(currentUnit, destinationUnit, save) {
|
|||||||
var newAverage = globalParseFloat($("#averageFuelMileageLabel").text().replace("Average Fuel Economy: ", ""));
|
var newAverage = globalParseFloat($("#averageFuelMileageLabel").text().replace("Average Fuel Economy: ", ""));
|
||||||
if (newAverage > 0) {
|
if (newAverage > 0) {
|
||||||
newAverage = 100 / newAverage;
|
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: ", ""));
|
var newMin = globalParseFloat($("#minFuelMileageLabel").text().replace("Min Fuel Economy: ", ""));
|
||||||
if (newMin > 0) {
|
if (newMin > 0) {
|
||||||
newMin = 100 / newMin;
|
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: ", ""));
|
var newMax = globalParseFloat($("#maxFuelMileageLabel").text().replace("Max Fuel Economy: ", ""));
|
||||||
if (newMax > 0) {
|
if (newMax > 0) {
|
||||||
newMax = 100 / newMax;
|
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.text(sender.text().replace(sender.attr("data-unit"), "km/l"));
|
||||||
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: ", ""));
|
var newAverage = globalParseFloat($("#averageFuelMileageLabel").text().replace("Average Fuel Economy: ", ""));
|
||||||
if (newAverage > 0) {
|
if (newAverage > 0) {
|
||||||
newAverage = 100 / newAverage;
|
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: ", ""));
|
var newMin = globalParseFloat($("#minFuelMileageLabel").text().replace("Min Fuel Economy: ", ""));
|
||||||
if (newMin > 0) {
|
if (newMin > 0) {
|
||||||
newMin = 100 / newMin;
|
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: ", ""));
|
var newMax = globalParseFloat($("#maxFuelMileageLabel").text().replace("Max Fuel Economy: ", ""));
|
||||||
if (newMax > 0) {
|
if (newMax > 0) {
|
||||||
newMax = 100 / newMax;
|
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.text(sender.text().replace(sender.attr("data-unit"), "l/100km"));
|
||||||
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) {
|
function toggleUnits(sender) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|||||||
Reference in New Issue
Block a user