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; }
public GetPendingActions(EmployeeMetadata approver, DependentDepartmentsPendingActions dependentDepartmentsPendingActions) { this.Approver = approver; DependentDepartmentsPendingActions = dependentDepartmentsPendingActions; }