Add filtering
Improve matching
This commit is contained in:
+49
-12
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user