public ProjectWorkload GetProjectWorkload(int projectId, DateTimeRange dateRange) { var dateOnlyRange = new DateTimeRange(dateRange.Begin.Date, dateRange.End.Date); var projectEmployees = ProjectMembershipSvc.GetEmployeesOnProject(projectId, dateOnlyRange); var membershipByEmployees = GetProjectMembershipByEmployees(dateOnlyRange, projectEmployees); var workhoursByDate = ProductionCalendarSvc.GetWorkHoursByDate(dateOnlyRange); var projectWorkload = new ProjectWorkload { ProjectId = projectId, DateFrom = dateOnlyRange.Begin.Date, DateTo = dateOnlyRange.End.Date }; var employeeWorkloads = GetEmployeesWorkloadForDateRange(projectEmployees, dateOnlyRange, WorkloadPeriod.Week, membershipByEmployees, workhoursByDate, projectId); projectWorkload.EmployeeWorkloads.AddRange(employeeWorkloads); projectWorkload.TotalHours = projectWorkload.EmployeeWorkloads.Sum(ew => ew.WorkloadRecords.Sum(wr => wr.CurrentProjectHours)); return(projectWorkload); }
private IList <Employee> GetProjectManagerSubordinates(int projectManagerId, DateTimeRange dateOnlyRange) { var projects = ProjectMembershipSvc.GetProjectsForManager(projectManagerId, dateOnlyRange); var comparer = new FuncBasedEqualityComparer <Employee>((first, second) => first.ID == second.ID, e => e.ID.GetHashCode()); var employeesSet = new HashSet <Employee>(comparer); foreach (var project in projects) { var projectEmployees = ProjectMembershipSvc.GetEmployeesOnProject(project.ID, dateOnlyRange); foreach (var employee in projectEmployees) { employeesSet.Add(employee); } } var employees = employeesSet.OrderBy(e => e.FullName).ThenBy(e => e.ID).ToList(); return(employees); }