diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 0b12a6b..9c81a38 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -682,6 +682,69 @@ namespace CarCareTracker.Controllers }; return PartialView("_ReminderMakeUpReport", viewModel); } + public IActionResult GetVehicleHistory(int vehicleId) + { + var vehicleHistory = new VehicleHistoryViewModel(); + vehicleHistory.VehicleData = _dataAccess.GetVehicleById(vehicleId); + vehicleHistory.Odometer = GetMaxMileage(vehicleId).ToString("N0"); + List reportData = new List(); + var serviceRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId); + var repairRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId); + var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId); + var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); + var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); + bool useMPG = bool.Parse(_config[nameof(UserConfig.UseMPG)]); + bool useUKMPG = bool.Parse(_config[nameof(UserConfig.UseUKMPG)]); + vehicleHistory.TotalGasCost = gasRecords.Sum(x => x.Cost); + vehicleHistory.TotalCost = serviceRecords.Sum(x => x.Cost) + repairRecords.Sum(x => x.Cost) + upgradeRecords.Sum(x => x.Cost) + taxRecords.Sum(x => x.Cost); + var averageMPG = 0.00M; + var gasViewModels = _gasHelper.GetGasRecordViewModels(gasRecords, useMPG, useUKMPG); + if (gasViewModels.Any()) + { + averageMPG = gasViewModels.Average(x => x.MilesPerGallon); + } + vehicleHistory.MPG = averageMPG; + //insert servicerecords + reportData.AddRange(serviceRecords.Select(x => new GenericReportModel + { + Date = x.Date, + Odometer = x.Mileage, + Description = x.Description, + Notes = x.Notes, + Cost = x.Cost, + DataType = ImportMode.ServiceRecord + })); + //repair records + reportData.AddRange(repairRecords.Select(x => new GenericReportModel + { + Date = x.Date, + Odometer = x.Mileage, + Description = x.Description, + Notes = x.Notes, + Cost = x.Cost, + DataType = ImportMode.RepairRecord + })); + reportData.AddRange(upgradeRecords.Select(x => new GenericReportModel + { + Date = x.Date, + Odometer = x.Mileage, + Description = x.Description, + Notes = x.Notes, + Cost = x.Cost, + DataType = ImportMode.UpgradeRecord + })); + reportData.AddRange(taxRecords.Select(x => new GenericReportModel + { + Date = x.Date, + Odometer = 0, + Description = x.Description, + Notes = x.Notes, + Cost = x.Cost, + DataType = ImportMode.TaxRecord + })); + vehicleHistory.VehicleHistory = reportData; + return PartialView("_VehicleHistory", vehicleHistory); + } [HttpPost] public IActionResult GetCostByMonthByVehicle(int vehicleId, List selectedMetrics, int year = 0) { diff --git a/Models/ImportModel.cs b/Models/ImportModel.cs index 5b71fd7..e9ae7e7 100644 --- a/Models/ImportModel.cs +++ b/Models/ImportModel.cs @@ -1,7 +1,7 @@ namespace CarCareTracker.Models { /// - /// Import model used for importing Gas records. + /// Import model used for importing records via CSV. /// public class ImportModel { @@ -16,6 +16,7 @@ public string IsFillToFull { get; set; } public string MissedFuelUp { get; set; } } + public class ServiceRecordExportModel { public string Date { get; set; } diff --git a/Models/Report/GenericReportModel.cs b/Models/Report/GenericReportModel.cs new file mode 100644 index 0000000..c3dcd76 --- /dev/null +++ b/Models/Report/GenericReportModel.cs @@ -0,0 +1,15 @@ +namespace CarCareTracker.Models +{ + /// + /// Generic Model used for vehicle history report. + /// + public class GenericReportModel + { + public ImportMode DataType { get; set; } + public DateTime Date { get; set; } + public int Odometer { get; set; } + public string Description { get; set; } + public string Notes { get; set; } + public decimal Cost { get; set; } + } +} diff --git a/Models/Report/VehicleHistoryViewModel.cs b/Models/Report/VehicleHistoryViewModel.cs new file mode 100644 index 0000000..7b1745b --- /dev/null +++ b/Models/Report/VehicleHistoryViewModel.cs @@ -0,0 +1,12 @@ +namespace CarCareTracker.Models +{ + public class VehicleHistoryViewModel + { + public Vehicle VehicleData { get; set; } + public List VehicleHistory { get; set; } + public string Odometer { get; set; } + public decimal MPG { get; set; } + public decimal TotalCost { get; set; } + public decimal TotalGasCost { get; set; } + } +} diff --git a/Views/Vehicle/Index.cshtml b/Views/Vehicle/Index.cshtml index 784da81..998847e 100644 --- a/Views/Vehicle/Index.cshtml +++ b/Views/Vehicle/Index.cshtml @@ -37,7 +37,7 @@