diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index bd74ef0..a5dca58 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -1295,7 +1295,7 @@ namespace CarCareTracker.Controllers var vehicleData = _dataAccess.GetVehicleById(vehicleId); var userConfig = _config.GetUserConfig(User); var totalDistanceTraveled = maxMileage - minMileage; - var totalMonths = _vehicleLogic.GetNumberOfMonths(serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords, taxRecords); + var totalDays = _vehicleLogic.GetOwnershipDays(vehicleData.PurchaseDate, vehicleData.SoldDate, serviceRecords, collisionRecords, gasRecords, upgradeRecords, odometerRecords, taxRecords); var viewModel = new CostTableForVehicle { ServiceRecordSum = serviceRecords.Sum(x => x.Cost), @@ -1305,7 +1305,7 @@ namespace CarCareTracker.Controllers UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost), TotalDistance = totalDistanceTraveled, DistanceUnit = vehicleData.UseHours ? "Per Hour" : userConfig.UseMPG ? "Per Mile" : "Per Kilometer", - NumberOfMonths = totalMonths + NumberOfDays = totalDays }; return PartialView("_CostTableReport", viewModel); } diff --git a/Logic/VehicleLogic.cs b/Logic/VehicleLogic.cs index 06a068d..e656443 100644 --- a/Logic/VehicleLogic.cs +++ b/Logic/VehicleLogic.cs @@ -10,7 +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); + int GetOwnershipDays(string purchaseDate, string soldDate, List serviceRecords, List repairRecords, List gasRecords, List upgradeRecords, List odometerRecords, List taxRecords); bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId); } public class VehicleLogic: IVehicleLogic @@ -154,17 +154,37 @@ namespace CarCareTracker.Logic } return numbersArray.Any() ? numbersArray.Min() : 0; } - public int GetNumberOfMonths(List serviceRecords, List repairRecords, List gasRecords, List upgradeRecords, List odometerRecords, List taxRecords) + public int GetOwnershipDays(string purchaseDate, string soldDate, 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(); + var startDate = DateTime.Now; + var endDate = DateTime.Now; + if (!string.IsNullOrWhiteSpace(soldDate)) + { + endDate = DateTime.Parse(soldDate); + } + if (!string.IsNullOrWhiteSpace(purchaseDate)) + { + //if purchase date is provided, then we just have to subtract the begin date to end date and return number of months + startDate = DateTime.Parse(purchaseDate); + var timeElapsed = (int)Math.Floor((endDate - startDate).TotalDays); + return timeElapsed; + } + var dateArray = new List(); + dateArray.AddRange(serviceRecords.Select(x => x.Date)); + dateArray.AddRange(repairRecords.Select(x => x.Date)); + dateArray.AddRange(gasRecords.Select(x => x.Date)); + dateArray.AddRange(upgradeRecords.Select(x => x.Date)); + dateArray.AddRange(odometerRecords.Select(x => x.Date)); + dateArray.AddRange(taxRecords.Select(x => x.Date)); + if (dateArray.Any()) + { + startDate = dateArray.Min(); + var timeElapsed = (int)Math.Floor((endDate - startDate).TotalDays); + return timeElapsed; + } else + { + return 1; + } } public bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId) { diff --git a/Models/Report/CostTableForVehicle.cs b/Models/Report/CostTableForVehicle.cs index 7ea9c2a..937bdbf 100644 --- a/Models/Report/CostTableForVehicle.cs +++ b/Models/Report/CostTableForVehicle.cs @@ -4,7 +4,7 @@ { public string DistanceUnit { get; set; } = "Per Mile"; public int TotalDistance { get; set; } - public int NumberOfMonths { get; set; } + public int NumberOfDays { get; set; } public decimal ServiceRecordSum { get; set; } public decimal GasRecordSum { get; set; } public decimal TaxRecordSum { get; set; } @@ -14,11 +14,11 @@ 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 ServiceRecordPerMonth { get { return NumberOfDays != default ? ServiceRecordSum / NumberOfDays : 0; } } + public decimal GasRecordPerMonth { get { return NumberOfDays != default ? GasRecordSum / NumberOfDays : 0; } } + public decimal CollisionRecordPerMonth { get { return NumberOfDays != default ? CollisionRecordSum / NumberOfDays : 0; } } + public decimal UpgradeRecordPerMonth { get { return NumberOfDays != default ? UpgradeRecordSum / NumberOfDays : 0; } } + public decimal TaxRecordPerMonth { get { return NumberOfDays != default ? TaxRecordSum / NumberOfDays : 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/_CostTableReport.cshtml b/Views/Vehicle/_CostTableReport.cshtml index 344c01f..95efea8 100644 --- a/Views/Vehicle/_CostTableReport.cshtml +++ b/Views/Vehicle/_CostTableReport.cshtml @@ -4,6 +4,7 @@ @{ var userConfig = config.GetUserConfig(User); var userLanguage = userConfig.UserLanguage; + var hideZero = userConfig.HideZero; } @model CostTableForVehicle @if (Model.CollisionRecordSum + Model.ServiceRecordSum + Model.GasRecordSum + Model.TaxRecordSum + Model.UpgradeRecordSum > 0) @@ -20,7 +21,7 @@ @translator.Translate(userLanguage, "Type") - @translator.Translate(userLanguage, "Monthly Average") + @translator.Translate(userLanguage, "Cost Per Day") @translator.Translate(userLanguage, Model.DistanceUnit) @translator.Translate(userLanguage, "Total") @@ -28,39 +29,39 @@ @translator.Translate(userLanguage, "Service Records") - @Model.ServiceRecordPerMonth.ToString("C2") - @Model.ServiceRecordPerMile.ToString("C2") - @Model.ServiceRecordSum.ToString("C2") + @(hideZero && Model.ServiceRecordPerMonth == default ? "---" : Model.ServiceRecordPerMonth.ToString("C2")) + @(hideZero && Model.ServiceRecordPerMile == default ? "---" :Model.ServiceRecordPerMile.ToString("C2")) + @(hideZero && Model.ServiceRecordSum == default ? "---" :Model.ServiceRecordSum.ToString("C2")) @translator.Translate(userLanguage, "Repairs") - @Model.CollisionRecordPerMonth.ToString("C2") - @Model.CollisionRecordPerMile.ToString("C2") - @Model.CollisionRecordSum.ToString("C2") + @(hideZero && Model.CollisionRecordPerMonth == default ? "---" :Model.CollisionRecordPerMonth.ToString("C2")) + @(hideZero && Model.CollisionRecordPerMile == default ? "---" :Model.CollisionRecordPerMile.ToString("C2")) + @(hideZero && Model.CollisionRecordSum == default ? "---" :Model.CollisionRecordSum.ToString("C2")) @translator.Translate(userLanguage, "Upgrades") - @Model.UpgradeRecordPerMonth.ToString("C2") - @Model.UpgradeRecordPerMile.ToString("C2") - @Model.UpgradeRecordSum.ToString("C2") + @(hideZero && Model.UpgradeRecordPerMonth == default ? "---" :Model.UpgradeRecordPerMonth.ToString("C2")) + @(hideZero && Model.UpgradeRecordPerMile == default ? "---" :Model.UpgradeRecordPerMile.ToString("C2")) + @(hideZero && Model.UpgradeRecordSum == default ? "---" :Model.UpgradeRecordSum.ToString("C2")) @translator.Translate(userLanguage, "Fuel") - @Model.GasRecordPerMonth.ToString("C2") - @Model.GasRecordPerMile.ToString("C2") - @Model.GasRecordSum.ToString("C2") + @(hideZero && Model.GasRecordPerMonth == default ? "---" :Model.GasRecordPerMonth.ToString("C2")) + @(hideZero && Model.GasRecordPerMile == default ? "---" :Model.GasRecordPerMile.ToString("C2")) + @(hideZero && Model.GasRecordSum == default ? "---" :Model.GasRecordSum.ToString("C2")) @translator.Translate(userLanguage, "Taxes") - @Model.TaxRecordPerMonth.ToString("C2") + @(hideZero && Model.TaxRecordPerMonth == default ? "---" :Model.TaxRecordPerMonth.ToString("C2")) --- - @Model.TaxRecordSum.ToString("C2") + @(hideZero && Model.TaxRecordSum == default ? "---" :Model.TaxRecordSum.ToString("C2")) @translator.Translate(userLanguage, "Total") - @Model.TotalPerMonth.ToString("C2") - @Model.TotalPerMile.ToString("C2") - @Model.TotalCost.ToString("C2") + @(hideZero && Model.TotalPerMonth == default ? "---" : Model.TotalPerMonth.ToString("C2")) + @(hideZero && Model.TotalPerMile == default ? "---" : Model.TotalPerMile.ToString("C2")) + @(hideZero && Model.TotalCost == default ? "---" : Model.TotalCost.ToString("C2"))