private async Task <EmployeeModel[]> LoadEmployeesAsync(EmployeesQuery query, CancellationToken token) { var allPermissions = await this.permissionsLoader.LoadAsync(this.User); var employees = await this.employeesRegistry.SearchAsync(query, token); var tasks = employees .Where(x => allPermissions.GetPermissions(x).HasFlag(EmployeePermissionsEntry.ReadEmployeeInfo)) .Select(async x => { var employee = EmployeeModel.FromMetadata(x.Metadata); var employeePermissions = allPermissions.GetPermissions(x); if (!employeePermissions.HasFlag(EmployeePermissionsEntry.ReadEmployeePhone)) { employee.MobilePhone = null; } if (employeePermissions.HasFlag(EmployeePermissionsEntry.ReadEmployeeVacationsCounter)) { var vacationsCredit = await x.Calendar .VacationsActor .Ask <GetVacationsCredit.Response>(GetVacationsCredit.Instance, this.timeoutSettings.Timeout, token); employee.VacationDaysLeft = vacationsCredit.VacationsCredit; } if (employeePermissions.HasFlag(EmployeePermissionsEntry.ReadEmployeeDayoffsCounter)) { var workhoursCredit = await x.Calendar .WorkHoursActor .Ask <GetWorkHoursCredit.Response>(GetWorkHoursCredit.Instance, this.timeoutSettings.Timeout, token); employee.HoursCredit = workhoursCredit.WorkHoursCredit; } return(employee); }); var employeeModels = await Task.WhenAll(tasks); if ((employeeModels.Length == 0) && (query.EmployeeId != null)) { Log.Debug($"Employees search list is empty for {query.EmployeeId}. Registry returned {employees.Count} employees. User {this.User.Identity.Name}"); } this.FillPhotoUrls(employeeModels); return(employeeModels); }
private async Task <EmployeeModel[]> LoadEmployeesAsync(EmployeesQuery query, CancellationToken token) { var allPermissions = await this.permissionsLoader.LoadAsync(this.User); var employees = await this.employeesRegistry.SearchAsync(query, token); var tasks = employees .Where(x => allPermissions.GetPermissions(x).HasFlag(EmployeePermissionsEntry.ReadEmployeeInfo)) .Select(async x => { var employee = EmployeeModel.FromMetadata(x.Metadata); var employeePermissions = allPermissions.GetPermissions(x); if (!employeePermissions.HasFlag(EmployeePermissionsEntry.ReadEmployeePhone)) { employee.MobilePhone = null; } if (employeePermissions.HasFlag(EmployeePermissionsEntry.ReadEmployeeVacationsCounter)) { var vacationsCredit = await x.Calendar .VacationsActor .Ask <GetVacationsCredit.Response>(GetVacationsCredit.Instance, this.timeoutSettings.Timeout, token); employee.VacationDaysLeft = vacationsCredit.VacationsCredit; } if (employeePermissions.HasFlag(EmployeePermissionsEntry.ReadEmployeeDayoffsCounter)) { var workhoursCredit = await x.Calendar .WorkHoursActor .Ask <GetWorkHoursCredit.Response>(GetWorkHoursCredit.Instance, this.timeoutSettings.Timeout, token); employee.HoursCredit = workhoursCredit.WorkHoursCredit; } employee.PhotoUrl = this.Url.Action(nameof(EmployeePhotoController.GetImage), "EmployeePhoto", new { employeeId = employee.EmployeeId }, this.Request.GetUri().Scheme); return(employee); }); return(await Task.WhenAll(tasks)); }