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);
        }