public async Task <IEnumerable <TimesheetModel> > SearchAsync(TimesheetSearchRequest request) { if (request.Periods == null) { request.Periods = 7; //Always return the current weeks timesheet } request.FromDate = DateTime.Now; request.FromDate = request.FromDate.StartOfWeek(DayOfWeek.Monday); // Build list of periods var periodList = new List <DateTime>(); var currentDate = request.FromDate; for (int i = 0; i < request.Periods; i++) { periodList.Add(currentDate); currentDate = currentDate.AddDays(1); } var criteria = _mapper.Map <TimesheetCriteria>(request); criteria.ToDate = periodList.Last(); criteria.Deleted = false; // Get all employees var employees = await DataContext.People .AsNoTracking() .Where(x => !x.Deleted) .ToListAsync(); // Build the timesheet query var timesheetQry = DataContext.Timesheets .AsNoTracking() .Query(criteria) .Where(x => !x.Deleted); var entries = await timesheetQry.ToListAsync(); var results = new List <TimesheetModel>(); foreach (var timesheetDate in periodList) { foreach (var employee in employees) { var timesheetValues = entries.Where(a => a.TimesheetDate == timesheetDate && a.PersonId == employee.Id) .ToList(); var model = new TimesheetModel { PersonId = employee.Id, TimesheetDate = timesheetDate }; var entry = timesheetValues.FirstOrDefault(); if (entry != null) { model.Id = entry.Id; model.TimesheetEmployeeHours = entry.TimesheetEmployeeHours; } results.Add(model); } } return(results); }
public Task <IEnumerable <TimesheetModel> > SearchAsync([FromQuery] TimesheetSearchRequest request) { return(TimesheetService.SearchAsync(request)); }