Improved filtering implemented.
This commit is contained in:
+44
-20
@@ -8,6 +8,7 @@ using MileageTraker.Web.Utility;
|
||||
using MileageTraker.Web.ViewModels;
|
||||
using MileageTraker.Web.ViewModels.Log;
|
||||
using MileageTraker.Web.ViewModels.Vehicle;
|
||||
using MiscUtil.Collections;
|
||||
|
||||
namespace MileageTraker.Web.DAL
|
||||
{
|
||||
@@ -117,28 +118,34 @@ namespace MileageTraker.Web.DAL
|
||||
select l).FirstOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerable<int> GetValidLogYears()
|
||||
public IList<DateTime> GetValidLogMonths()
|
||||
{
|
||||
return
|
||||
from l in GetLogs()
|
||||
group l by new {year = l.Date.Year}
|
||||
into y
|
||||
orderby y.Key descending
|
||||
select y.Key.year;
|
||||
var months =
|
||||
from l in GetLogs()
|
||||
group l by new {l.Date.Year, l.Date.Month}
|
||||
into g
|
||||
//let dt = new DateTime(g.Key.Year, g.Key.Month, 1)
|
||||
select g.Key;
|
||||
|
||||
var ym =
|
||||
from m in months.ToList()
|
||||
select new DateTime(m.Year, m.Month, 1);
|
||||
|
||||
return ym.OrderByDescending(dt => dt).ToList();
|
||||
}
|
||||
|
||||
public IEnumerable<int> GetValidLogMonths(int year)
|
||||
{
|
||||
var start = new DateTime(year, 1, 1);
|
||||
var end = new DateTime(year + 1, 1, 1);
|
||||
return
|
||||
from l in GetLogs()
|
||||
where l.Date >= start && l.Date < end
|
||||
group l by new { month = l.Date.Month }
|
||||
into m
|
||||
orderby m.Key descending
|
||||
select m.Key.month;
|
||||
}
|
||||
//public IEnumerable<int> GetValidLogMonths(int year)
|
||||
//{
|
||||
// var start = new DateTime(year, 1, 1);
|
||||
// var end = new DateTime(year + 1, 1, 1);
|
||||
// return
|
||||
// from l in GetLogs()
|
||||
// where l.Date >= start && l.Date < end
|
||||
// group l by new { month = l.Date.Month }
|
||||
// into m
|
||||
// orderby m.Key descending
|
||||
// select m.Key.month;
|
||||
//}
|
||||
|
||||
public IEnumerable<LogIndexViewModel> GetLogIndexViewModels(IQueryable<Log> logs)
|
||||
{
|
||||
@@ -240,19 +247,36 @@ namespace MileageTraker.Web.DAL
|
||||
|
||||
public static IQueryable<Log> FilterLogs(IQueryable<Log> logs, LogQueryViewModel query)
|
||||
{
|
||||
// date filtering
|
||||
if (query.Year.HasValue & query.Month.HasValue)
|
||||
{
|
||||
var start = new DateTime(query.Year.Value, query.Month.Value, 1);
|
||||
var end = start.AddMonths(1);
|
||||
var monthRange = query.MonthRange.HasValue ? query.MonthRange.Value : 1;
|
||||
var end = start.AddMonths(monthRange);
|
||||
logs = logs.Where(l => l.Date >= start && l.Date < end);
|
||||
}
|
||||
|
||||
// log type
|
||||
if (query.LogType.HasValue)
|
||||
{
|
||||
// WTF The specified value is not an instance of type 'Edm.Int32'
|
||||
logs = logs.Where(query.LogType.Value.GetEqualsPredicate());
|
||||
}
|
||||
|
||||
// employee name
|
||||
if (!String.IsNullOrEmpty(query.EmployeeName))
|
||||
{
|
||||
logs = logs.Where(l =>
|
||||
l.User.FullName == query.EmployeeName
|
||||
|| l.User.Username == query.EmployeeName);
|
||||
}
|
||||
|
||||
// vehicle id
|
||||
if (!String.IsNullOrEmpty(query.VehicleId))
|
||||
{
|
||||
logs = logs.Where(l => l.VehicleId == query.VehicleId);
|
||||
}
|
||||
|
||||
return logs;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user