public ListModelBase <HealthPlanCallQueueViewModel, HealthPlanCallQueueListModelFilter> GetHealthPlanCallQueueList(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords) { var assignmentFilter = filter as HealthPlanCallQueueListModelFilter ?? new HealthPlanCallQueueListModelFilter(); var healthPlanCallQueuesCriteria = _healthPlanCallQueueCriteriaRepository.GetHealthPlanCallQueueCriteria(filter as HealthPlanCallQueueListModelFilter, pageNumber, pageSize, out totalRecords); if (healthPlanCallQueuesCriteria == null && !healthPlanCallQueuesCriteria.Any()) { totalRecords = 0; return(null); } var callQueueIds = healthPlanCallQueuesCriteria.Select(cq => cq.CallQueueId).ToArray(); var healthPlanIds = healthPlanCallQueuesCriteria.Where(x => x.HealthPlanId.HasValue).Select(s => s.HealthPlanId.Value).ToArray(); IEnumerable <CorporateAccount> healthPlans = null; if (healthPlanIds != null && healthPlanIds.Any()) { healthPlans = _corporateAccountRepository.GetByIds(healthPlanIds); } IEnumerable <CallQueue> healthPlanCallQueues = null; if (callQueueIds != null && callQueueIds.Any()) { healthPlanCallQueues = _callQueueRepository.GetByIds(callQueueIds, false, true); } var assignOrgRoleIds = healthPlanCallQueuesCriteria.Select(a => a.DataRecorderMetaData.DataRecorderCreator.Id).Distinct().ToArray(); var modifiedBy = healthPlanCallQueuesCriteria.Where(x => x.DataRecorderMetaData.DataRecorderModifier != null).Select(a => a.DataRecorderMetaData.DataRecorderModifier.Id).Distinct().ToArray(); if (modifiedBy != null && modifiedBy.Any()) { assignOrgRoleIds = assignOrgRoleIds.Concat(modifiedBy).ToArray(); } var criteriaIds = healthPlanCallQueuesCriteria.Select(s => s.Id).ToArray(); IEnumerable <HealthPlanCriteriaAssignment> healthPlanCriteriaAssignment = null; IEnumerable <HealthPlanCriteriaTeamAssignment> healthPlanCriteriaTeamAssignment = null; var campaignIds = healthPlanCallQueuesCriteria.Where(s => s.CampaignId.HasValue).Select(x => x.CampaignId.Value).ToArray(); var campaigns = _campaignRepository.GetByIds(campaignIds); if (criteriaIds != null && criteriaIds.Any()) { healthPlanCriteriaAssignment = _healthPlanCriteriaAssignmentRepository.GetByCriteriaIds(criteriaIds); healthPlanCriteriaTeamAssignment = _healthPlanCriteriaTeamAssignmentRepository.GetByCriteriaIds(criteriaIds); if (healthPlanCriteriaAssignment != null && healthPlanCriteriaAssignment.Any()) { var assignAssignmentRoleUserIds = healthPlanCriteriaAssignment.Select(s => s.AssignedToOrgRoleUserId).Distinct().ToArray(); if (assignAssignmentRoleUserIds != null && assignAssignmentRoleUserIds.Any()) { assignOrgRoleIds = assignOrgRoleIds.Concat(assignAssignmentRoleUserIds).ToArray(); } var assignmentBy = healthPlanCriteriaAssignment.Select(s => s.CreatedBy).Distinct().ToArray(); if (assignmentBy.Any()) { assignOrgRoleIds = assignOrgRoleIds.Concat(assignmentBy).ToArray(); } } } IEnumerable <OrderedPair <long, string> > teamIdNamePairs = null; if (!healthPlanCriteriaTeamAssignment.IsNullOrEmpty()) { teamIdNamePairs = _callCenterTeamRepository.GetIdNamePairOfTeams(healthPlanCriteriaTeamAssignment.Select(x => x.TeamId).ToArray()); var assignmentBy = healthPlanCriteriaTeamAssignment.Select(s => s.CreatedBy).Distinct().ToArray(); if (assignmentBy.Any()) { assignOrgRoleIds = assignOrgRoleIds.Concat(assignmentBy).ToArray(); } } assignOrgRoleIds = assignOrgRoleIds.Distinct().ToArray(); var agentIdNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(assignOrgRoleIds); var criteriaCustomerCountPairs = new List <OrderedPair <long, long> >(); if (assignmentFilter.ShowAssignmentMetaData) { foreach (var criteria in healthPlanCallQueuesCriteria) { var count = _customerCallQueueCallAttemptService.CustomerCountForHealthPlanCriteria(criteria, healthPlanCallQueues); criteriaCustomerCountPairs.Add(new OrderedPair <long, long>(criteria.Id, count)); } } var criteriaDirectMailDates = _healthPlanCriteriaDirectMailService.GetDirectMailDatesByCriteriaIds(criteriaIds); return(_callQueueListModelFactory.CreateHealthPlanCallQueueList(healthPlanCallQueuesCriteria, agentIdNamePairs, healthPlanCallQueues, healthPlans, healthPlanCriteriaAssignment, campaigns, healthPlanCriteriaTeamAssignment, teamIdNamePairs, criteriaCustomerCountPairs, criteriaDirectMailDates, assignmentFilter.ShowAssignmentMetaData)); }