예제 #1
0
        public ListModelBase <CallQueueReportModel, CallQueueReportModelFilter> GetCallQueueReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var callQueueAssignments = _callQueueAssignmentRepository.GetCallQueueAssignment(filter as CallQueueReportModelFilter, pageNumber, pageSize, out totalRecords);

            if (callQueueAssignments.IsNullOrEmpty())
            {
                return(null);
            }

            var callQueueIds = callQueueAssignments.Select(cqa => cqa.CallQueueId).Distinct().ToArray();

            var callQueues = _callQueueRepository.GetByIds(callQueueIds);

            var idNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(callQueueAssignments.Select(a => a.AssignedOrgRoleUserId).Distinct().ToArray());

            var totalCustomerStats = _callQueueCustomerRepository.GetTotalCallQueueCustomerStats(callQueueIds);

            var contactedCustomerStats = _callQueueCustomerRepository.GetContactedCallCustomersStats(callQueueIds);

            return(_callQueueReportListModelFactory.Create(callQueueAssignments, callQueues, idNamePairs, totalCustomerStats, contactedCustomerStats));
        }
예제 #2
0
        public ListModelBase <CallQueueSchedulingReportModel, CallQueueSchedulingReportFilter> GetHealthPlanCallQueueReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var callDetails = _callQueueCustomerCallRepository.GetHealthPlanCallQueueCallReports(filter as CallQueueSchedulingReportFilter, pageNumber, pageSize, out totalRecords);

            if (callDetails == null || !callDetails.Any())
            {
                return(null);
            }

            var customerIds = callDetails.Select(c => c.CalledCustomerId).ToArray();

            var customers = _customerRepository.GetCustomers(customerIds);

            var customerTags = _corporateCustomerCustomTagRepository.GetByCustomerIds(customerIds);

            var eventIds = callDetails.Where(x => x.EventId > 0).Select(x => x.EventId);

            var events = _eventRepository.GetEventswithPodbyIds(eventIds);

            var organisationRoleIds = callDetails.Select(c => c.CreatedByOrgRoleUserId).ToArray();

            IEnumerable <OrderedPair <long, string> > registeredbyAgentNameIdPair = null;

            if (organisationRoleIds != null && !organisationRoleIds.IsNullOrEmpty())
            {
                registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(organisationRoleIds).ToArray();
            }

            var healthPlanIds = callDetails.Select(x => x.HealthPlanId).ToArray();

            var organizations = _organizationRepository.GetOrganizations(healthPlanIds);

            var callQueue = _callQueueRepository.GetByIds(callDetails.Select(x => x.CallQueueId), isManual: false, isHealthPlan: true);

            return(_healthPlanCallQueueReportListModelFactory.Create(callDetails, customers, customerTags, registeredbyAgentNameIdPair, events, organizations, callQueue));
        }
        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));
        }
예제 #4
0
        public ListModelBase <HourlyOutreachCallReportModel, HourlyOutreachCallReportModelFilter> GetOutreachCallReport(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords)
        {
            var calls = _callCenterCallRepository.GetOutreachCallQueueCustomer(filter as OutreachCallReportModelFilter, pageNumber, pageSize, out totalRecords);

            if (calls == null || !calls.Any())
            {
                return(null);
            }

            var customerIds = calls.Select(c => c.CalledCustomerId).ToArray();

            var customerEligibilities = _customerEligibilityRepository.GetCustomerEligibilityByCustomerIdsAndYear(customerIds, DateTime.Today.Year);

            if (customerEligibilities.IsNullOrEmpty())
            {
                customerEligibilities = new List <CustomerEligibility>();
            }

            var callQueueIds = calls.Where(x => x.CallQueueId.HasValue).Select(x => x.CallQueueId.Value).ToArray();

            var callQueues = _callQueueRepository.GetByIds(callQueueIds, false, true);

            var customers = _customerRepository.GetCustomers(customerIds);

            var customerTags = _corporateCustomerCustomTagRepository.GetByCustomerIds(customerIds);

            var eventIds = calls.Where(x => x.EventId > 0).Select(x => x.EventId);

            var events = _eventRepository.GetEventswithPodbyIds(eventIds);

            var organisationRoleIds = calls.Select(c => c.CreatedByOrgRoleUserId).ToArray();

            var callIds = calls.Select(c => c.Id).ToArray();

            EventBasicInfoListModel eventBasicInfoListModel = null;
            List <EventCustomer>    eventCusomters          = null;
            List <Appointment>      appointments            = null;
            IEnumerable <OrderedPair <long, string> > registeredbyAgentNameIdPair = null;

            if (events != null)
            {
                eventBasicInfoListModel = _eventBasicInfoListHelper.EventBasicInfoListForCallQueue(events);
            }

            if (events != null && !customerIds.IsNullOrEmpty())
            {
                eventCusomters = _eventCustomerRepository.GetByCustomerIds(customerIds).Where(s => eventIds.Contains(s.EventId)).ToList();
            }

            if (!eventCusomters.IsNullOrEmpty())
            {
                var appointmentIds = eventCusomters.Where(x => x.AppointmentId.HasValue).Select(x => x.AppointmentId.Value);
                appointments = _appointmentRepository.GetByIds(appointmentIds).ToList();
            }

            if (organisationRoleIds != null && !organisationRoleIds.IsNullOrEmpty())
            {
                registeredbyAgentNameIdPair = _organizationRoleUserRepository.GetNameIdPairofUsers(organisationRoleIds).ToArray();
            }

            var dispositionNotes = _callCenterNotesRepository.GetByCallIds(callIds.ToArray());

            var orderedPairsCustomersShippingDetails = _shippingDetailRepository.GetShippingDetailsIdCustomerId(customerIds);

            var customersShippingDetails   = _shippingDetailRepository.GetShippingDetailsForCustomerIds(customerIds);
            var customerShippingAddressIds = customersShippingDetails.Select(x => x.ShippingAddress.Id).ToList();
            var customerAddress            = _addressRepository.GetAddresses(customerShippingAddressIds);

            return(_outreachCallReportListModelFactory.CreateHourlyModel(customers, customerTags, calls, eventCusomters, eventBasicInfoListModel, appointments, registeredbyAgentNameIdPair, dispositionNotes, orderedPairsCustomersShippingDetails,
                                                                         customersShippingDetails, customerAddress, callQueues, customerEligibilities));
        }
예제 #5
0
        public IEnumerable <CallCentreAgentQueueListViewModel> CallCenterAgentDashboardData(CallCentreAgentQueueFilter filter, int pageNumber, int pageSize, out int totalRecords)
        {
            var criteriaCollection = _callQueueCriteriaRepository.GetAgentAssignedCallQueueCriteria(filter);

            if (criteriaCollection.IsNullOrEmpty())
            {
                totalRecords = 0;
                return(null);
            }

            //to find distinct list of healthplanIds just group them and select first of each such group
            var healthPlanIds = criteriaCollection.Select(x => x.HealthPlanId).Distinct();

            var healthPlanNameIdPairList = _corporateAccountRepository.HealthPlanNamesCorrepondingToHealthPlanIds(healthPlanIds);

            var callQueues = _callQueueRepository.GetByIds(criteriaCollection.Select(x => x.CallQueueId).Distinct(), false, true);

            var campaignIds = criteriaCollection.Where(x => x.CampaignId.HasValue).Select(x => x.CampaignId.Value).ToList();
            var campaigns   = _campaignRepository.GetByIds(campaignIds);

            var criteriaIds = criteriaCollection.Select(x => x.Id).ToArray();

            //Eliminating those criterias for which Number of Customers are ZERO
            var criteriasToExclude = new List <long>();

            foreach (var criteria in criteriaCollection)
            {
                var count = CustomerCountForHealthPlanCriteria(criteria, callQueues, true);
                if (!(count > 0))
                {
                    criteriasToExclude.Add(criteria.Id);
                }
            }
            criteriaCollection = criteriaCollection.Where(x => !criteriasToExclude.Contains(x.Id)).Select(x => x);    //uncomment this to make this work(except fillevent)

            //Take criterias according to our paging
            pageNumber         = pageNumber <= 0 ? 1 : pageNumber;
            totalRecords       = criteriaCollection.Count();
            criteriaCollection = criteriaCollection.Skip(pageSize * (pageNumber - 1)).Take(pageSize);

            var assignments     = _healthPlanCriteriaAssignmentRepository.GetByCriteriaIds(criteriaIds);
            var teamAssignments = _healthPlanCriteriaTeamAssignmentRepository.GetByCriteriaIds(criteriaIds);

            var criteriaDirectMailDates = _healthPlanCriteriaDirectMailService.GetDirectMailDatesByCriteriaIds(criteriaCollection.Select(x => x.Id));

            //putting data into our View model to be returned
            var listModel = new List <CallCentreAgentQueueListViewModel>();

            foreach (var item in criteriaCollection)
            {
                var model = new CallCentreAgentQueueListViewModel();

                var healthPlan     = healthPlanNameIdPairList.First(x => x.FirstValue == item.HealthPlanId);
                var callQueue      = callQueues.First(x => x.Id == item.CallQueueId);
                var campaign       = item.CampaignId.HasValue ? campaigns.First(x => x.Id == item.CampaignId.Value) : null;
                var assignmentDate = assignments != null?assignments.FirstOrDefault(x => x.HealthPlanCriteriaId == item.Id && x.AssignedToOrgRoleUserId == filter.AgentOrganizationRoleUserId) : null;

                var teamAssignmentDate = teamAssignments != null?teamAssignments.FirstOrDefault(x => x.HealthPlanCriteriaId == item.Id) : null;

                var directMailDates = criteriaDirectMailDates.Where(x => x.FirstValue == item.Id).Select(x => x.SecondValue);

                model.CriteriaName = callQueue.Category == HealthPlanCallQueueCategory.FillEventsHealthPlan || callQueue.Category == HealthPlanCallQueueCategory.AppointmentConfirmation ? item.CriteriaName
                    : (callQueue.Category == HealthPlanCallQueueCategory.MailRound ? campaign.Name : healthPlan.SecondValue + " " + callQueue.Name);
                model.CriteriaId     = item.Id;
                model.HealthPlanName = healthPlan.SecondValue;
                model.HealthPlanId   = healthPlan.FirstValue;
                model.CallQueueName  = callQueue.Name;
                model.CallQueueId    = callQueue.Id;
                model.CapmaignId     = item.CampaignId;
                model.CampaignName   = campaign != null ? campaign.Name : string.Empty;
                if (assignmentDate != null)
                {
                    model.StartDate = assignmentDate.StartDate;
                    model.EndDate   = assignmentDate.EndDate;
                }
                else if (teamAssignmentDate != null)
                {
                    model.StartDate = teamAssignmentDate.StartDate;
                    model.EndDate   = teamAssignmentDate.EndDate;
                }

                model.DirectMailDates = directMailDates;

                listModel.Add(model);
            }

            return(listModel);
        }