示例#1
0
        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));
        }