コード例 #1
0
        private UntypedReceive GatherEmployeeInfo(
            EmployeeMetadata approver,
            DependentDepartmentsPendingActions dependentDepartmentsPendingActions)
        {
            this.organization.Tell(
                DepartmentsQuery.Create()
                .WithHead(approver.EmployeeId)
                .IncludeDirectDescendants());

            void OnMessage(object message)
            {
                switch (message)
                {
                case DepartmentsQuery.Response response when response.Departments.Count == 0:
                    this.FinishProcessing();
                    break;

                case DepartmentsQuery.Response response:
                    var ownDepartmentsEmployees = response.Departments
                                                  .Where(d => d.Department.ChiefId == approver.EmployeeId)
                                                  .SelectMany(d => d.Employees);

                    var otherDepartmentsEmployees = response.Departments
                                                    .Where(d => d.Department.ChiefId != approver.EmployeeId)
                                                    .Select(d => new
                    {
                        d.Department.ChiefId,
                        Employees = d.Employees.Where(e =>
                        {
                            if (dependentDepartmentsPendingActions == DependentDepartmentsPendingActions.All)
                            {
                                return(true);
                            }

                            if (dependentDepartmentsPendingActions == DependentDepartmentsPendingActions.HeadsOnly)
                            {
                                return(e.Metadata.EmployeeId == d.Department.ChiefId);
                            }

                            return(false);
                        })
                    })
                                                    .SelectMany(x => x.Employees);

                    var subordinates = ownDepartmentsEmployees
                                       .Union(otherDepartmentsEmployees)
                                       .GroupBy(x => x.Metadata.EmployeeId)
                                       .Select(x => x.First())
                                       .ToList();

                    if (subordinates.Count == 0)
                    {
                        this.FinishProcessing();
                    }

                    this.Become(this.GatherCalendarEvents(subordinates));

                    break;

                default:
                    this.DefaultMessageHandler(message);
                    break;
                }
            }

            return(OnMessage);
        }
 public DependentDepartmentsPendingActionsPreferenceChangedEvent(string userId, DependentDepartmentsPendingActions dependentDepartmentsPendingActions)
 {
     this.UserId = userId;
     this.DependentDepartmentsPendingActions = dependentDepartmentsPendingActions;
 }
コード例 #3
0
 public GetPendingActions(EmployeeMetadata approver, DependentDepartmentsPendingActions dependentDepartmentsPendingActions)
 {
     this.Approver = approver;
     DependentDepartmentsPendingActions = dependentDepartmentsPendingActions;
 }