Exemplo n.º 1
0
        public void GetAbandonedProspectCustomerwithoutFiltersTest()
        {
            int totalRecords;
            var prospectCustomers = _prospectCustomerRepository.GetAbandonedProspectCustomer(1, 10, null, out totalRecords);

            Assert.IsNotNull(prospectCustomers);
            Assert.IsNotEmpty(prospectCustomers.ToArray());
            Assert.Greater(totalRecords, 0);
        }
Exemplo n.º 2
0
        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);
        }