Example #1
0
        public HospitalPartnerCustomer Save(HospitalPartnerCustomer hospitalPartnerCustomer)
        {
            using (var adapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var entityToSave = _mapper.Map(hospitalPartnerCustomer);

                if (!adapter.SaveEntity(entityToSave, true, false))
                {
                    throw new PersistenceFailureException();
                }

                return(_mapper.Map(entityToSave));
            }
        }
Example #2
0
        public HospitalPartnerCustomerListModel Create(IEnumerable <EventCustomer> eventCustomers, IEnumerable <Order> orders, IEnumerable <Customer> customers, IEnumerable <OrderedPair <long, string> > packages, IEnumerable <OrderedPair <long, string> > tests,
                                                       IEnumerable <HospitalPartnerCustomer> hospitalPartnerCustomers, IEnumerable <OrderedPair <long, string> > idNamePairs, IEnumerable <Event> events, IEnumerable <ShippingDetail> shippingDetails,
                                                       IEnumerable <CustomerResultStatusViewModel> resultStatuses, ShippingOption cdShippingOption, IEnumerable <Pod> pods, IEnumerable <OrderedPair <long, string> > eventHospitalPartnerNamePairs,
                                                       IEnumerable <OrderedPair <long, string> > eventIdCorporateAccounrNamePairs, IEnumerable <PrimaryCarePhysician> primaryCarePhysicians, IEnumerable <HealthAssessmentQuestion> healthAssessmentQuestions,
                                                       IEnumerable <HealthAssessmentAnswer> healthAssessmentAnswers, IEnumerable <EventCustomerResult> eventCustomerResults, HospitalPartner hospitalPartner, IEnumerable <CustomerCallNotes> notes,
                                                       IEnumerable <EventCustomerNotification> eventCustomerNotifications, IEnumerable <EventHospitalPartner> eventHospitalPartners, IEnumerable <OrderedPair <long, string> > eventCustomerIdHospitalFacilityNamePairs,
                                                       IEnumerable <HospitalFacility> hospitalFacilities, IEnumerable <long> showScannedDocumentHospitalPartnerIds, IEnumerable <Language> languages)
        {
            var model          = new HospitalPartnerCustomerListModel();
            var customerModels = new List <HospitalPartnerCustomerViewModel>();

            eventCustomers.ToList().ForEach(ec =>
            {
                var order    = orders.Where(o => o.EventId == ec.EventId && o.CustomerId == ec.CustomerId).FirstOrDefault();
                var customer =
                    customers.Where(c => c.CustomerId == ec.CustomerId).FirstOrDefault();
                var package = order == null ? null :
                              packages.Where(p => p.FirstValue == order.Id).FirstOrDefault();

                var test = order == null ? null : 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;
                }

                ShippingDetail shippingDetail = null;

                string cdPurhased = "N/A";
                if (order != null)
                {
                    var shippingDetailIds = order.OrderDetails.SelectMany(od => od.ShippingDetailOrderDetails.Select(sdod => sdod.ShippingDetailId)).ToArray();

                    shippingDetail = shippingDetails.Where(sd => shippingDetailIds.Contains(sd.Id) && sd.ShippingOption.Id != (cdShippingOption != null ? cdShippingOption.Id : 0)).FirstOrDefault();

                    var cdShippingDetail = shippingDetails.Where(sd => shippingDetailIds.Contains(sd.Id) && sd.ShippingOption.Id == (cdShippingOption != null ? cdShippingOption.Id : 0)).FirstOrDefault();

                    var cdOrderDetail = order.OrderDetails.Where(od => od.IsCompleted && od.DetailType == OrderItemType.ProductItem).ToArray();
                    if (cdOrderDetail != null && cdOrderDetail.Count() > 0 && cdShippingDetail != null)
                    {
                        cdPurhased = "CD";
                    }
                    else if (cdOrderDetail != null && cdOrderDetail.Count() > 0 && cdShippingDetail == null)
                    {
                        cdPurhased = "Online";
                    }
                }
                var isEvaluated    = false;
                var isPdfGenerated = false;

                var evenCustomerResult = eventCustomerResults.Where(ecr => ecr.Id == ec.Id).FirstOrDefault();
                var result             = "Not Processed";
                var recommendation     = "Not Processed";
                if (evenCustomerResult != null)
                {
                    isEvaluated    = true;
                    isPdfGenerated = evenCustomerResult.IsClinicalFormGenerated && evenCustomerResult.IsResultPdfGenerated;
                    result         = evenCustomerResult.ResultSummary.HasValue ? ((ResultInterpretation)evenCustomerResult.ResultSummary.Value).GetDescription() : "Not Available";
                    recommendation = evenCustomerResult.PathwayRecommendation.HasValue ? ((PathwayRecommendation)evenCustomerResult.PathwayRecommendation.Value).GetDescription() : "Not Available";
                }

                HospitalPartnerCustomer hospitalPartnerCustomer = null;
                var customerActivities = hospitalPartnerCustomers.Where(hpc => hpc.EventId == ec.EventId && hpc.CustomerId == ec.CustomerId).ToArray();
                if (customerActivities.Count() > 0)
                {
                    customerActivities      = customerActivities.OrderBy(hpc => hpc.Id).ToArray();
                    hospitalPartnerCustomer = customerActivities.Last();
                }

                var care = "N/A";
                if (hospitalPartnerCustomer != null)
                {
                    care =
                        idNamePairs.Where(
                            cc =>
                            cc.FirstValue ==
                            hospitalPartnerCustomer.CareCoordinatorOrgRoleUserId).
                        First().SecondValue;
                }

                var resultStatus = resultStatuses != null ? resultStatuses.Where(rs => rs.EventCustomerId == ec.Id).SingleOrDefault() : null;
                IEnumerable <OrderedPair <long, string> > pairTestSummary = null;
                if (resultStatus != null && resultStatus.TestResults != null)
                {
                    pairTestSummary = resultStatus.TestResults.Select(tr => new OrderedPair <long, string>(tr.TestId, tr.TestInterpretation.HasValue ? ((ResultInterpretation)tr.TestInterpretation.Value).ToString() : ""));
                }

                var eventData = events.Where(e => e.Id == ec.EventId).FirstOrDefault();
                var eventPods =
                    pods.Where(p => eventData.PodIds.Contains(p.Id)).ToArray();

                DateTime?initialCallDate = null;

                if (evenCustomerResult != null && evenCustomerResult.ResultState == (int)TestResultStateNumber.ResultDelivered && (hospitalPartnerCustomer == null || ((HospitalPartnerCustomerStatus)hospitalPartnerCustomer.Status) == HospitalPartnerCustomerStatus.NotCalled))
                {
                    if (shippingDetail != null && shippingDetail.Status == ShipmentStatus.Shipped)
                    {
                        initialCallDate = (shippingDetail.ShipmentDate ?? DateTime.Now).AddDays(1).AddDays(hospitalPartner != null && hospitalPartner.MailTransitDays != null ? hospitalPartner.MailTransitDays.Value : 0);
                    }
                    else if (shippingDetail == null)
                    {
                        initialCallDate = (evenCustomerResult.DataRecorderMetaData.DateModified ?? evenCustomerResult.DataRecorderMetaData.DateCreated).AddDays(1);
                    }
                }

                var hospitalPartnername  = eventHospitalPartnerNamePairs.Where(ehp => ehp.FirstValue == eventData.Id).Select(ehp => ehp.SecondValue).SingleOrDefault();
                var corporateAccountName = eventIdCorporateAccounrNamePairs.Where(ecan => ecan.FirstValue == eventData.Id).Select(ecan => ecan.SecondValue).SingleOrDefault();

                var primaryCarePhysician = primaryCarePhysicians.Where(pcp => pcp.CustomerId == ec.CustomerId).SingleOrDefault();

                var customerHealthAnswers = healthAssessmentAnswers.Where(haa => haa.EventCustomerId == ec.Id).ToArray();

                var primaryCareAnswer = "No";
                var mammogramProstateScreeningAnswer = "No";
                var colonoscopyAnswer     = "No";
                var cancerAnswer          = "No";
                var weightBariatricAnswer = "No";
                if (customerHealthAnswers.Count() > 0)
                {
                    var primaryCareQuestionId = healthAssessmentQuestions.Where(haq => haq.Label == HealthAssessmentQuestionLabel.PrimaryCare.GetDescription()).Select(haq => haq.Id).SingleOrDefault();
                    if (primaryCareQuestionId > 0)
                    {
                        var healthassessmentAnswer = customerHealthAnswers.Where(cha => cha.QuestionId == primaryCareQuestionId).FirstOrDefault();
                        if (healthassessmentAnswer != null)
                        {
                            primaryCareAnswer = healthassessmentAnswer.Answer;
                        }
                    }

                    var mammogramProstateScreeningQuestionId = healthAssessmentQuestions.Where(haq => haq.Label == HealthAssessmentQuestionLabel.MammogramProstateScreening.GetDescription()).Select(haq => haq.Id).SingleOrDefault();
                    if (mammogramProstateScreeningQuestionId > 0)
                    {
                        var healthassessmentAnswer = customerHealthAnswers.Where(cha => cha.QuestionId == mammogramProstateScreeningQuestionId).SingleOrDefault();
                        if (healthassessmentAnswer != null)
                        {
                            mammogramProstateScreeningAnswer = healthassessmentAnswer.Answer;
                        }
                    }

                    var colonoscopyQuestionId = healthAssessmentQuestions.Where(haq => haq.Label == HealthAssessmentQuestionLabel.Colonoscopy.GetDescription()).Select(haq => haq.Id).SingleOrDefault();
                    if (colonoscopyQuestionId > 0)
                    {
                        var healthassessmentAnswer = customerHealthAnswers.Where(cha => cha.QuestionId == colonoscopyQuestionId).SingleOrDefault();
                        if (healthassessmentAnswer != null)
                        {
                            colonoscopyAnswer = healthassessmentAnswer.Answer;
                        }
                    }

                    var cancerQuestionId = healthAssessmentQuestions.Where(haq => haq.Label == HealthAssessmentQuestionLabel.Cancer.GetDescription()).Select(haq => haq.Id).SingleOrDefault();
                    if (cancerQuestionId > 0)
                    {
                        var healthassessmentAnswer = customerHealthAnswers.Where(cha => cha.QuestionId == cancerQuestionId).SingleOrDefault();
                        if (healthassessmentAnswer != null)
                        {
                            cancerAnswer = healthassessmentAnswer.Answer;
                        }
                    }

                    var weightBariatricQuestionId = healthAssessmentQuestions.Where(haq => haq.Label == HealthAssessmentQuestionLabel.WeightBariatric.GetDescription()).Select(haq => haq.Id).SingleOrDefault();
                    if (weightBariatricQuestionId > 0)
                    {
                        var healthassessmentAnswer = customerHealthAnswers.Where(cha => cha.QuestionId == weightBariatricQuestionId).SingleOrDefault();
                        if (healthassessmentAnswer != null)
                        {
                            weightBariatricAnswer = healthassessmentAnswer.Answer;
                        }
                    }
                }

                //var notes = _customerCallNotesRepository.GetCustomerNotes(eventData.Id, new[] { customer.CustomerId });
                var customerNotes         = notes.Where(n => n.CustomerId == customer.CustomerId && n.EventId == eventData.Id).Select(n => n).ToArray();
                string postScreeningNotes = string.Empty;

                if (!customerNotes.IsNullOrEmpty())
                {
                    //postScreeningNotes = string.Join("\\n\\n", notes.Where(n => n.NotesType == CustomerRegistrationNotesType.PostScreeningFollowUpNotes).Select(n => n.Notes).ToArray());
                    postScreeningNotes = string.Join("\\n\\n", customerNotes.Select(n => n.Notes).ToArray());
                }
                EventCustomerNotification eventCustomerNotification = null;

                if (eventCustomerNotifications != null && eventCustomerNotifications.Count() > 0)
                {
                    eventCustomerNotification = eventCustomerNotifications.FirstOrDefault(ecn => ecn.EventCustomerId == ec.Id);
                }

                var eventHospitalPartner = eventHospitalPartners.SingleOrDefault(ehp => ehp.EventId == eventData.Id);

                var showScannedDocumentUrl = false;
                var scannedDocumentUrl     = string.Empty;
                if (eventHospitalPartner != null && showScannedDocumentHospitalPartnerIds != null)
                {
                    showScannedDocumentUrl = showScannedDocumentHospitalPartnerIds.Contains(eventHospitalPartner.HospitalPartnerId);
                    if (showScannedDocumentUrl)
                    {
                        var mediaLocScannedDocs = _mediaRepository.GetScannedDocumentStorageFileLocation(eventHospitalPartner.EventId);
                        var filesScannedDocs    = Directory.GetFiles(mediaLocScannedDocs.PhysicalPath);
                        if (filesScannedDocs.Any())
                        {
                            var filename = filesScannedDocs.Where(fsd => !string.IsNullOrEmpty(fsd) && Path.GetFileName(fsd).StartsWith(customer.CustomerId.ToString())).Select(Path.GetFileName).FirstOrDefault();
                            if (!string.IsNullOrEmpty(filename))
                            {
                                scannedDocumentUrl = mediaLocScannedDocs.Url + filename;
                            }
                        }
                    }
                }


                HospitalFacility hospitalFacility = null;
                var hospitalFacilityName          = string.Empty;
                if (ec.HospitalFacilityId.HasValue)
                {
                    if (hospitalFacilities != null && hospitalFacilities.Any())
                    {
                        hospitalFacility = hospitalFacilities.FirstOrDefault(hf => hf.Id == ec.HospitalFacilityId);
                    }

                    if (eventCustomerIdHospitalFacilityNamePairs != null && eventCustomerIdHospitalFacilityNamePairs.Any())
                    {
                        hospitalFacilityName = eventCustomerIdHospitalFacilityNamePairs.Where(ehp => ehp.FirstValue == ec.Id).Select(ehp => ehp.SecondValue).FirstOrDefault();
                    }
                }

                var preferredLanguage = "N/A";
                if (customer.LanguageId.HasValue)
                {
                    var language = languages.FirstOrDefault(x => x.Id == customer.LanguageId);
                    if (language != null)
                    {
                        preferredLanguage = language.Name;
                    }
                }

                customerModels.Add(new HospitalPartnerCustomerViewModel
                {
                    CustomerName               = customer.Name,
                    Phone                      = customer.HomePhoneNumber != null ? customer.HomePhoneNumber.FormatPhoneNumber : string.Empty,
                    PhoneCell                  = customer.MobilePhoneNumber != null ? customer.MobilePhoneNumber.FormatPhoneNumber : string.Empty,
                    PhoneOffice                = customer.OfficePhoneNumber != null ? customer.OfficePhoneNumber.FormatPhoneNumber : string.Empty,
                    PhoneOfficeExtn            = customer.PhoneOfficeExtension,
                    DateofBirth                = customer.DateOfBirth,
                    Package                    = productPurchased,
                    CdPurchased                = cdPurhased,
                    EventDate                  = eventData.EventDate,
                    CustomerId                 = customer.CustomerId,
                    EventId                    = ec.EventId,
                    Gender                     = customer.Gender.ToString(),
                    Height                     = customer.Height != null && customer.Height.TotalInches > 0 ? customer.Height.TotalInches.ToString() : "N/A",
                    Weight                     = customer.Weight != null && customer.Weight.Pounds > 0 ? customer.Weight.Pounds.ToString() : "N/A",
                    Pod                        = string.Join(", ", eventPods.Select(ep => ep.Name)),
                    IsEvaluated                = isEvaluated,
                    IsPdfGenerated             = isPdfGenerated,
                    Status                     = hospitalPartnerCustomer != null ? ((HospitalPartnerCustomerStatus)hospitalPartnerCustomer.Status).GetDescription() : HospitalPartnerCustomerStatus.NotCalled.GetDescription(),
                    Outcome                    = hospitalPartnerCustomer != null ? ((HospitalPartnerCustomerOutcome)hospitalPartnerCustomer.Outcome).GetDescription() : HospitalPartnerCustomerOutcome.NotCalled.GetDescription(),
                    Care                       = care,
                    LastModified               = hospitalPartnerCustomer != null ? hospitalPartnerCustomer.DataRecorderMetaData.DateModified : null,
                    Result                     = result,
                    Recommendation             = recommendation,
                    Email                      = customer.Email != null ? customer.Email.ToString() : string.Empty,
                    Address                    = Mapper.Map <Address, AddressViewModel>(customer.Address),
                    ShippingMode               = shippingDetail != null ? "Paper" : "Online",
                    MailedStatus               = shippingDetail != null ? shippingDetail.Status.ToString() : "Online",
                    MailedOn                   = shippingDetail != null ? shippingDetail.ShipmentDate : null,
                    HospitalPartnerName        = hospitalPartnername ?? "N/A",
                    CorporateSponsor           = corporateAccountName ?? "N/A",
                    TestSummary                = pairTestSummary,
                    PrimaryCarePhysicianName   = primaryCarePhysician != null ? primaryCarePhysician.Name.FullName : "N/A",
                    Activities                 = GetHospitalPartnerCustomerActivities(customerActivities, idNamePairs),
                    PrimaryCare                = primaryCareAnswer,
                    MammogramProstateScreening = mammogramProstateScreeningAnswer,
                    Colonoscopy                = colonoscopyAnswer,
                    Cancer                     = cancerAnswer,
                    InitialCallDate            = initialCallDate,
                    WeightBariatric            = weightBariatricAnswer,
                    PostScreeningFollowUpNotes = postScreeningNotes,
                    // PreferredLanguage = string.IsNullOrEmpty(customer.PreferredLanguage) ? "N/A" : customer.PreferredLanguage,
                    PreferredLanguage   = preferredLanguage,
                    BestTimeToCall      = customer.BestTimeToCall.HasValue && customer.BestTimeToCall.Value > 0 ? ((BestTimeToCall)customer.BestTimeToCall).GetDescription() : "N/A",
                    EventCustomerId     = ec.Id,
                    HasCannedMessage    = (hospitalPartner != null && !string.IsNullOrEmpty(hospitalPartner.CannedMessage) || hospitalFacility != null && !string.IsNullOrEmpty(hospitalFacility.CannedMessage)),
                    IsCannedMessageSent = eventCustomerNotification != null,
                    Ssn = (eventHospitalPartner != null && eventHospitalPartner.CaptureSsn && !string.IsNullOrEmpty(customer.Ssn) && customer.Ssn.Length >= 9)
                                                                                           ? customer.Ssn.Substring(0, 3) + "-" + customer.Ssn.Substring(3, 2) + "-" + customer.Ssn.Substring(customer.Ssn.Length - 4) //"XXX-XX-" + customer.Ssn.Substring(customer.Ssn.Length - 4)
                                                                                           : string.Empty,                                                                                                             //"N/A"
                    HospitalFacility       = string.IsNullOrEmpty(hospitalFacilityName) ? "N/A" : hospitalFacilityName,
                    ShowScannedDocumentUrl = showScannedDocumentUrl,
                    ScannedDocumentUrl     = scannedDocumentUrl,
                    MemberId = string.IsNullOrEmpty(customer.InsuranceId) ? "N/A" : customer.InsuranceId
                });
            });

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