add report header.

This commit is contained in:
DESKTOP-T0O5CDB\DESK-555BD
2025-05-16 19:23:56 -06:00
parent 44c5f921a5
commit 9842f0e501
6 changed files with 111 additions and 26 deletions

View File

@@ -14,14 +14,15 @@ namespace CarCareTracker.Controllers
{ {
//get records //get records
var vehicleData = _dataAccess.GetVehicleById(vehicleId); var vehicleData = _dataAccess.GetVehicleById(vehicleId);
var serviceRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId); var vehicleRecords = _vehicleLogic.GetVehicleRecords(vehicleId);
var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); var serviceRecords = vehicleRecords.ServiceRecords;
var collisionRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId); var gasRecords = vehicleRecords.GasRecords;
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); var collisionRecords = vehicleRecords.CollisionRecords;
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId); var taxRecords = vehicleRecords.TaxRecords;
var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId); var upgradeRecords = vehicleRecords.UpgradeRecords;
var odometerRecords = vehicleRecords.OdometerRecords;
var userConfig = _config.GetUserConfig(User); var userConfig = _config.GetUserConfig(User);
var viewModel = new ReportViewModel(); var viewModel = new ReportViewModel() { ReportHeaderForVehicle = new ReportHeader() };
//check if custom widgets are configured //check if custom widgets are configured
viewModel.CustomWidgetsConfigured = _fileHelper.WidgetsExist(); viewModel.CustomWidgetsConfigured = _fileHelper.WidgetsExist();
//get totalCostMakeUp //get totalCostMakeUp
@@ -91,6 +92,7 @@ namespace CarCareTracker.Controllers
var mileageData = _gasHelper.GetGasRecordViewModels(gasRecords, userConfig.UseMPG, userConfig.UseUKMPG); var mileageData = _gasHelper.GetGasRecordViewModels(gasRecords, userConfig.UseMPG, userConfig.UseUKMPG);
string preferredFuelMileageUnit = _config.GetUserConfig(User).PreferredGasMileageUnit; string preferredFuelMileageUnit = _config.GetUserConfig(User).PreferredGasMileageUnit;
var fuelEconomyMileageUnit = StaticHelper.GetFuelEconomyUnit(vehicleData.IsElectric, vehicleData.UseHours, userConfig.UseMPG, userConfig.UseUKMPG); var fuelEconomyMileageUnit = StaticHelper.GetFuelEconomyUnit(vehicleData.IsElectric, vehicleData.UseHours, userConfig.UseMPG, userConfig.UseUKMPG);
var averageMPG = _gasHelper.GetAverageGasMileage(mileageData, userConfig.UseMPG);
mileageData.RemoveAll(x => x.MilesPerGallon == default); mileageData.RemoveAll(x => x.MilesPerGallon == default);
bool invertedFuelMileageUnit = fuelEconomyMileageUnit == "l/100km" && preferredFuelMileageUnit == "km/l"; bool invertedFuelMileageUnit = fuelEconomyMileageUnit == "l/100km" && preferredFuelMileageUnit == "km/l";
var monthlyMileageData = StaticHelper.GetBaseLineCostsNoMonthName(); var monthlyMileageData = StaticHelper.GetBaseLineCostsNoMonthName();
@@ -114,6 +116,12 @@ namespace CarCareTracker.Controllers
monthMileage.Cost = 100 / monthMileage.Cost; monthMileage.Cost = 100 / monthMileage.Cost;
} }
} }
var newAverageMPG = decimal.Parse(averageMPG, NumberStyles.Any);
if (newAverageMPG != 0)
{
newAverageMPG = 100 / newAverageMPG;
}
averageMPG = newAverageMPG.ToString("F");
} }
var mpgViewModel = new MPGForVehicleByMonth { var mpgViewModel = new MPGForVehicleByMonth {
CostData = monthlyMileageData, CostData = monthlyMileageData,
@@ -121,6 +129,12 @@ namespace CarCareTracker.Controllers
SortedCostData = (userConfig.UseMPG || invertedFuelMileageUnit) ? monthlyMileageData.OrderByDescending(x => x.Cost).ToList() : monthlyMileageData.OrderBy(x => x.Cost).ToList() SortedCostData = (userConfig.UseMPG || invertedFuelMileageUnit) ? monthlyMileageData.OrderByDescending(x => x.Cost).ToList() : monthlyMileageData.OrderBy(x => x.Cost).ToList()
}; };
viewModel.FuelMileageForVehicleByMonth = mpgViewModel; viewModel.FuelMileageForVehicleByMonth = mpgViewModel;
//report header
//total cost.
viewModel.ReportHeaderForVehicle.TotalCost = _vehicleLogic.GetVehicleTotalCost(vehicleRecords);
viewModel.ReportHeaderForVehicle.AverageMPG = $"{averageMPG} {mpgViewModel.Unit}";
viewModel.ReportHeaderForVehicle.MaxOdometer = _vehicleLogic.GetMaxMileage(vehicleRecords);
viewModel.ReportHeaderForVehicle.DistanceTraveled = odometerRecords.Sum(x => x.DistanceTraveled);
return PartialView("_Report", viewModel); return PartialView("_Report", viewModel);
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -145,6 +159,60 @@ namespace CarCareTracker.Controllers
return Json(result); return Json(result);
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
[HttpPost]
public IActionResult GetSummaryForVehicle(int vehicleId, int year = 0)
{
var vehicleData = _dataAccess.GetVehicleById(vehicleId);
var vehicleRecords = _vehicleLogic.GetVehicleRecords(vehicleId);
var serviceRecords = vehicleRecords.ServiceRecords;
var gasRecords = vehicleRecords.GasRecords;
var collisionRecords = vehicleRecords.CollisionRecords;
var taxRecords = vehicleRecords.TaxRecords;
var upgradeRecords = vehicleRecords.UpgradeRecords;
var odometerRecords = vehicleRecords.OdometerRecords;
if (year != default)
{
serviceRecords.RemoveAll(x => x.Date.Year != year);
gasRecords.RemoveAll(x => x.Date.Year != year);
collisionRecords.RemoveAll(x => x.Date.Year != year);
taxRecords.RemoveAll(x => x.Date.Year != year);
upgradeRecords.RemoveAll(x => x.Date.Year != year);
odometerRecords.RemoveAll(x => x.Date.Year != year);
}
var userConfig = _config.GetUserConfig(User);
var mileageData = _gasHelper.GetGasRecordViewModels(gasRecords, userConfig.UseMPG, userConfig.UseUKMPG);
string preferredFuelMileageUnit = _config.GetUserConfig(User).PreferredGasMileageUnit;
var fuelEconomyMileageUnit = StaticHelper.GetFuelEconomyUnit(vehicleData.IsElectric, vehicleData.UseHours, userConfig.UseMPG, userConfig.UseUKMPG);
var averageMPG = _gasHelper.GetAverageGasMileage(mileageData, userConfig.UseMPG);
bool invertedFuelMileageUnit = fuelEconomyMileageUnit == "l/100km" && preferredFuelMileageUnit == "km/l";
if (invertedFuelMileageUnit)
{
var newAverageMPG = decimal.Parse(averageMPG, NumberStyles.Any);
if (newAverageMPG != 0)
{
newAverageMPG = 100 / newAverageMPG;
}
averageMPG = newAverageMPG.ToString("F");
}
var mpgUnit = invertedFuelMileageUnit ? preferredFuelMileageUnit : fuelEconomyMileageUnit;
var viewModel = new ReportHeader()
{
TotalCost = _vehicleLogic.GetVehicleTotalCost(vehicleRecords),
AverageMPG = $"{averageMPG} {mpgUnit}",
MaxOdometer = _vehicleLogic.GetMaxMileage(vehicleRecords),
DistanceTraveled = odometerRecords.Sum(x => x.DistanceTraveled)
};
return PartialView("_ReportHeader", viewModel);
}
[TypeFilter(typeof(CollaboratorFilter))]
[HttpGet] [HttpGet]
public IActionResult GetCostMakeUpForVehicle(int vehicleId, int year = 0) public IActionResult GetCostMakeUpForVehicle(int vehicleId, int year = 0)
{ {

View File

@@ -5,6 +5,6 @@
public int MaxOdometer { get; set; } public int MaxOdometer { get; set; }
public int DistanceTraveled { get; set; } public int DistanceTraveled { get; set; }
public decimal TotalCost { get; set; } public decimal TotalCost { get; set; }
public decimal AverageMPG { get; set; } public string AverageMPG { get; set; }
} }
} }

View File

@@ -7,23 +7,8 @@
} }
@model ReportViewModel @model ReportViewModel
<div class="container reportTabContainer"> <div class="container reportTabContainer">
<div class="row hideOnPrint"> <div class="row hideOnPrint" id="reportHeaderContent">
<div class="col-md-3 col-12 mt-2 text-center"> @await Html.PartialAsync("_ReportHeader", Model.ReportHeaderForVehicle)
<span class="lead">@Model.ReportHeaderForVehicle.MaxOdometer.ToString("N0")</span><br />
<span class="text-secondary">Current Odometer</span>
</div>
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@Model.ReportHeaderForVehicle.DistanceTraveled.ToString("N0")</span><br />
<span class="text-secondary">Distance Traveled</span>
</div>
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@StaticHelper.HideZeroCost(Model.ReportHeaderForVehicle.DistanceTraveled.ToString("C2"), true)</span><br />
<span class="text-secondary">Total Cost</span>
</div>
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@Model.ReportHeaderForVehicle.AverageMPG.ToString("F")</span><br />
<span class="text-secondary">Average Fuel Economy</span>
</div>
</div> </div>
<hr /> <hr />
<div class="row hideOnPrint"> <div class="row hideOnPrint">

View File

@@ -0,0 +1,24 @@
@using CarCareTracker.Helper
@inject IConfigHelper config
@inject ITranslationHelper translator
@{
var userConfig = config.GetUserConfig(User);
var userLanguage = userConfig.UserLanguage;
}
@model ReportHeader
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@Model.MaxOdometer.ToString("N0")</span><br />
<span class="text-secondary">@translator.Translate(userLanguage, "Last Reported Odometer Reading")</span>
</div>
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@Model.DistanceTraveled.ToString("N0")</span><br />
<span class="text-secondary">@translator.Translate(userLanguage, "Distance Traveled")</span>
</div>
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@StaticHelper.HideZeroCost(Model.TotalCost.ToString("C2"), true)</span><br />
<span class="text-secondary">@translator.Translate(userLanguage, "Total Cost")</span>
</div>
<div class="col-md-3 col-12 mt-2 text-center">
<span class="lead">@Model.AverageMPG</span><br />
<span class="text-secondary">@translator.Translate(userLanguage, "Average Fuel Economy")</span>
</div>

File diff suppressed because one or more lines are too long

View File

@@ -143,6 +143,14 @@ function refreshMPGChart() {
var year = getYear(); var year = getYear();
$.post('/Vehicle/GetMonthMPGByVehicle', {vehicleId: vehicleId, year: year}, function (data) { $.post('/Vehicle/GetMonthMPGByVehicle', {vehicleId: vehicleId, year: year}, function (data) {
$("#monthFuelMileageReportContent").html(data); $("#monthFuelMileageReportContent").html(data);
refreshReportHeader();
})
}
function refreshReportHeader() {
var vehicleId = GetVehicleId().vehicleId;
var year = getYear();
$.post('/Vehicle/GetSummaryForVehicle', { vehicleId: vehicleId, year: year }, function (data) {
$("#reportHeaderContent").html(data);
}) })
} }
function setSelectedMetrics() { function setSelectedMetrics() {