public ViewResult Month()
{
var today = Clock.Now.Date;
var begin = today.GetStartOfMonth();
var end = today.GetEndOfMonth().AddDays(1);
var monthInquiries = repository
.Query<Inquiry>(x => x.Client)
.Where(x => x.ReferenceDate >= begin && x.ReferenceDate < end)
.OrderBy(x => x.ReferenceDate)
.ToList();
monthInquiries.RemoveAll(x => x.ReferenceDate.Value.IsWeekend());
var start = begin.IsWeekend() ?
begin.AddDays(7).GetStartOfBusinessWeek() :
begin.GetStartOfBusinessWeek();
var firstWeek = start.GetWeekNumber();
var lastWeek = end.GetWeekNumber();
return View("Month", new MonthViewModel
{
Name = today.ToString("MMMM"),
MaxInquiriesWithoutToggling = 3,
Weeks =
from week in Enumerable.Range(0, lastWeek - firstWeek + 1)
let weekStart = start.AddDays(week * 7)
select new MonthItemViewModel
{
Days = from day in Enumerable.Range(0, 5)
let date = weekStart.AddDays(day)
select new WeekItemViewModel
{
Name = date.ToString("ddd"),
Date = date,
Inquiries = monthInquiries
.Where(x => x.ReferenceDate.Value.Date == date)
.OrderBy(x => x.ReferenceDate)
.Select(x => new InquiryViewModel
{
Id = x.Id,
Name = x.Client.FullName,
Subject = x.Subject,
})
}
}
});
}