Added get methods to API.
This commit is contained in:
82
Helper/GasHelper.cs
Normal file
82
Helper/GasHelper.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using CarCareTracker.Models;
|
||||
|
||||
namespace CarCareTracker.Helper
|
||||
{
|
||||
public interface IGasHelper
|
||||
{
|
||||
List<GasRecordViewModel> GetGasRecordViewModels(List<GasRecord> result, bool useMPG, bool useUKMPG);
|
||||
}
|
||||
public class GasHelper : IGasHelper
|
||||
{
|
||||
public List<GasRecordViewModel> GetGasRecordViewModels(List<GasRecord> result, bool useMPG, bool useUKMPG)
|
||||
{
|
||||
var computedResults = new List<GasRecordViewModel>();
|
||||
int previousMileage = 0;
|
||||
decimal unFactoredConsumption = 0.00M;
|
||||
int unFactoredMileage = 0;
|
||||
//perform computation.
|
||||
for (int i = 0; i < result.Count; i++)
|
||||
{
|
||||
var currentObject = result[i];
|
||||
decimal convertedConsumption;
|
||||
if (useUKMPG && useMPG)
|
||||
{
|
||||
//if we're using UK MPG and the user wants imperial calculation insteace of l/100km
|
||||
//if UK MPG is selected then the gas consumption are stored in liters but need to convert into UK gallons for computation.
|
||||
convertedConsumption = currentObject.Gallons / 4.546M;
|
||||
}
|
||||
else
|
||||
{
|
||||
convertedConsumption = currentObject.Gallons;
|
||||
}
|
||||
if (i > 0)
|
||||
{
|
||||
var deltaMileage = currentObject.Mileage - previousMileage;
|
||||
var gasRecordViewModel = new GasRecordViewModel()
|
||||
{
|
||||
Id = currentObject.Id,
|
||||
VehicleId = currentObject.VehicleId,
|
||||
Date = currentObject.Date.ToShortDateString(),
|
||||
Mileage = currentObject.Mileage,
|
||||
Gallons = convertedConsumption,
|
||||
Cost = currentObject.Cost,
|
||||
DeltaMileage = deltaMileage,
|
||||
CostPerGallon = currentObject.Cost / convertedConsumption
|
||||
};
|
||||
if (currentObject.IsFillToFull)
|
||||
{
|
||||
//if user filled to full.
|
||||
gasRecordViewModel.MilesPerGallon = useMPG ? (unFactoredMileage + deltaMileage) / (unFactoredConsumption + convertedConsumption) : 100 / ((unFactoredMileage + deltaMileage) / (unFactoredConsumption + convertedConsumption));
|
||||
//reset unFactored vars
|
||||
unFactoredConsumption = 0;
|
||||
unFactoredMileage = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
unFactoredConsumption += convertedConsumption;
|
||||
unFactoredMileage += deltaMileage;
|
||||
gasRecordViewModel.MilesPerGallon = 0;
|
||||
}
|
||||
computedResults.Add(gasRecordViewModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
computedResults.Add(new GasRecordViewModel()
|
||||
{
|
||||
Id = currentObject.Id,
|
||||
VehicleId = currentObject.VehicleId,
|
||||
Date = currentObject.Date.ToShortDateString(),
|
||||
Mileage = currentObject.Mileage,
|
||||
Gallons = convertedConsumption,
|
||||
Cost = currentObject.Cost,
|
||||
DeltaMileage = 0,
|
||||
MilesPerGallon = 0,
|
||||
CostPerGallon = currentObject.Cost / convertedConsumption
|
||||
});
|
||||
}
|
||||
previousMileage = currentObject.Mileage;
|
||||
}
|
||||
return computedResults;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user