Added data table
This commit is contained in:
@@ -1140,6 +1140,11 @@ namespace CarCareTracker.Controllers
|
|||||||
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId);
|
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId);
|
||||||
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
||||||
var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(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();
|
var viewModel = new ReportViewModel();
|
||||||
//get totalCostMakeUp
|
//get totalCostMakeUp
|
||||||
viewModel.CostMakeUpForVehicle = new CostMakeUpForVehicle
|
viewModel.CostMakeUpForVehicle = new CostMakeUpForVehicle
|
||||||
@@ -1148,7 +1153,9 @@ namespace CarCareTracker.Controllers
|
|||||||
GasRecordSum = gasRecords.Sum(x => x.Cost),
|
GasRecordSum = gasRecords.Sum(x => x.Cost),
|
||||||
CollisionRecordSum = collisionRecords.Sum(x => x.Cost),
|
CollisionRecordSum = collisionRecords.Sum(x => x.Cost),
|
||||||
TaxRecordSum = taxRecords.Sum(x => x.Cost),
|
TaxRecordSum = taxRecords.Sum(x => x.Cost),
|
||||||
UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost)
|
UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost),
|
||||||
|
TotalDistance = totalDistanceTraveled,
|
||||||
|
DistanceUnit = vehicleData.UseHours ? "Per Hour" : userConfig.UseMPG ? "Per Mile" : "Per Kilometer"
|
||||||
};
|
};
|
||||||
//get costbymonth
|
//get costbymonth
|
||||||
List<CostForVehicleByMonth> allCosts = StaticHelper.GetBaseLineCosts();
|
List<CostForVehicleByMonth> allCosts = StaticHelper.GetBaseLineCosts();
|
||||||
@@ -1205,7 +1212,6 @@ namespace CarCareTracker.Controllers
|
|||||||
var collaborators = _userLogic.GetCollaboratorsForVehicle(vehicleId);
|
var collaborators = _userLogic.GetCollaboratorsForVehicle(vehicleId);
|
||||||
viewModel.Collaborators = collaborators;
|
viewModel.Collaborators = collaborators;
|
||||||
//get MPG per month.
|
//get MPG per month.
|
||||||
var userConfig = _config.GetUserConfig(User);
|
|
||||||
var mileageData = _gasHelper.GetGasRecordViewModels(gasRecords, userConfig.UseMPG, userConfig.UseUKMPG);
|
var mileageData = _gasHelper.GetGasRecordViewModels(gasRecords, userConfig.UseMPG, userConfig.UseUKMPG);
|
||||||
mileageData.RemoveAll(x => x.MilesPerGallon == default);
|
mileageData.RemoveAll(x => x.MilesPerGallon == default);
|
||||||
var monthlyMileageData = StaticHelper.GetBaseLineCostsNoMonthName();
|
var monthlyMileageData = StaticHelper.GetBaseLineCostsNoMonthName();
|
||||||
@@ -1253,6 +1259,7 @@ namespace CarCareTracker.Controllers
|
|||||||
var collisionRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
var collisionRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
||||||
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId);
|
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId);
|
||||||
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
||||||
|
var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
|
||||||
if (year != default)
|
if (year != default)
|
||||||
{
|
{
|
||||||
serviceRecords.RemoveAll(x => x.Date.Year != year);
|
serviceRecords.RemoveAll(x => x.Date.Year != year);
|
||||||
@@ -1260,14 +1267,22 @@ namespace CarCareTracker.Controllers
|
|||||||
collisionRecords.RemoveAll(x => x.Date.Year != year);
|
collisionRecords.RemoveAll(x => x.Date.Year != year);
|
||||||
taxRecords.RemoveAll(x => x.Date.Year != year);
|
taxRecords.RemoveAll(x => x.Date.Year != year);
|
||||||
upgradeRecords.RemoveAll(x => x.Date.Year != year);
|
upgradeRecords.RemoveAll(x => x.Date.Year != year);
|
||||||
|
odometerRecords.RemoveAll(x => x.Date.Year != year);
|
||||||
}
|
}
|
||||||
|
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 viewModel = new CostMakeUpForVehicle
|
||||||
{
|
{
|
||||||
ServiceRecordSum = serviceRecords.Sum(x => x.Cost),
|
ServiceRecordSum = serviceRecords.Sum(x => x.Cost),
|
||||||
GasRecordSum = gasRecords.Sum(x => x.Cost),
|
GasRecordSum = gasRecords.Sum(x => x.Cost),
|
||||||
CollisionRecordSum = collisionRecords.Sum(x => x.Cost),
|
CollisionRecordSum = collisionRecords.Sum(x => x.Cost),
|
||||||
TaxRecordSum = taxRecords.Sum(x => x.Cost),
|
TaxRecordSum = taxRecords.Sum(x => x.Cost),
|
||||||
UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost)
|
UpgradeRecordSum = upgradeRecords.Sum(x => x.Cost),
|
||||||
|
TotalDistance = totalDistanceTraveled,
|
||||||
|
DistanceUnit = vehicleData.UseHours ? "Per Hour" : userConfig.UseMPG ? "Per Mile" : "Per Kilometer"
|
||||||
};
|
};
|
||||||
return PartialView("_CostMakeUpReport", viewModel);
|
return PartialView("_CostMakeUpReport", viewModel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ namespace CarCareTracker.Logic
|
|||||||
public interface IVehicleLogic
|
public interface IVehicleLogic
|
||||||
{
|
{
|
||||||
int GetMaxMileage(int vehicleId);
|
int GetMaxMileage(int vehicleId);
|
||||||
|
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);
|
||||||
bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId);
|
bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId);
|
||||||
}
|
}
|
||||||
public class VehicleLogic: IVehicleLogic
|
public class VehicleLogic: IVehicleLogic
|
||||||
@@ -66,6 +68,31 @@ namespace CarCareTracker.Logic
|
|||||||
}
|
}
|
||||||
return numbersArray.Any() ? numbersArray.Max() : 0;
|
return numbersArray.Any() ? numbersArray.Max() : 0;
|
||||||
}
|
}
|
||||||
|
public int GetMaxMileage(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords)
|
||||||
|
{
|
||||||
|
var numbersArray = new List<int>();
|
||||||
|
if (serviceRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(serviceRecords.Max(x => x.Mileage));
|
||||||
|
}
|
||||||
|
if (repairRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(repairRecords.Max(x => x.Mileage));
|
||||||
|
}
|
||||||
|
if (gasRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(gasRecords.Max(x => x.Mileage));
|
||||||
|
}
|
||||||
|
if (upgradeRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(upgradeRecords.Max(x => x.Mileage));
|
||||||
|
}
|
||||||
|
if (odometerRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(odometerRecords.Max(x => x.Mileage));
|
||||||
|
}
|
||||||
|
return numbersArray.Any() ? numbersArray.Max() : 0;
|
||||||
|
}
|
||||||
public int GetMinMileage(int vehicleId)
|
public int GetMinMileage(int vehicleId)
|
||||||
{
|
{
|
||||||
var numbersArray = new List<int>();
|
var numbersArray = new List<int>();
|
||||||
@@ -96,6 +123,36 @@ namespace CarCareTracker.Logic
|
|||||||
}
|
}
|
||||||
return numbersArray.Any() ? numbersArray.Min() : 0;
|
return numbersArray.Any() ? numbersArray.Min() : 0;
|
||||||
}
|
}
|
||||||
|
public int GetMinMileage(List<ServiceRecord> serviceRecords, List<CollisionRecord> repairRecords, List<GasRecord> gasRecords, List<UpgradeRecord> upgradeRecords, List<OdometerRecord> odometerRecords)
|
||||||
|
{
|
||||||
|
var numbersArray = new List<int>();
|
||||||
|
var _serviceRecords = serviceRecords.Where(x => x.Mileage != default).ToList();
|
||||||
|
if (_serviceRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(_serviceRecords.Min(x => x.Mileage));
|
||||||
|
}
|
||||||
|
var _repairRecords = repairRecords.Where(x => x.Mileage != default).ToList();
|
||||||
|
if (_repairRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(_repairRecords.Min(x => x.Mileage));
|
||||||
|
}
|
||||||
|
var _gasRecords = gasRecords.Where(x => x.Mileage != default).ToList();
|
||||||
|
if (_gasRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(_gasRecords.Min(x => x.Mileage));
|
||||||
|
}
|
||||||
|
var _upgradeRecords = upgradeRecords.Where(x => x.Mileage != default).ToList();
|
||||||
|
if (_upgradeRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(_upgradeRecords.Min(x => x.Mileage));
|
||||||
|
}
|
||||||
|
var _odometerRecords = odometerRecords.Where(x => x.Mileage != default).ToList();
|
||||||
|
if (_odometerRecords.Any())
|
||||||
|
{
|
||||||
|
numbersArray.Add(_odometerRecords.Min(x => x.Mileage));
|
||||||
|
}
|
||||||
|
return numbersArray.Any() ? numbersArray.Min() : 0;
|
||||||
|
}
|
||||||
public bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId)
|
public bool GetVehicleHasUrgentOrPastDueReminders(int vehicleId)
|
||||||
{
|
{
|
||||||
var currentMileage = GetMaxMileage(vehicleId);
|
var currentMileage = GetMaxMileage(vehicleId);
|
||||||
|
|||||||
@@ -2,10 +2,24 @@
|
|||||||
{
|
{
|
||||||
public class CostMakeUpForVehicle
|
public class CostMakeUpForVehicle
|
||||||
{
|
{
|
||||||
|
public string DistanceUnit { get; set; } = "Per Mile";
|
||||||
|
public int TotalDistance { 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; }
|
||||||
public decimal CollisionRecordSum { get; set; }
|
public decimal CollisionRecordSum { get; set; }
|
||||||
public decimal UpgradeRecordSum { 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; } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,66 @@
|
|||||||
@model CostMakeUpForVehicle
|
@model CostMakeUpForVehicle
|
||||||
@if (Model.CollisionRecordSum + Model.ServiceRecordSum + Model.GasRecordSum + Model.TaxRecordSum + Model.UpgradeRecordSum > 0)
|
@if (Model.CollisionRecordSum + Model.ServiceRecordSum + Model.GasRecordSum + Model.TaxRecordSum + Model.UpgradeRecordSum > 0)
|
||||||
{
|
{
|
||||||
|
<div class="d-none" id="vehicleDataTableModalContentClone">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">@(translator.Translate(userLanguage, "Vehicle Cost Breakdown"))</h5>
|
||||||
|
<button type="button" class="btn-close" onclick="hideDataTable()" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead class="sticky-top">
|
||||||
|
<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, "Monthly Average")</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>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="d-flex">
|
||||||
|
<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">@Model.ServiceRecordPerMile.ToString("C2")</td>
|
||||||
|
<td class="col-3 flex-grow-1">@Model.ServiceRecordSum.ToString("C2")</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="d-flex">
|
||||||
|
<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">@Model.CollisionRecordPerMile.ToString("C2")</td>
|
||||||
|
<td class="col-3 flex-grow-1">@Model.CollisionRecordSum.ToString("C2")</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="d-flex">
|
||||||
|
<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">@Model.UpgradeRecordPerMile.ToString("C2")</td>
|
||||||
|
<td class="col-3 flex-grow-1">@Model.UpgradeRecordSum.ToString("C2")</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="d-flex">
|
||||||
|
<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">@Model.GasRecordPerMile.ToString("C2")</td>
|
||||||
|
<td class="col-3 flex-grow-1">@Model.GasRecordSum.ToString("C2")</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="d-flex">
|
||||||
|
<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">---</td>
|
||||||
|
<td class="col-3 flex-grow-1">@Model.TaxRecordSum.ToString("C2")</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="d-flex">
|
||||||
|
<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">@Model.TotalPerMile.ToString("C2")</td>
|
||||||
|
<td class="col-3 flex-grow-1">@Model.TotalCost.ToString("C2")</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<canvas id="pie-chart"></canvas>
|
<canvas id="pie-chart"></canvas>
|
||||||
<script>
|
<script>
|
||||||
renderChart();
|
renderChart();
|
||||||
@@ -36,6 +96,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
|
onClick: (e) => {
|
||||||
|
showDataTable();
|
||||||
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
legend: {
|
legend: {
|
||||||
position: "bottom",
|
position: "bottom",
|
||||||
|
|||||||
@@ -146,6 +146,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="modal fade" data-bs-focus="false" id="vehicleDataTableModal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg" role="document">
|
||||||
|
<div class="modal-content" id="vehicleDataTableModalContent">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div id="vehicleHistoryReport" class="showOnPrint"></div>
|
<div id="vehicleHistoryReport" class="showOnPrint"></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -180,6 +180,13 @@ function exportAttachments() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function showDataTable() {
|
||||||
|
$("#vehicleDataTableModalContent").html($("#vehicleDataTableModalContentClone").html());
|
||||||
|
$("#vehicleDataTableModal").modal('show');
|
||||||
|
}
|
||||||
|
function hideDataTable() {
|
||||||
|
$("#vehicleDataTableModal").modal('hide');
|
||||||
|
}
|
||||||
function showGlobalSearch() {
|
function showGlobalSearch() {
|
||||||
$('#globalSearchModal').modal('show');
|
$('#globalSearchModal').modal('show');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user