Improved filtering implemented.

This commit is contained in:
2014-05-16 18:23:18 -04:00
parent b2d57a9e5f
commit fe0bc4e9ff
14 changed files with 425 additions and 133 deletions
+44 -20
View File
@@ -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;
}