Fuel Log Match

This commit is contained in:
2015-09-22 21:11:47 -04:00
parent 27375bbb65
commit 829d84d73e
18 changed files with 748 additions and 233 deletions
+75 -4
View File
@@ -99,6 +99,12 @@ namespace MileageTraker.Web.DAL
_db.Entry(nextLog).State = EntityState.Modified;
}
// remove the reference to the log from any fuellogs
foreach (var fuelLog in log.FuelLogs)
{
fuelLog.Log = null;
}
_db.Logs.Remove(log);
_db.SaveChanges();
@@ -409,6 +415,14 @@ namespace MileageTraker.Web.DAL
return _db.Vehicles.Find(id);
}
public string GetVehicleIdByTag(string tagNumber)
{
var vehicle = GetVehicleByTag(tagNumber);
if (vehicle != null)
return vehicle.VehicleId;
return null;
}
public Vehicle GetVehicleByTag(string tagNumber)
{
var vehicle = GetVehicles().FirstOrDefault(v => v.TagNumber == tagNumber);
@@ -672,13 +686,70 @@ namespace MileageTraker.Web.DAL
log.Date.Day == fuelLog.Date.Day
);
logs = logs.Where(log => log.GasPurchased == fuelLog.GasPurchased);
//logs = logs.Where(log => log.User.FullName == fuelLog.DriverFullName);
//logs = logs.Where(log => log.EndOdometer == fuelLog.Odometer);
return logs.FirstOrDefault();
}
public IEnumerable<Log> GetPossibleMatchingLogs(FuelLog fuelLog)
{
const int dateRange = 3;
const double gasRange = 1;
const double odometerRange = 100;
var gasVehicleQuery = GetLogs();
// matching by Date, Gas Purchased (gallons), and Vehicle
var vehicle = GetVehicleByTag(fuelLog.TagNumber);
if (vehicle != null)
gasVehicleQuery = gasVehicleQuery.Where(log => log.VehicleId == vehicle.VehicleId);
var futureDate = fuelLog.Date.AddDays(dateRange);
var pastDate = fuelLog.Date.AddDays(-dateRange);
gasVehicleQuery = gasVehicleQuery.Where(log =>
log.Date.Year <= futureDate.Year &&
log.Date.Month <= futureDate.Month &&
log.Date.Day <= futureDate.Day &&
log.Date.Year >= pastDate.Year &&
log.Date.Month >= pastDate.Month &&
log.Date.Day >= pastDate.Day
);
var gasMax = fuelLog.GasPurchased + gasRange;
var gasMin = fuelLog.GasPurchased - gasRange;
gasVehicleQuery = gasVehicleQuery.Where(log => log.GasPurchased <= gasMax && log.GasPurchased >= gasMin);
var driverQuery =
GetLogs()
.Where(log => log.User.FullName.Contains(fuelLog.DriverFullName))
.Where(log => log.GasPurchased > 0)
.Where(log =>
log.Date.Year <= futureDate.Year &&
log.Date.Month <= futureDate.Month &&
log.Date.Day <= futureDate.Day &&
log.Date.Year >= pastDate.Year &&
log.Date.Month >= pastDate.Month &&
log.Date.Day >= pastDate.Day
);
var odoMax = fuelLog.Odometer + odometerRange;
var odoMin = fuelLog.Odometer - odometerRange;
var odometerQuery =
GetLogs()
.Where(log => log.EndOdometer > odoMin && log.EndOdometer < odoMax)
.Where(log => log.GasPurchased > 0)
.Where(log =>
log.Date.Year <= futureDate.Year &&
log.Date.Month <= futureDate.Month &&
log.Date.Day <= futureDate.Day &&
log.Date.Year >= pastDate.Year &&
log.Date.Month >= pastDate.Month &&
log.Date.Day >= pastDate.Day
);
return gasVehicleQuery.Union(driverQuery).Union(odometerQuery);
}
public IList<DateTime> GetValidFuelLogMonths()
{
var months =