示例#1
0
        public ActionResult CustomerExport(CustomerExportListModelFilter filter = null, int pageNumber = 1)
        {
            int totalRecords;
            var model = _eventCustomerReportingService.GetCustomersForExport(pageNumber, _pageSize, filter, out totalRecords);

            if (model == null)
            {
                model = new CustomerExportListModel();
            }
            model.Filter = filter;

            var currentAction        = ControllerContext.RouteData.Values["action"].ToString();
            var routeValueDictionary = GetRouteValueDictionaryForCustomerExport(filter);

            Func <int, string> urlFunc = pn => Url.Action(currentAction, AddRouteValueDictionary(routeValueDictionary, pn));

            model.PagingModel = new PagingModel(pageNumber, _pageSize, totalRecords, urlFunc);

            return(View(model));
        }
示例#2
0
        public CustomerExportListModel Create(IEnumerable <Customer> customers, IEnumerable <EventCustomer> eventCustomers, EventVolumeListModel eventListModel, IEnumerable <Order> orders, IEnumerable <OrderedPair <long, string> > packages,
                                              IEnumerable <OrderedPair <long, string> > tests, IEnumerable <Role> roles, IEnumerable <SourceCode> sourceCodes, IEnumerable <Call> calls, IEnumerable <Language> languages, IEnumerable <Lab> labs,
                                              IEnumerable <CorporateCustomerCustomTag> customTags, IEnumerable <PrimaryCarePhysician> primaryCarePhysicians, IEnumerable <Notes> doNotContactReasonNotes, IEnumerable <OrderedPair <long, string> > customersPreApprovedTests,
                                              IEnumerable <OrderedPair <long, string> > customersPreApprovedPackages, IEnumerable <Appointment> appointments, IEnumerable <CorporateAccount> corporateAccounts, IEnumerable <AccountAdditionalFields> additionalFields,
                                              IEnumerable <CustomerPredictedZip> customerPredictedZips, IEnumerable <CustomerEligibility> customerEligibilities, IEnumerable <ChaseOutbound> chaseOutbounds, IEnumerable <Relationship> relationships, IEnumerable <Falcon.App.Core.Medical.Domain.ActivityType> activityTypes)
        {
            var model = new CustomerExportListModel();
            var customerExportModels = new List <CustomerExportModel>();

            foreach (var customer in customers)
            {
                string signupMode;
                if (customer.AddedByRoleId.HasValue && customer.AddedByRoleId.Value != (long)Roles.Customer)
                {
                    signupMode = roles.First(r => r.Id == customer.AddedByRoleId.Value).DisplayName;
                }
                else
                {
                    signupMode = "Online";
                }

                var incomingLine        = calls.Where(c => c.CalledCustomerId == customer.CustomerId && !string.IsNullOrEmpty(c.CalledInNumber)).Select(c => c.CalledInNumber).LastOrDefault();
                var customerEligibility = customerEligibilities.FirstOrDefault(x => x.CustomerId == customer.CustomerId);
                var isEligible          = "N/A";
                var language            = "N/A";
                var lab = "N/A";
                var corporateCustomTags = "N/A";

                if (customerEligibility != null && customerEligibility.IsEligible.HasValue)
                {
                    if (customerEligibility.IsEligible.Value)
                    {
                        isEligible = EligibleStatus.Yes.ToString();
                    }
                    else
                    {
                        isEligible = EligibleStatus.No.ToString();
                    }
                }

                if (customer.LanguageId.HasValue)
                {
                    var customerLanguage = languages.FirstOrDefault(l => l.Id == customer.LanguageId.Value);
                    if (customerLanguage != null)
                    {
                        language = customerLanguage.Name;
                    }
                }

                if (customer.LabId.HasValue)
                {
                    var customerLab = labs.FirstOrDefault(l => l.Id == customer.LabId.Value);
                    if (customerLab != null)
                    {
                        lab = customerLab.Name;
                    }
                }

                if (customTags != null && customTags.Any())
                {
                    var customerCustomTags = customTags.Where(ct => ct.CustomerId == customer.CustomerId).Select(ct => ct.Tag).ToArray();

                    if (customerCustomTags.Any())
                    {
                        corporateCustomTags = string.Join(", ", customerCustomTags);
                    }
                }

                var pcp = primaryCarePhysicians.Where(p => p.CustomerId == customer.CustomerId).Select(p => p).FirstOrDefault();

                var doNotContactReason     = string.Empty;
                var doNotContactReasonNote = string.Empty;
                if (customer.DoNotContactReasonId.HasValue)
                {
                    doNotContactReason = ((DoNotContactReason)customer.DoNotContactReasonId.Value).GetDescription();
                }

                if (customer.DoNotContactReasonNotesId.HasValue)
                {
                    doNotContactReasonNote = doNotContactReasonNotes.First(x => x.Id == customer.DoNotContactReasonNotesId).Text;
                }

                var customerPreApprovedTest = "N/A";

                if (customersPreApprovedTests != null && customersPreApprovedTests.Any())
                {
                    var customerTests = customersPreApprovedTests.Where(x => x.FirstValue == customer.CustomerId);
                    if (customerTests != null && customerTests.Any())
                    {
                        var preApproveTestTemp = customerTests.Select(x => string.Format("\"{0}\"", x.SecondValue)).ToArray();

                        customerPreApprovedTest = string.Join(", ", preApproveTestTemp);
                    }
                }

                var customerPreApprovedPakages = "N/A";

                if (customersPreApprovedPackages != null && customersPreApprovedPackages.Any())
                {
                    var customerPackages = customersPreApprovedPackages.Where(x => x.FirstValue == customer.CustomerId);
                    if (customerPackages != null && customerPackages.Any())
                    {
                        var preApproveTestTemp = customerPackages.Select(x => string.Format("\"{0}\"", x.SecondValue)).ToArray();

                        customerPreApprovedPakages = string.Join(", ", preApproveTestTemp);
                    }
                }

                var customerPredictedZip = customerPredictedZips != null?customerPredictedZips.Where(x => x.CustomerId == customer.CustomerId) : null;

                var chaseOutbound = chaseOutbounds.FirstOrDefault(x => x.CustomerId == customer.CustomerId && x.IsActive);
                var relationship  = chaseOutbound != null && chaseOutbound.RelationshipId.HasValue ? relationships.FirstOrDefault(x => x.Id == chaseOutbound.RelationshipId.Value) : null;

                Falcon.App.Core.Medical.Domain.ActivityType activityType = null;
                if (customer.ActivityId.HasValue)
                {
                    activityType = activityTypes != null && activityTypes.Any() ? activityTypes.First(x => x.Id == customer.ActivityId.Value) : null;
                }

                var customerExportModel = new CustomerExportModel
                {
                    CustomerId                                                               = customer.CustomerId,
                    FirstName                                                                = customer.Name.FirstName,
                    MiddleName                                                               = customer.Name.MiddleName,
                    LastName                                                                 = customer.Name.LastName,
                    PhoneHome                                                                = customer.HomePhoneNumber != null?customer.HomePhoneNumber.ToString() : string.Empty,
                                                             Gender                          = customer.Gender.ToString(),
                                                             DateofBirth                     = customer.DateOfBirth,
                                                             Address1                        = customer.Address.StreetAddressLine1,
                                                             Address2                        = customer.Address.StreetAddressLine2,
                                                             City                            = customer.Address.City,
                                                             State                           = customer.Address.State,
                                                             Zip                             = customer.Address.ZipCode.Zip,
                                                             DateCreated                     = customer.DateCreated,
                                                             MarketingSource                 = customer.MarketingSource,
                                                             SignUpMode                      = signupMode,
                                                             Email                           = customer.Email != null?customer.Email.ToString() : string.Empty,
                                                                                      Race   = customer.Race.ToString(),
                                                                                      Height = customer.Height != null?customer.Height.TotalInches.ToString() : string.Empty,
                                                                                                   Weight = customer.Weight != null?customer.Weight.Pounds.ToString() : string.Empty,
                                                                                                                LastScreeningDate = customer.LastScreeningDate,
                                                                                                                IncomingPhoneLine = incomingLine,
                                                                                                                Tag                                                        = string.IsNullOrEmpty(customer.Tag) ? "N/A" : customer.Tag,
                                                                                                                MemberId                                                   = string.IsNullOrEmpty(customer.InsuranceId) ? "N/A" : customer.InsuranceId,
                                                                                                                IsEligible                                                 = isEligible,
                                                                                                                Language                                                   = language,
                                                                                                                Lab                                                        = lab,
                                                                                                                CustomTag                                                  = corporateCustomTags,
                                                                                                                Copay                                                      = customer.Copay,
                                                                                                                MedicarePlanName                                           = string.IsNullOrEmpty(customer.MedicareAdvantagePlanName) ? "N/A" : customer.MedicareAdvantagePlanName,
                                                                                                                Hicn                                                       = string.IsNullOrEmpty(customer.Hicn) ? "N/A" : customer.Hicn,
                                                                                                                Lpi                                                        = string.IsNullOrEmpty(customer.Lpi) ? "N/A" : customer.Lpi,
                                                                                                                Market                                                     = string.IsNullOrEmpty(customer.Market) ? "N/A" : customer.Market,
                                                                                                                Mrn                                                        = string.IsNullOrEmpty(customer.Mrn) ? "N/A" : customer.Mrn,
                                                                                                                GroupName                                                  = string.IsNullOrEmpty(customer.GroupName) ? "N/A" : customer.GroupName,
                                                                                                                DoNotContactReason                                         = doNotContactReason,
                                                                                                                DoNotContactReasonNote                                     = doNotContactReasonNote,
                                                                                                                PreApprovedTest                                            = customerPreApprovedTest,
                                                                                                                PreApprovedPackage                                         = customerPreApprovedPakages,
                                                                                                                Activity                                                   = activityType != null ? activityType.Name : "N/A",
                                                                                                                PredictedZip                                               = customerPredictedZip != null?string.Join(", ", customerPredictedZip.Select(x => x.PredictedZip)) : "N/A",
                                                                                                                                                          Mbi              = string.IsNullOrEmpty(customer.Mbi) ? "N/A" : customer.Mbi,
                                                                                                                                                          AcesId           = string.IsNullOrWhiteSpace(customer.AcesId) ? "N/A" : customer.AcesId,
                                                                                                                                                          RelationshipCode = relationship != null ? relationship.Code : string.Empty,
                                                                                                                                                          RelationshipName = relationship != null ? relationship.Description : string.Empty,
                                                                                                                                                          Product          = customer.ProductTypeId.HasValue && customer.ProductTypeId.Value > 0 ? ((ProductType)customer.ProductTypeId.Value).GetDescription() : "N/A"
                };

                if (!string.IsNullOrEmpty(customer.Tag))
                {
                    var corporateAccount = corporateAccounts.FirstOrDefault(x => x.Tag == customer.Tag);

                    if (corporateAccount != null)
                    {
                        var accountAdditionalFields = additionalFields.Where(x => x.AccountId == corporateAccount.Id);
                        customerExportModel.AdditionalFields = accountAdditionalFields.Select(x => new OrderedPair <string, string>(x.DisplayName, GetCustomerAdditionalField(customer, x.AdditionalFieldId)));
                    }
                }

                if (pcp != null)
                {
                    customerExportModel.PcpFirstName = pcp.Name.FirstName;
                    customerExportModel.PcpLastName  = pcp.Name.LastName;
                    customerExportModel.PcpNpi       = string.IsNullOrEmpty(pcp.Npi) ? "N/A" : pcp.Npi;

                    if (pcp.Address != null && !pcp.Address.IsEmpty())
                    {
                        customerExportModel.PcpAddress1 = pcp.Address.StreetAddressLine1;
                        customerExportModel.PcpAddress2 = pcp.Address.StreetAddressLine2;
                        customerExportModel.PcpCity     = pcp.Address.City;
                        customerExportModel.PcpState    = pcp.Address.State;
                        customerExportModel.PcpZip      = pcp.Address.ZipCode.Zip;
                    }
                    customerExportModel.PcpFax = pcp.Fax != null?pcp.Fax.ToString() : string.Empty;

                    customerExportModel.PcpPhone = pcp.Primary != null?pcp.Primary.ToString() : string.Empty;
                }

                if (eventCustomers != null && eventCustomers.Any())
                {
                    var eventCustomer = (from ec in eventCustomers
                                         join e in eventListModel.Collection on ec.EventId equals e.EventCode
                                         where ec.AppointmentId.HasValue && ec.CustomerId == customer.CustomerId
                                         orderby e.EventDate descending
                                         select ec).FirstOrDefault();

                    if (eventCustomer != null)
                    {
                        var order = orders.FirstOrDefault(o => o.EventId == eventCustomer.EventId && o.CustomerId == eventCustomer.CustomerId);
                        if (order != null)
                        {
                            var sourceCodeOrderDetail = order.OrderDetails.Where(od => od.SourceCodeOrderDetail != null && od.SourceCodeOrderDetail.IsActive).Select(od => od.SourceCodeOrderDetail).FirstOrDefault();

                            string  sourceCode       = string.Empty;
                            decimal sourceCodeAmount = 0;
                            if (sourceCodeOrderDetail != null)
                            {
                                var coupon = sourceCodes.FirstOrDefault(sc => sc.Id == sourceCodeOrderDetail.SourceCodeId);

                                sourceCode       = coupon.CouponCode;
                                sourceCodeAmount = sourceCodeOrderDetail.Amount;
                            }

                            var package = packages.FirstOrDefault(p => p.FirstValue == order.Id);

                            var test = tests.Where(p => p.FirstValue == order.Id).ToList();

                            var productPurchased = string.Empty;

                            if (package != null && !test.IsNullOrEmpty())
                            {
                                productPurchased = package.SecondValue + " + " + string.Join(" + ", test.Select(t => t.SecondValue).ToArray());
                            }
                            else if (!test.IsNullOrEmpty())
                            {
                                productPurchased = string.Join(" + ", test.Select(t => t.SecondValue).ToArray());
                            }
                            else if (package != null)
                            {
                                productPurchased = package.SecondValue;
                            }

                            customerExportModel.IsPaid           = order.TotalAmountPaid >= order.DiscountedTotal;
                            customerExportModel.Amount           = order.DiscountedTotal;
                            customerExportModel.Package          = productPurchased;
                            customerExportModel.ScreeningCost    = order.OrderDetails.Where(od => (od.DetailType == OrderItemType.EventPackageItem || od.DetailType == OrderItemType.EventTestItem) && od.IsCompleted).Sum(od => od.Price);
                            customerExportModel.SourceCode       = sourceCode;
                            customerExportModel.SourceCodeAmount = sourceCodeAmount;
                        }

                        var eventModel = eventListModel.Collection.FirstOrDefault(e => e.EventCode == eventCustomer.EventId);
                        if (eventModel != null)
                        {
                            customerExportModel.EventId       = eventModel.EventCode;
                            customerExportModel.EventName     = eventModel.Location;
                            customerExportModel.EventDate     = eventModel.EventDate;
                            customerExportModel.EventAddress1 = eventModel.StreetAddressLine1;
                            customerExportModel.EventAddress2 = eventModel.StreetAddressLine2;
                            customerExportModel.EventCity     = eventModel.City;
                            customerExportModel.EventState    = eventModel.State;
                            customerExportModel.EventZip      = eventModel.Zip;
                            customerExportModel.Pod           = eventModel.Pod;
                        }
                        var appointment = appointments.FirstOrDefault(a => a.Id == eventCustomer.AppointmentId.Value);
                        customerExportModel.Status = (appointment != null && appointment.CheckInTime.HasValue && appointment.CheckOutTime.HasValue && !eventCustomer.LeftWithoutScreeningReasonId.HasValue) ? "Availed" : "Not Availed";
                    }
                }
                customerExportModels.Add(customerExportModel);
            }

            model.Collection = customerExportModels;
            return(model);
        }