/// <summary> /// Get All mapped users, combining user and teams department mapping data. /// </summary> /// <param name="workForceIntegrationId">The workforce integration to get the users for.</param> /// <param name="userMappingProvider">The user mapping provider.</param> /// <param name="teamDepartmentMappingProvider">The team department mapping provider.</param> /// <param name="telemetryClient">The telemetry client for logging.</param> /// <returns>The full list of users.</returns> internal static async Task <IEnumerable <UserDetailsModel> > GetAllMappedUserDetailsAsync(string workForceIntegrationId, IUserMappingProvider userMappingProvider, ITeamDepartmentMappingProvider teamDepartmentMappingProvider, TelemetryClient telemetryClient) { Dictionary <string, TeamToDepartmentJobMappingEntity> teamMappingEntities = new Dictionary <string, TeamToDepartmentJobMappingEntity>(); List <UserDetailsModel> kronosUsers = new List <UserDetailsModel>(); List <AllUserMappingEntity> mappedUsersResult = await userMappingProvider.GetAllMappedUserDetailsAsync().ConfigureAwait(false); foreach (var element in mappedUsersResult) { TeamToDepartmentJobMappingEntity teamMappingEntity; var key = $"{workForceIntegrationId}_{element.PartitionKey}"; if (teamMappingEntities.ContainsKey(key)) { teamMappingEntity = teamMappingEntities[key]; } else { teamMappingEntity = await teamDepartmentMappingProvider.GetTeamMappingForOrgJobPathAsync( workForceIntegrationId, element.PartitionKey).ConfigureAwait(false); if (teamMappingEntity == null) { telemetryClient.TrackTrace($"Team {element.PartitionKey} not mapped."); continue; } teamMappingEntities.Add(key, teamMappingEntity); } kronosUsers.Add(new UserDetailsModel { KronosPersonNumber = element.RowKey, ShiftUserId = element.ShiftUserAadObjectId, ShiftTeamId = teamMappingEntity.TeamId, ShiftScheduleGroupId = teamMappingEntity.TeamsScheduleGroupId, OrgJobPath = element.PartitionKey, ShiftUserDisplayName = element.ShiftUserDisplayName, KronosTimeZone = teamMappingEntity.KronosTimeZone, }); } return(kronosUsers); }