public List <Paystub> GetPaystubs(DateTime date) { var paystubs = new List <Paystub>(); var timesheets = _timesheetRepository.GetTimesheetsForLastTwoWeeks(date); var timesheetsByEmployee = timesheets.GroupBy(t => t.EmployeeId); foreach (var employeesTimesheets in timesheetsByEmployee) { var employee = _employeeRepository.Get(employeesTimesheets.First().EmployeeId); var employeeState = employee.State; var employeePayRate = employee.HourlyRate; var calculator = new OvertimeCalculatorFactory().GetCalculator(employeeState); // This was clean until I split these up into weeks. Clean this up? var firstWeekTimesheets = employeesTimesheets .Select(t => t) .Where(d => d.Date >= date.AddDays(-6) && d.Date <= date); var secondWeekTimesheets = employeesTimesheets .Select(t => t) .Where(d => d.Date >= date.AddDays(-13) && d.Date <= date.AddDays(-7)); var firstDto = calculator.CalculatePay(firstWeekTimesheets.Select(t => t), employeePayRate); var secondDto = calculator.CalculatePay(secondWeekTimesheets.Select(t => t), employeePayRate); var dto = new PayDto(firstDto.RegularHoursWorked + secondDto.RegularHoursWorked, firstDto.OvertimeHoursWorked + secondDto.OvertimeHoursWorked, firstDto.RegularPay + secondDto.RegularPay, firstDto.OvertimePay + secondDto.OvertimePay); var paystub = new Paystub(employee, date.AddDays(-13), date, dto); paystubs.Add(paystub); } return(paystubs); }
public Employee Get(int objectId) { if (_cache.ContainsKey(objectId)) { return(_cache[objectId]); } else { var entity = _repo.Get(objectId); _cache.Add(objectId, entity); return(entity); } }