public ListModelBase <ProspectCustomerBasicInfoModel, ProspectCustomerListModelFilter> GetAbandonedCustomers(int pageNumber, int pageSize, ModelFilterBase filter, out int totalRecords) { var modelFilter = filter as ProspectCustomerListModelFilter; if (modelFilter.AgentOrganizationId > 0 && !modelFilter.FromDate.HasValue && !modelFilter.ToDate.HasValue) { modelFilter.FromDate = DateTime.Today.AddDays(-90); modelFilter.DateType = (int)ProspectCustomerDateTypeFilter.CreatedDate; } var prospectCustomers = _prospectCustomerRepository.GetAbandonedProspectCustomer(pageNumber, pageSize, modelFilter, out totalRecords); var model = new ProspectCustomerListModel(); if (prospectCustomers != null && prospectCustomers.Any()) { var prospectCustomerNotes = _customerCallNotesRepository.GetProspectCustomerNotes(prospectCustomers.Select(pc => pc.Id).ToArray()); var orgRoleUserIds = prospectCustomers.Where(pc => pc.ContactedBy.HasValue).Select(pc => pc.ContactedBy.Value).ToList(); if (prospectCustomerNotes != null && prospectCustomerNotes.Any()) { orgRoleUserIds.AddRange(prospectCustomerNotes.Select(pcn => pcn.DataRecorderMetaData.DataRecorderCreator.Id)); } orgRoleUserIds = orgRoleUserIds.Distinct().ToList(); var idNamePairs = _organizationRoleUserRepository.GetNameIdPairofUsers(orgRoleUserIds.ToArray()); var customerIds = prospectCustomers.Where(x => x.CustomerId.HasValue && x.CustomerId.Value > 0).Select(x => x.CustomerId.Value); var customers = new List <Customer>(); if (!customerIds.IsNullOrEmpty()) { customers = _customerRepository.GetCustomers(customerIds.ToArray()); } var customTags = _corporateCustomerCustomTagRepository.GetByCustomerIds(customerIds); var corportateAccounts = new List <CorporateAccount>(); if (!customers.IsNullOrEmpty()) { var cutomerTags = customers.Where(x => !string.IsNullOrEmpty(x.Tag) && x.Tag.Trim().Length > 1).Select(x => x.Tag); if (customTags.Any()) { corportateAccounts.AddRange(_corporateAccountRepository.GetByTags(cutomerTags.ToArray())); } } var pcBasicmodels = new ProspectCustomerBasicInfoModel[prospectCustomers.Count()]; int index = 0; foreach (var prospectCustomer in prospectCustomers) { SourceCode sourceCode = null; if (prospectCustomer.SourceCodeId.HasValue) { sourceCode = _sourceCodeRepository.GetSourceCodeById(prospectCustomer.SourceCodeId.Value); } pcBasicmodels[index] = Mapper.Map <ProspectCustomer, ProspectCustomerBasicInfoModel>(prospectCustomer); if (prospectCustomer.CustomerId.HasValue) { if (customers.Any()) { var customer = customers.First(x => x.CustomerId == prospectCustomer.CustomerId); pcBasicmodels[index].CorporateTag = string.IsNullOrEmpty(customer.Tag) ? "" : customer.Tag; pcBasicmodels[index].MemberId = string.IsNullOrEmpty(customer.InsuranceId) ? "" : customer.InsuranceId; if (corportateAccounts.Any() && !string.IsNullOrEmpty(customer.Tag)) { var corportateAccount = corportateAccounts.First(x => x.Tag == customer.Tag); pcBasicmodels[index].CorporateSponsor = corportateAccount.Name; } } var corporateCustomTags = string.Empty; if (customTags != null && customTags.Any()) { var customerCustomTags = customTags.Where(ct => ct.CustomerId == prospectCustomer.CustomerId).Select(ct => ct.Tag).ToArray(); if (customerCustomTags.Any()) { corporateCustomTags = string.Join(",", customerCustomTags); } } pcBasicmodels[index].CustomTags = corporateCustomTags; if (!string.IsNullOrEmpty(pcBasicmodels[index].CorporateTag) && string.IsNullOrEmpty(pcBasicmodels[index].CustomTags)) { pcBasicmodels[index].CustomTags = "None"; } } var notesVieModel = new List <NotesViewModel>(); var prospectNotes = _notesViewModelFactory.GetProspectCustomerNotes(prospectCustomer.Id, prospectCustomerNotes, idNamePairs); if (prospectNotes != null) { notesVieModel.AddRange(prospectNotes); } if (prospectCustomer.Tag == ProspectCustomerTag.Cancellation && prospectCustomer.CustomerId.HasValue && _settings.IsRefundQueueEnabled) { var eventCustomers = _eventCustomerRepository.GetbyCustomerId(prospectCustomer.CustomerId.Value); eventCustomers = eventCustomers.Where(ec => !ec.AppointmentId.HasValue); if (eventCustomers.Any()) { var eventCustomerId = eventCustomers.Select(ec => ec.Id).Max(); if (eventCustomerId > 0) { var orderId = _orderRepository.GetOrderIdByEventCustomerId(eventCustomerId); var refundRequests = _refundRequestRepository.GetbyOrderId(orderId, true); if (refundRequests != null && refundRequests.Any() && refundRequests.Count(rr => rr.RefundRequestType == RefundRequestType.CustomerCancellation) > 0) { var refundRequest = refundRequests.LastOrDefault(rr => rr.RefundRequestType == RefundRequestType.CustomerCancellation && rr.RefundRequestResult != null && (rr.RefundRequestResult.RequestResultType == RequestResultType.IssueRefund || rr.RefundRequestResult.RequestResultType == RequestResultType.IssueGiftCertificate)); if (refundRequest != null) { notesVieModel.Add(new NotesViewModel() { Note = refundRequest.RefundRequestResult.Notes }); } } } } } pcBasicmodels[index].Notes = notesVieModel; if (sourceCode != null) { pcBasicmodels[index].SourceCode = sourceCode.CouponCode; } if (prospectCustomer.ContactedBy.HasValue) { pcBasicmodels[index].ContactedBy = idNamePairs.Where(nip => nip.FirstValue == prospectCustomer.ContactedBy.Value).Select(nip => nip.SecondValue).SingleOrDefault(); } index++; } model.Collection = pcBasicmodels; } return(model); }
public OutboundCallQueueListModel Create(IEnumerable <CallQueueCustomer> callQueueCustomers, IEnumerable <Customer> customers, IEnumerable <ProspectCustomer> prospectCustomers, IEnumerable <CallQueueCriteria> callQueueCriterias, IEnumerable <Criteria> criterias, IEnumerable <CallQueueCustomerCall> callQueueCustomerCalls, IEnumerable <Call> calls, IEnumerable <CallCenterNotes> callCenterNoteses, IEnumerable <CustomerCallNotes> customerCallNotes, IEnumerable <OrderedPair <long, string> > idNamePair) { var model = new OutboundCallQueueListModel(); var collection = new List <OutboundCallQueueViewModel>(); callQueueCustomers.ToList().ForEach(cqc => { Customer customer = null; var prospectCustomer = new ProspectCustomer(); if (cqc.CustomerId.HasValue) { customer = customers.FirstOrDefault(c => c.CustomerId == cqc.CustomerId.Value); } if (cqc.ProspectCustomerId > 0) { prospectCustomer = prospectCustomers.First(pc => pc.Id == cqc.ProspectCustomerId); } CallQueueCriteria callQueueCriteria = null; var callReason = string.Empty; if (callQueueCriterias != null && callQueueCriterias.Any() && criterias != null && criterias.Any()) { if (cqc.CallQueueCriteriaId.HasValue && cqc.CallQueueCriteriaId.Value > 0) { callQueueCriteria = callQueueCriterias.Single(cqcs => cqcs.Id == cqc.CallQueueCriteriaId.Value); } if (callQueueCriteria != null) { var criteria = criterias.Single(c => c.Id == callQueueCriteria.CriteriaId); callReason = criteria.Name; if (callQueueCriteria.CriteriaId == (long)QueueCriteria.AllProspects) { callReason = prospectCustomer.Tag.GetDescription(); } } } var prospectNotes = _notesViewModelFactory.GetProspectCustomerNotes(cqc.ProspectCustomerId ?? 0, customerCallNotes, idNamePair); var email = string.Empty; PhoneNumber mobilePhoneNumber = null; PhoneNumber officePhoneNumber = null; if (customer != null) { email = (customer.Email != null) ? customer.Email.ToString() : string.Empty; mobilePhoneNumber = customer.OfficePhoneNumber; officePhoneNumber = customer.MobilePhoneNumber; } else { email = prospectCustomer.Email != null ? prospectCustomer.Email.ToString() : string.Empty; } var outboundModel = new OutboundCallQueueViewModel { CallQueueCustomerId = cqc.Id, ProspectCustomerId = cqc.ProspectCustomerId, CustomerId = cqc.CustomerId, FirstName = customer != null ? customer.Name.FirstName : prospectCustomer.FirstName, MiddleName = customer != null ? customer.Name.MiddleName : "", LastName = customer != null ? customer.Name.LastName : prospectCustomer.LastName, Gender = customer != null ? customer.Gender : prospectCustomer.Gender, Email = email, CallBackPhoneNumber = customer != null ? customer.HomePhoneNumber : prospectCustomer.CallBackPhoneNumber, MobilePhoneNumber = mobilePhoneNumber, OfficePhoneNumber = officePhoneNumber, DateOfBirth = customer != null ? customer.DateOfBirth : prospectCustomer.BirthDate, CreatedOn = cqc.DateCreated, CallReason = callReason, Notes = prospectNotes, ProspectCreatedOn = prospectCustomer != null && prospectCustomer.CreatedOn != DateTime.MinValue ? prospectCustomer.CreatedOn : (DateTime?)null, }; if (callQueueCustomerCalls != null && callQueueCustomerCalls.Any()) { var callIds = callQueueCustomerCalls.Where(cqcc => cqcc.CallQueueCustomerId == cqc.Id).Select(cqcc => cqcc.CallId).ToArray(); if (callIds.Any()) { var customerCalls = calls.Where(c => callIds.Contains(c.Id)).Select(c => c); var callHistoryList = new List <CallHistoryViewModel>(); foreach (var customerCall in customerCalls) { var callHistory = new CallHistoryViewModel() { CallId = customerCall.Id, DateCreated = customerCall.CallDateTime }; if (callCenterNoteses != null && callCenterNoteses.Any()) { var customerNotes = callCenterNoteses.Where(ccn => ccn.CallId == customerCall.Id).Select(ccn => ccn).ToArray(); callHistory.Notes = customerNotes.Select(cn => new NotesViewModel() { Note = cn.Notes, EnteredOn = cn.DateCreated }); } callHistoryList.Add(callHistory); } outboundModel.CallHistory = callHistoryList; } } collection.Add(outboundModel); }); model.OutboundCallQueues = collection; return(model); }