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));
        }