convert to number of days and replace zero values with dashes
This commit is contained in:
@@ -1295,7 +1295,7 @@ namespace CarCareTracker.Controllers
|
|||||||
var vehicleData = _dataAccess.GetVehicleById(vehicleId);
|
var vehicleData = _dataAccess.GetVehicleById(vehicleId);
|
||||||
var userConfig = _config.GetUserConfig(User);
|
var userConfig = _config.GetUserConfig(User);
|
||||||
var totalDistanceTraveled = maxMileage - minMileage;
|
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
|
var viewModel = new CostTableForVehicle
|
||||||
{
|
{
|
||||||
ServiceRecordSum = serviceRecords.Sum(x => x.Cost),
|
ServiceRecordSum = serviceRecords.Sum(x => x.Cost),
|
||||||
@@ -1305,7 +1305,7 @@ namespace CarCareTracker.Controllers
|
|||||||
UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost),
|
UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost),
|
||||||
TotalDistance = totalDistanceTraveled,
|
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
|
NumberOfDays = totalDays
|
||||||
};
|
};
|
||||||
return PartialView("_CostTableReport", viewModel);
|
return PartialView("_CostTableReport", viewModel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace CarCareTracker.Logic
|
|||||||
int GetMaxMileage(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords);
|
int GetMaxMileage(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords);
|
||||||
int GetMinMileage(int vehicleId);
|
int GetMinMileage(int vehicleId);
|
||||||
int GetMinMileage(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords);
|
int GetMinMileage(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords);
|
||||||
int GetNumberOfMonths(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords, List<TaxRecord> taxRecords);
|
int GetOwnershipDays(string purchaseDate, string soldDate, List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords, List<TaxRecord> taxRecords);
|
||||||
bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId);
|
bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId);
|
||||||
}
|
}
|
||||||
public class VehicleLogic: IVehicleLogic
|
public class VehicleLogic: IVehicleLogic
|
||||||
@@ -154,17 +154,37 @@ namespace CarCareTracker.Logic
|
|||||||
}
|
}
|
||||||
return numbersArray.Any() ? numbersArray.Min() : 0;
|
return numbersArray.Any() ? numbersArray.Min() : 0;
|
||||||
}
|
}
|
||||||
public int GetNumberOfMonths(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords, List<TaxRecord> taxRecords)
|
public int GetOwnershipDays(string purchaseDate, string soldDate, List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords, List<TaxRecord> taxRecords)
|
||||||
{
|
{
|
||||||
var dateArray = new List<string>();
|
var startDate = DateTime.Now;
|
||||||
dateArray.AddRange(serviceRecords.Select(x => x.Date.ToString("MM/yyyy")));
|
var endDate = DateTime.Now;
|
||||||
dateArray.AddRange(repairRecords.Select(x => x.Date.ToString("MM/yyyy")));
|
if (!string.IsNullOrWhiteSpace(soldDate))
|
||||||
dateArray.AddRange(gasRecords.Select(x => x.Date.ToString("MM/yyyy")));
|
{
|
||||||
dateArray.AddRange(upgradeRecords.Select(x => x.Date.ToString("MM/yyyy")));
|
endDate = DateTime.Parse(soldDate);
|
||||||
dateArray.AddRange(odometerRecords.Select(x => x.Date.ToString("MM/yyyy")));
|
}
|
||||||
dateArray.AddRange(taxRecords.Select(x => x.Date.ToString("MM/yyyy")));
|
if (!string.IsNullOrWhiteSpace(purchaseDate))
|
||||||
var uniqueMonths = dateArray.Distinct();
|
{
|
||||||
return uniqueMonths.Count();
|
//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<DateTime>();
|
||||||
|
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)
|
public bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{
|
{
|
||||||
public string DistanceUnit { get; set; } = "Per Mile";
|
public string DistanceUnit { get; set; } = "Per Mile";
|
||||||
public int TotalDistance { get; set; }
|
public int TotalDistance { get; set; }
|
||||||
public int NumberOfMonths { get; set; }
|
public int NumberOfDays { get; set; }
|
||||||
public decimal ServiceRecordSum { get; set; }
|
public decimal ServiceRecordSum { get; set; }
|
||||||
public decimal GasRecordSum { get; set; }
|
public decimal GasRecordSum { get; set; }
|
||||||
public decimal TaxRecordSum { get; set; }
|
public decimal TaxRecordSum { get; set; }
|
||||||
@@ -14,11 +14,11 @@
|
|||||||
public decimal GasRecordPerMile { get { return TotalDistance != default ? GasRecordSum / TotalDistance : 0; } }
|
public decimal GasRecordPerMile { get { return TotalDistance != default ? GasRecordSum / TotalDistance : 0; } }
|
||||||
public decimal CollisionRecordPerMile { get { return TotalDistance != default ? CollisionRecordSum / TotalDistance : 0; } }
|
public decimal CollisionRecordPerMile { get { return TotalDistance != default ? CollisionRecordSum / TotalDistance : 0; } }
|
||||||
public decimal UpgradeRecordPerMile { get { return TotalDistance != default ? UpgradeRecordSum / TotalDistance : 0; } }
|
public decimal UpgradeRecordPerMile { get { return TotalDistance != default ? UpgradeRecordSum / TotalDistance : 0; } }
|
||||||
public decimal ServiceRecordPerMonth { get { return NumberOfMonths != default ? ServiceRecordSum / NumberOfMonths : 0; } }
|
public decimal ServiceRecordPerMonth { get { return NumberOfDays != default ? ServiceRecordSum / NumberOfDays : 0; } }
|
||||||
public decimal GasRecordPerMonth { get { return NumberOfMonths != default ? GasRecordSum / NumberOfMonths : 0; } }
|
public decimal GasRecordPerMonth { get { return NumberOfDays != default ? GasRecordSum / NumberOfDays : 0; } }
|
||||||
public decimal CollisionRecordPerMonth { get { return NumberOfMonths != default ? CollisionRecordSum / NumberOfMonths : 0; } }
|
public decimal CollisionRecordPerMonth { get { return NumberOfDays != default ? CollisionRecordSum / NumberOfDays : 0; } }
|
||||||
public decimal UpgradeRecordPerMonth { get { return NumberOfMonths != default ? UpgradeRecordSum / NumberOfMonths : 0; } }
|
public decimal UpgradeRecordPerMonth { get { return NumberOfDays != default ? UpgradeRecordSum / NumberOfDays : 0; } }
|
||||||
public decimal TaxRecordPerMonth { get { return NumberOfMonths != default ? TaxRecordSum / NumberOfMonths : 0; } }
|
public decimal TaxRecordPerMonth { get { return NumberOfDays != default ? TaxRecordSum / NumberOfDays : 0; } }
|
||||||
public decimal TotalPerMonth { get { return ServiceRecordPerMonth + CollisionRecordPerMonth + UpgradeRecordPerMonth + GasRecordPerMonth + TaxRecordPerMonth; } }
|
public decimal TotalPerMonth { get { return ServiceRecordPerMonth + CollisionRecordPerMonth + UpgradeRecordPerMonth + GasRecordPerMonth + TaxRecordPerMonth; } }
|
||||||
public decimal TotalPerMile { get { return ServiceRecordPerMile + CollisionRecordPerMile + UpgradeRecordPerMile + GasRecordPerMile; } }
|
public decimal TotalPerMile { get { return ServiceRecordPerMile + CollisionRecordPerMile + UpgradeRecordPerMile + GasRecordPerMile; } }
|
||||||
public decimal TotalCost { get { return ServiceRecordSum + CollisionRecordSum + UpgradeRecordSum + GasRecordSum + TaxRecordSum; } }
|
public decimal TotalCost { get { return ServiceRecordSum + CollisionRecordSum + UpgradeRecordSum + GasRecordSum + TaxRecordSum; } }
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
@{
|
@{
|
||||||
var userConfig = config.GetUserConfig(User);
|
var userConfig = config.GetUserConfig(User);
|
||||||
var userLanguage = userConfig.UserLanguage;
|
var userLanguage = userConfig.UserLanguage;
|
||||||
|
var hideZero = userConfig.HideZero;
|
||||||
}
|
}
|
||||||
@model CostTableForVehicle
|
@model CostTableForVehicle
|
||||||
@if (Model.CollisionRecordSum + Model.ServiceRecordSum + Model.GasRecordSum + Model.TaxRecordSum + Model.UpgradeRecordSum > 0)
|
@if (Model.CollisionRecordSum + Model.ServiceRecordSum + Model.GasRecordSum + Model.TaxRecordSum + Model.UpgradeRecordSum > 0)
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
<thead class="sticky-top">
|
<thead class="sticky-top">
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Type")</th>
|
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Type")</th>
|
||||||
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Monthly Average")</th>
|
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Cost Per Day")</th>
|
||||||
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, Model.DistanceUnit)</th>
|
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, Model.DistanceUnit)</th>
|
||||||
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Total")</th>
|
<th scope="col" class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Total")</th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -28,39 +29,39 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Service Records")</td>
|
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Service Records")</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.ServiceRecordPerMonth.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.ServiceRecordPerMonth == default ? "---" : Model.ServiceRecordPerMonth.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.ServiceRecordPerMile.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.ServiceRecordPerMile == default ? "---" :Model.ServiceRecordPerMile.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.ServiceRecordSum.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.ServiceRecordSum == default ? "---" :Model.ServiceRecordSum.ToString("C2"))</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Repairs")</td>
|
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Repairs")</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.CollisionRecordPerMonth.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.CollisionRecordPerMonth == default ? "---" :Model.CollisionRecordPerMonth.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.CollisionRecordPerMile.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.CollisionRecordPerMile == default ? "---" :Model.CollisionRecordPerMile.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.CollisionRecordSum.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.CollisionRecordSum == default ? "---" :Model.CollisionRecordSum.ToString("C2"))</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Upgrades")</td>
|
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Upgrades")</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.UpgradeRecordPerMonth.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.UpgradeRecordPerMonth == default ? "---" :Model.UpgradeRecordPerMonth.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.UpgradeRecordPerMile.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.UpgradeRecordPerMile == default ? "---" :Model.UpgradeRecordPerMile.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.UpgradeRecordSum.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.UpgradeRecordSum == default ? "---" :Model.UpgradeRecordSum.ToString("C2"))</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Fuel")</td>
|
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Fuel")</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.GasRecordPerMonth.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.GasRecordPerMonth == default ? "---" :Model.GasRecordPerMonth.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.GasRecordPerMile.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.GasRecordPerMile == default ? "---" :Model.GasRecordPerMile.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.GasRecordSum.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.GasRecordSum == default ? "---" :Model.GasRecordSum.ToString("C2"))</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Taxes")</td>
|
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Taxes")</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.TaxRecordPerMonth.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.TaxRecordPerMonth == default ? "---" :Model.TaxRecordPerMonth.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">---</td>
|
<td class="col-3 flex-grow-1">---</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.TaxRecordSum.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.TaxRecordSum == default ? "---" :Model.TaxRecordSum.ToString("C2"))</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="d-flex">
|
<tr class="d-flex">
|
||||||
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Total")</td>
|
<td class="col-3 flex-grow-1">@translator.Translate(userLanguage, "Total")</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.TotalPerMonth.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.TotalPerMonth == default ? "---" : Model.TotalPerMonth.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.TotalPerMile.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.TotalPerMile == default ? "---" : Model.TotalPerMile.ToString("C2"))</td>
|
||||||
<td class="col-3 flex-grow-1">@Model.TotalCost.ToString("C2")</td>
|
<td class="col-3 flex-grow-1">@(hideZero && Model.TotalCost == default ? "---" : Model.TotalCost.ToString("C2"))</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
Reference in New Issue
Block a user