Add filtering

Improve matching
This commit is contained in:
2015-09-25 11:15:57 -04:00
parent 5e90c6d330
commit 46dfaba731
14 changed files with 157 additions and 86 deletions
+49 -12
View File
@@ -7,6 +7,7 @@ using MileageTraker.Web.Context;
using MileageTraker.Web.Models;
using MileageTraker.Web.Utility;
using MileageTraker.Web.ViewModels;
using MileageTraker.Web.ViewModels.FuelLog;
using MileageTraker.Web.ViewModels.Log;
using MileageTraker.Web.ViewModels.Vehicle;
@@ -658,6 +659,30 @@ namespace MileageTraker.Web.DAL
return _db.FuelLogs.Find(id);
}
public static IQueryable<FuelLog> FilterFuelLogs(IQueryable<FuelLog> fuelLogs, FuelLogQueryViewModel query)
{
const int fiscalYearStartMonth = 7;
// date filtering
if (query.FiscalYear.HasValue & query.Month.HasValue)
{
var start = new DateTime(query.FiscalYear.Value, query.Month.Value, 1);
var end = start.AddMonths(1);
fuelLogs = fuelLogs.Where(l => l.Date >= start && l.Date < end);
}
else if (query.FiscalYear.HasValue)
{
var start = new DateTime(query.FiscalYear.Value, fiscalYearStartMonth, 1);
var end = start.AddYears(1);
fuelLogs = fuelLogs.Where(l => l.Date >= start && l.Date < end);
}
if (query.Unmatched)
{
fuelLogs = fuelLogs.Where(l => l.Log == null);
}
return fuelLogs;
}
public IEnumerable<FuelLog> GetDuplicateFuelLogs(FuelLog log)
{
return
@@ -671,23 +696,35 @@ namespace MileageTraker.Web.DAL
public Log GetMatchingLog(FuelLog fuelLog)
{
var logs = GetLogs();
// add a little wiggle room for the gas - it is common to be off by a couple hundreths
const double gasRange = .01;
var gasMax = fuelLog.GasPurchased + gasRange;
var gasMin = fuelLog.GasPurchased - gasRange;
var dateGasVehicleQuery = GetLogs();
// matching by Date, Gas Purchased (gallons), and Vehicle
var vehicle = GetVehicleByTag(fuelLog.TagNumber);
if (vehicle != null)
logs = logs.Where(log => log.VehicleId == vehicle.VehicleId);
else return null;
dateGasVehicleQuery = dateGasVehicleQuery.Where(log => log.VehicleId == vehicle.VehicleId);
logs = logs.Where(log =>
log.Date.Year == fuelLog.Date.Year &&
log.Date.Month == fuelLog.Date.Month &&
log.Date.Day == fuelLog.Date.Day
);
logs = logs.Where(log => log.GasPurchased == fuelLog.GasPurchased);
return logs.FirstOrDefault();
dateGasVehicleQuery = dateGasVehicleQuery
.Where(log =>
log.Date.Year == fuelLog.Date.Year &&
log.Date.Month == fuelLog.Date.Month &&
log.Date.Day == fuelLog.Date.Day)
.Where(log => log.GasPurchased <= gasMax && log.GasPurchased >= gasMin);
var dateDriverGasQuery
= GetLogs()
.Where(log =>
log.Date.Year == fuelLog.Date.Year &&
log.Date.Month == fuelLog.Date.Month &&
log.Date.Day == fuelLog.Date.Day)
.Where(log => log.User.FullName.Contains(fuelLog.DriverFullName))
.Where(log => log.GasPurchased <= gasMax && log.GasPurchased >= gasMin);
return dateGasVehicleQuery.Union(dateDriverGasQuery).FirstOrDefault();
}
public IEnumerable<Log> GetPossibleMatchingLogs(FuelLog fuelLog)