/// <summary> /// Gets the employee payout. /// </summary> /// <param name="employee">The employee.</param> /// <param name="start">The start date and time </param> /// <param name="end">The end date and time</param> /// <param name="payoutTable">The payout table.</param> /// <returns></returns> private EmployeePayout GetEmployeePayout( CRySTALDataConnections.CRySTALDataSet.UsersRow employee, DateTime start, DateTime end, CRySTALDataConnections.CRySTALDataSet.RolePayrateDataTable payoutTable) { WorkerShiftsTableAdapter wsa = new WorkerShiftsTableAdapter(); var shifts = wsa.GetDataByEmployeeIDInTimeFrame(employee.ID, end, start); if (shifts.Count == 0) return null; EmployeePayout re = new EmployeePayout(); re.EmployeeID = employee.ID; re.EmployeeName = employee.LastName + ", " + employee.FirstName; re.Roles = new List<RolePayout>(); List<string> roles = (from p in shifts select p.Role).Distinct().ToList(); decimal payoutTotal = 0; foreach (string role in roles) { RolePayout rp = new RolePayout(); rp.HoursWorked = (decimal)(from p in shifts where (!p.IsEndTimeNull() && p.Role==role) select p.EndTime.Subtract(p.StartTime).TotalHours).Sum(); rp.Rate = (from p in payoutTable where p.Role == role select p.PayPerHour).FirstOrDefault(); rp.RoleName = role; rp.TotalPayment = rp.HoursWorked * rp.Rate; re.Roles.Add(rp); payoutTotal += rp.TotalPayment; } re.TotalPayment = payoutTotal; return re; }