diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 74ad888..bd74ef0 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -1140,11 +1140,7 @@ namespace CarCareTracker.Controllers var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId); var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId); - var maxMileage = _vehicleLogic.GetMaxMileage(serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords); - var minMileage = _vehicleLogic.GetMinMileage(serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords); - var vehicleData = _dataAccess.GetVehicleById(vehicleId); var userConfig = _config.GetUserConfig(User); - var totalDistanceTraveled = maxMileage - minMileage; var viewModel = new ReportViewModel(); //get totalCostMakeUp viewModel.CostMakeUpForVehicle = new CostMakeUpForVehicle @@ -1153,9 +1149,7 @@ namespace CarCareTracker.Controllers GasRecordSum = gasRecords.Sum(x => x.Cost), CollisionRecordSum = collisionRecords.Sum(x => x.Cost), TaxRecordSum = taxRecords.Sum(x => x.Cost), - UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost), - TotalDistance = totalDistanceTraveled, - DistanceUnit = vehicleData.UseHours ? "Per Hour" : userConfig.UseMPG ? "Per Mile" : "Per Kilometer" + UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost) }; //get costbymonth List allCosts = StaticHelper.GetBaseLineCosts(); @@ -1253,6 +1247,33 @@ namespace CarCareTracker.Controllers [TypeFilter(typeof(CollaboratorFilter))] [HttpGet] public IActionResult GetCostMakeUpForVehicle(int vehicleId, int year = 0) + { + var serviceRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId); + var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); + var collisionRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId); + var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId); + var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId); + 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); + } + var viewModel = new CostMakeUpForVehicle + { + ServiceRecordSum = serviceRecords.Sum(x => x.Cost), + GasRecordSum = gasRecords.Sum(x => x.Cost), + CollisionRecordSum = collisionRecords.Sum(x => x.Cost), + TaxRecordSum = taxRecords.Sum(x => x.Cost), + UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost) + }; + return PartialView("_CostMakeUpReport", viewModel); + } + [TypeFilter(typeof(CollaboratorFilter))] + [HttpGet] + public IActionResult GetCostTableForVehicle(int vehicleId, int year = 0) { var serviceRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId); var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId); @@ -1271,10 +1292,11 @@ namespace CarCareTracker.Controllers } var maxMileage = _vehicleLogic.GetMaxMileage(serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords); var minMileage = _vehicleLogic.GetMinMileage(serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords); - var totalDistanceTraveled = maxMileage - minMileage; var vehicleData = _dataAccess.GetVehicleById(vehicleId); var userConfig = _config.GetUserConfig(User); - var viewModel = new CostMakeUpForVehicle + var totalDistanceTraveled = maxMileage - minMileage; + var totalMonths = _vehicleLogic.GetNumberOfMonths(serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords, taxRecords); + var viewModel = new CostTableForVehicle { ServiceRecordSum = serviceRecords.Sum(x => x.Cost), GasRecordSum = gasRecords.Sum(x => x.Cost), @@ -1282,9 +1304,10 @@ namespace CarCareTracker.Controllers TaxRecordSum = taxRecords.Sum(x => x.Cost), UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost), TotalDistance = totalDistanceTraveled, - DistanceUnit = vehicleData.UseHours ? "Per Hour" : userConfig.UseMPG ? "Per Mile" : "Per Kilometer" + DistanceUnit = vehicleData.UseHours ? "Per Hour" : userConfig.UseMPG ? "Per Mile" : "Per Kilometer", + NumberOfMonths = totalMonths }; - return PartialView("_CostMakeUpReport", viewModel); + return PartialView("_CostTableReport", viewModel); } [TypeFilter(typeof(CollaboratorFilter))] public IActionResult GetReminderMakeUpByVehicle(int vehicleId, int daysToAdd) diff --git a/Logic/VehicleLogic.cs b/Logic/VehicleLogic.cs index c5d87d3..06a068d 100644 --- a/Logic/VehicleLogic.cs +++ b/Logic/VehicleLogic.cs @@ -10,6 +10,7 @@ namespace CarCareTracker.Logic int GetMaxMileage(List serviceRecords, List repairRecords, List gasRecords, List upgradeRecords, List odometerRecords); int GetMinMileage(int vehicleId); int GetMinMileage(List serviceRecords, List repairRecords, List gasRecords, List upgradeRecords, List odometerRecords); + int GetNumberOfMonths(List serviceRecords, List repairRecords, List gasRecords, List upgradeRecords, List odometerRecords, List taxRecords); bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId); } public class VehicleLogic: IVehicleLogic @@ -153,6 +154,18 @@ namespace CarCareTracker.Logic } return numbersArray.Any() ? numbersArray.Min() : 0; } + public int GetNumberOfMonths(List serviceRecords, List repairRecords, List gasRecords, List upgradeRecords, List odometerRecords, List taxRecords) + { + var dateArray = new List(); + dateArray.AddRange(serviceRecords.Select(x => x.Date.ToString("MM/yyyy"))); + dateArray.AddRange(repairRecords.Select(x => x.Date.ToString("MM/yyyy"))); + dateArray.AddRange(gasRecords.Select(x => x.Date.ToString("MM/yyyy"))); + dateArray.AddRange(upgradeRecords.Select(x => x.Date.ToString("MM/yyyy"))); + dateArray.AddRange(odometerRecords.Select(x => x.Date.ToString("MM/yyyy"))); + dateArray.AddRange(taxRecords.Select(x => x.Date.ToString("MM/yyyy"))); + var uniqueMonths = dateArray.Distinct(); + return uniqueMonths.Count(); + } public bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId) { var currentMileage = GetMaxMileage(vehicleId); diff --git a/Models/Report/CostMakeUpForVehicle.cs b/Models/Report/CostMakeUpForVehicle.cs index 0497db4..a7846f0 100644 --- a/Models/Report/CostMakeUpForVehicle.cs +++ b/Models/Report/CostMakeUpForVehicle.cs @@ -2,24 +2,10 @@ { public class CostMakeUpForVehicle { - public string DistanceUnit { get; set; } = "Per Mile"; - public int TotalDistance { get; set; } public decimal ServiceRecordSum { get; set; } public decimal GasRecordSum { get; set; } public decimal TaxRecordSum { get; set; } public decimal CollisionRecordSum { get; set; } public decimal UpgradeRecordSum { get; set; } - public decimal ServiceRecordPerMile { get { return TotalDistance != default ? ServiceRecordSum / TotalDistance : 0; } } - public decimal GasRecordPerMile { get { return TotalDistance != default ? GasRecordSum / TotalDistance : 0; } } - public decimal CollisionRecordPerMile { get { return TotalDistance != default ? CollisionRecordSum / TotalDistance : 0; } } - public decimal UpgradeRecordPerMile { get { return TotalDistance != default ? UpgradeRecordSum / TotalDistance : 0; } } - public decimal ServiceRecordPerMonth { get { return ServiceRecordSum / 12; } } - public decimal GasRecordPerMonth { get { return GasRecordSum / 12; } } - public decimal CollisionRecordPerMonth { get { return CollisionRecordSum / 12; } } - public decimal UpgradeRecordPerMonth { get { return UpgradeRecordSum / 12; } } - public decimal TaxRecordPerMonth { get { return TaxRecordSum / 12; } } - public decimal TotalPerMonth { get { return ServiceRecordPerMonth + CollisionRecordPerMonth + UpgradeRecordPerMonth + GasRecordPerMonth + TaxRecordPerMonth; } } - public decimal TotalPerMile { get { return ServiceRecordPerMile + CollisionRecordPerMile + UpgradeRecordPerMile + GasRecordPerMile; } } - public decimal TotalCost { get { return ServiceRecordSum + CollisionRecordSum + UpgradeRecordSum + GasRecordSum + TaxRecordSum; } } } } diff --git a/Models/Report/CostTableForVehicle.cs b/Models/Report/CostTableForVehicle.cs new file mode 100644 index 0000000..7ea9c2a --- /dev/null +++ b/Models/Report/CostTableForVehicle.cs @@ -0,0 +1,26 @@ +namespace CarCareTracker.Models +{ + public class CostTableForVehicle + { + public string DistanceUnit { get; set; } = "Per Mile"; + public int TotalDistance { get; set; } + public int NumberOfMonths { get; set; } + public decimal ServiceRecordSum { get; set; } + public decimal GasRecordSum { get; set; } + public decimal TaxRecordSum { get; set; } + public decimal CollisionRecordSum { get; set; } + public decimal UpgradeRecordSum { get; set; } + public decimal ServiceRecordPerMile { get { return TotalDistance != default ? ServiceRecordSum / TotalDistance : 0; } } + public decimal GasRecordPerMile { get { return TotalDistance != default ? GasRecordSum / TotalDistance : 0; } } + public decimal CollisionRecordPerMile { get { return TotalDistance != default ? CollisionRecordSum / TotalDistance : 0; } } + public decimal UpgradeRecordPerMile { get { return TotalDistance != default ? UpgradeRecordSum / TotalDistance : 0; } } + public decimal ServiceRecordPerMonth { get { return NumberOfMonths != default ? ServiceRecordSum / NumberOfMonths : 0; } } + public decimal GasRecordPerMonth { get { return NumberOfMonths != default ? GasRecordSum / NumberOfMonths : 0; } } + public decimal CollisionRecordPerMonth { get { return NumberOfMonths != default ? CollisionRecordSum / NumberOfMonths : 0; } } + public decimal UpgradeRecordPerMonth { get { return NumberOfMonths != default ? UpgradeRecordSum / NumberOfMonths : 0; } } + public decimal TaxRecordPerMonth { get { return NumberOfMonths != default ? TaxRecordSum / NumberOfMonths : 0; } } + public decimal TotalPerMonth { get { return ServiceRecordPerMonth + CollisionRecordPerMonth + UpgradeRecordPerMonth + GasRecordPerMonth + TaxRecordPerMonth; } } + public decimal TotalPerMile { get { return ServiceRecordPerMile + CollisionRecordPerMile + UpgradeRecordPerMile + GasRecordPerMile; } } + public decimal TotalCost { get { return ServiceRecordSum + CollisionRecordSum + UpgradeRecordSum + GasRecordSum + TaxRecordSum; } } + } +} diff --git a/Views/Vehicle/_CostMakeUpReport.cshtml b/Views/Vehicle/_CostMakeUpReport.cshtml index 00b16d4..bbd1570 100644 --- a/Views/Vehicle/_CostMakeUpReport.cshtml +++ b/Views/Vehicle/_CostMakeUpReport.cshtml @@ -8,66 +8,6 @@ @model CostMakeUpForVehicle @if (Model.CollisionRecordSum + Model.ServiceRecordSum + Model.GasRecordSum + Model.TaxRecordSum + Model.UpgradeRecordSum > 0) { -
- - -