示例#1
0
        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);
        }
示例#2
0
 public Task <IEnumerable <TimesheetModel> > SearchAsync([FromQuery] TimesheetSearchRequest request)
 {
     return(TimesheetService.SearchAsync(request));
 }