Beispiel #1
0
        public CallOutComeEditModel GetCallOutCome(long callId, long callQueueCustomerId, long customerId)
        {
            var callOutComeModel = new CallOutComeEditModel();
            var objCall          = _callCenterCallRepository.GetById(callId);

            if (objCall == null)
            {
                return(callOutComeModel);
            }

            callOutComeModel.CallStatusId         = objCall.Status;
            callOutComeModel.NotIntrestedReasonId = objCall.NotInterestedReasonId;

            var objNote = _callCenterNotesRepository.GetByCallId(callId);

            if (objNote != null)
            {
                callOutComeModel.Note = objNote.Notes.Replace(ProspectCustomerTag.MemberStatesIneligibleMastectomy.GetDescription(), "").Replace(":", "").Trim();
            }

            callOutComeModel.DispositionAlias = objCall.Disposition;

            var customer = _customerRepository.GetCustomer(customerId);

            if (customer.DoNotContactTypeId.HasValue && (customer.DoNotContactTypeId.Value == (long)DoNotContactType.DoNotContact || customer.DoNotContactTypeId.Value == (long)DoNotContactType.DoNotCall))
            {
                callOutComeModel.DoNotCall = true;
            }

            callOutComeModel.PhoneHome        = customer.HomePhoneNumber.FormatPhoneNumber;
            callOutComeModel.PhoneHomeConsent = customer.PhoneHomeConsentId;

            callOutComeModel.PhoneOffice        = customer.OfficePhoneNumber.FormatPhoneNumber;
            callOutComeModel.PhoneOfficeConsent = customer.PhoneOfficeConsentId;

            callOutComeModel.PhoneCell        = customer.MobilePhoneNumber.FormatPhoneNumber;
            callOutComeModel.PhoneCellConsent = customer.PhoneCellConsentId;

            if (customerId > 0 && objCall.Disposition == (ProspectCustomerTag.CallBackLater).ToString())
            {
                var prospectCustomer = _prospectCustomerRepository.GetProspectCustomerByCustomerId(customerId);
                if (prospectCustomer != null && prospectCustomer.IsQueuedForCallBack && prospectCustomer.CallBackRequestedOn.HasValue) //&& prospectCustomer.CallBackRequestedOn.Value.Date == DateTime.Today
                {
                    callOutComeModel.CallBackDateTime = prospectCustomer.CallBackRequestedDate;
                }
            }

            if (callQueueCustomerId > 0)
            {
                var callQueueCustomer = _callQueueCustomerRepository.GetById(callQueueCustomerId);

                if (callQueueCustomer.Status == CallQueueStatus.Removed)
                {
                    callOutComeModel.RemoveFromQueue = true;
                }
                callOutComeModel.CallQueueId = callQueueCustomer.CallQueueId;
            }

            return(callOutComeModel);
        }
        public ActionResult SaveCallOutComeAppointmentConfirmation(CallOutComeEditModel model)
        {
            _callOutcomeService.SaveCallOutCome(model, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);

            var viewModel = _callQueueCustomerContactService.GetByCustomerId(model.CustomerId, model.CallId, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);

            return(PartialView("GetPatientInfoAppointmentConfirmation", viewModel));
        }
        public ActionResult SaveCallOutComePreAssessment(CallOutComeEditModel model)
        {
            _callOutcomeService.SaveCallOutCome(model, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);

            var viewModel = _preAssessmentCallQueueService.GetByCustomerId(model.CustomerId, model.CallId, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);

            return(PartialView("GetPatientInfoPreAssessment", viewModel));
        }
Beispiel #4
0
        private void ModifyCustomerToSaveConsent(Customer customer, CallOutComeEditModel model)
        {
            customer.HomePhoneNumber   = PhoneNumber.Create(model.PhoneHome, PhoneNumberType.Home);
            customer.OfficePhoneNumber = PhoneNumber.Create(model.PhoneOffice, PhoneNumberType.Office);
            customer.MobilePhoneNumber = PhoneNumber.Create(model.PhoneCell, PhoneNumberType.Mobile);

            customer.PhoneHomeConsentId   = model.PhoneHomeConsent;
            customer.PhoneCellConsentId   = model.PhoneCellConsent;
            customer.PhoneOfficeConsentId = model.PhoneOfficeConsent;
        }
Beispiel #5
0
        private bool UpdateCallProspectCustomerData(CallOutComeEditModel model, DateTime?callDateTime, long orgRoleUserId, long callQueueCustomerId, bool isRemovedFromQueue)
        {
            var disposition = (ProspectCustomerTag)Enum.Parse(typeof(ProspectCustomerTag), model.DispositionAlias);
            var tag         = disposition == ProspectCustomerTag.Unspecified ? string.Empty : model.DispositionAlias;

            var callDate = callDateTime.HasValue
                ? callDateTime.Value
                : model.CallStatusId == (long)CallStatus.CallSkipped
                    ? DateTime.Now.AddDays(1)
                    : DateTime.Now.AddDays(30);

            var editmodel = new CallQueueCustomerCallDetailsEditModel
            {
                CallQueueCustomerId = callQueueCustomerId,
                Disposition         = tag,
                CallStatusId        = model.CallStatusId,

                CallbackDate            = tag == ProspectCustomerTag.CallBackLater.ToString() ? model.CallBackDateTime : null,
                IsCallSkipped           = model.CallStatusId == (long)CallStatus.CallSkipped,
                ModifiedByOrgRoleUserId = orgRoleUserId,
                Attempt         = 0,
                CallQueueStatus = (long)(isRemovedFromQueue ? CallQueueStatus.Removed : CallQueueStatus.Initial),
                CallDate        = callDate,
            };

            //bool setOtherCustomerStatus = !(disposition == ProspectCustomerTag.CancelAppointment || disposition == ProspectCustomerTag.RescheduleAppointment
            //                                || disposition == ProspectCustomerTag.CHATCompleted || disposition == ProspectCustomerTag.RequestedCHATMailed || disposition == ProspectCustomerTag.MemberDoesntHaveTimeForQuestions
            //                                || disposition == ProspectCustomerTag.MemberDoesNotFeelComfortableAnsweringQuestions || disposition == ProspectCustomerTag.FollowUpCallEscalated || disposition == ProspectCustomerTag.MemberConfirmedChange
            //                                 || disposition == ProspectCustomerTag.NotInterested);

            bool setOtherCustomerStatus = !(disposition == ProspectCustomerTag.PatientConfirmed || disposition == ProspectCustomerTag.CancelAppointment || disposition == ProspectCustomerTag.ConfirmLanguageBarrier ||
                                            disposition == ProspectCustomerTag.ConfirmedHRANotComplete);

            _callQueueCustomerRepository.UpdateCallqueueCustomerByCustomerId(editmodel, model.CustomerId, setOtherCustomerStatus);
            return(true);
        }
Beispiel #6
0
        public Customer SaveCallOutCome(CallOutComeEditModel model, long organizationRoleUserId)
        {
            Customer customer         = _customerRepository.GetCustomer(model.CustomerId);
            var      isConverted      = _eventRepository.CheckCustomerRegisteredForFutureEvent(model.CustomerId);
            var      prospectCustomer = ((IProspectCustomerRepository)_prospectCustomerRepository).GetProspectCustomerByCustomerId(model.CustomerId);

            if (prospectCustomer == null)
            {
                prospectCustomer = _prospectCustomerFactory.CreateProspectCustomerFromCustomer(customer, isConverted);
            }
            else
            {
                prospectCustomer.IsConverted = isConverted;
            }

            if (model.CallStatusId == (long)CallStatus.Attended || model.CallStatusId == (long)CallStatus.VoiceMessage || model.CallStatusId == (long)CallStatus.LeftMessageWithOther ||
                model.CallStatusId == (long)CallStatus.InvalidNumber || model.CallStatusId == (long)CallStatus.NoAnswer || model.CallStatusId == (long)CallStatus.NoEventsInArea || model.CallStatusId == (long)CallStatus.TalkedtoOtherPerson)
            {
                prospectCustomer.IsContacted   = true;
                prospectCustomer.ContactedDate = DateTime.Now;
                prospectCustomer.ContactedBy   = organizationRoleUserId;
            }
            if (!string.IsNullOrEmpty(model.DispositionAlias))
            {
                prospectCustomer.Tag           = (ProspectCustomerTag)Enum.Parse(typeof(ProspectCustomerTag), model.DispositionAlias);
                prospectCustomer.TagUpdateDate = DateTime.Now;
            }

            prospectCustomer         = UpdateProspectCustomer(prospectCustomer, model.CallBackDateTime);
            model.ProspectCustomerId = prospectCustomer.Id;
            // }

            var notes = string.IsNullOrWhiteSpace(model.Note) ? "" : model.Note;

            if ((ProspectCustomerTag)Enum.Parse(typeof(ProspectCustomerTag), model.DispositionAlias) == ProspectCustomerTag.MemberStatesIneligibleMastectomy)
            {
                notes = notes.Replace(ProspectCustomerTag.MemberStatesIneligibleMastectomy.GetDescription() + " : ", "");
                notes = !string.IsNullOrWhiteSpace(notes) ? ProspectCustomerTag.MemberStatesIneligibleMastectomy.GetDescription() + " : " + notes : ProspectCustomerTag.MemberStatesIneligibleMastectomy.GetDescription();
            }

            SaveNotes(notes, model.CallId);
            SaveRegistrationNotes(model.CustomerId, notes, organizationRoleUserId);

            var objCall = _callCenterCallRepository.GetById(model.CallId);

            var disposition = "";
            var tag         = ProspectCustomerTag.Unspecified;

            if ((model.CallStatusId == (long)CallStatus.Attended || model.CallStatusId == (long)CallStatus.LeftMessageWithOther || model.CallStatusId == (long)CallStatus.TalkedtoOtherPerson ||
                 model.CallStatusId == (long)CallStatus.NoEventsInArea) && !string.IsNullOrEmpty(model.DispositionAlias))
            {
                tag = (ProspectCustomerTag)Enum.Parse(typeof(ProspectCustomerTag), model.DispositionAlias);
                if (tag == ProspectCustomerTag.BookedAppointment || tag == ProspectCustomerTag.HomeVisitRequested || tag == ProspectCustomerTag.MobilityIssue ||
                    tag == ProspectCustomerTag.DoNotCall || tag == ProspectCustomerTag.Deceased || tag == ProspectCustomerTag.NoLongeronInsurancePlan ||
                    tag == ProspectCustomerTag.MobilityIssues_LeftMessageWithOther || tag == ProspectCustomerTag.DebilitatingDisease || tag == ProspectCustomerTag.InLongTermCareNursingHome ||
                    tag == ProspectCustomerTag.PatientConfirmed || tag == ProspectCustomerTag.CancelAppointment || tag == ProspectCustomerTag.ConfirmLanguageBarrier || tag == ProspectCustomerTag.IncorrectPhoneNumber_TalkedToOthers ||
                    tag == ProspectCustomerTag.DeclinedMobileAndTransferredToHome || tag == ProspectCustomerTag.DeclinedMobileAndHomeVisit)
                {
                    model.RemoveFromQueue = true;
                }

                disposition = model.DispositionAlias;
            }

            objCall.NotInterestedReasonId = model.NotIntrestedReasonId;

            if (model.CallQueueId > 0)
            {
                var callQueue = _callQueueRepository.GetById(model.CallQueueId);
                if (callQueue != null)
                {
                    objCall.IsContacted = false;
                    if (callQueue.Category == HealthPlanCallQueueCategory.AppointmentConfirmation)
                    {
                        objCall.IsContacted = null;
                    }
                    else
                    {
                        if (model.CallStatusId == (long)CallStatus.Attended || model.CallStatusId == (long)CallStatus.VoiceMessage || model.CallStatusId == (long)CallStatus.LeftMessageWithOther || model.CallStatusId == (long)CallStatus.InvalidNumber || model.CallStatusId == (long)CallStatus.NoAnswer || model.CallStatusId == (long)CallStatus.NoEventsInArea || model.CallStatusId == (long)CallStatus.TalkedtoOtherPerson)
                        {
                            objCall.IsContacted = true;
                        }
                    }
                }
            }

            if (model.DoNotCall || tag == ProspectCustomerTag.DoNotCall)
            {
                if (model.ProspectCustomerId > 0)
                {
                    ((IProspectCustomerRepository)_prospectCustomerRepository).UpdateDoNotCallStatus(model.ProspectCustomerId, ProspectCustomerConversionStatus.Declined);
                }

                customer = _customerService.UpdateDoNotCallStatus(customer, false, (long)DoNotContactSource.CallCenter);
            }
            else if (model.CallStatusId == (long)CallStatus.Attended && tag == ProspectCustomerTag.LanguageBarrier)
            {
                customer = _customerService.UpdateIsLanguageBarrier(customer, true);
            }
            else
            {
                if (model.ProspectCustomerId > 0)
                {
                    ((IProspectCustomerRepository)_prospectCustomerRepository).UpdateDoNotCallStatus(model.ProspectCustomerId, ProspectCustomerConversionStatus.NotConverted);
                }

                customer = _customerService.UpdateDoNotCallStatus(customer, true);
            }

            if (model.CustomerId > 0 && (model.CallStatusId == (long)CallStatus.TalkedtoOtherPerson && tag == ProspectCustomerTag.IncorrectPhoneNumber_TalkedToOthers) || (model.CallStatusId == (long)CallStatus.Attended && tag == ProspectCustomerTag.IncorrectPhoneNumber))
            {
                customer = _customerService.UpdateIsIncorrectPhoneNumber(customer, true);
            }
            else if (model.CallStatusId == (long)CallStatus.InvalidNumber)
            {
                var secondLastCall = _callCenterCallRepository.GetSecondLastCall(model.CustomerId, model.CallId);
                if (secondLastCall != null && secondLastCall.Status == (long)CallStatus.InvalidNumber && secondLastCall.InvalidNumberCount == 1)
                {
                    objCall.InvalidNumberCount = 2;
                    customer = _customerService.UpdateIsIncorrectPhoneNumber(customer, true);
                }
                else
                {
                    objCall.InvalidNumberCount = 1;
                    customer = _customerService.UpdateIsIncorrectPhoneNumber(customer, false);
                }
            }
            else
            {
                objCall.InvalidNumberCount = 0;
                customer = _customerService.UpdateIsIncorrectPhoneNumber(customer, false);
            }

            if (model.CallStatusId == (long)CallStatus.Attended && (tag == ProspectCustomerTag.DeclinedMobileAndTransferredToHome || tag == ProspectCustomerTag.MemberStatesIneligibleMastectomy))
            {
                customer.ActivityId = null;
            }
            else if (objCall.Status == (long)CallStatus.Attended && (objCall.Disposition == ProspectCustomerTag.DeclinedMobileAndTransferredToHome.ToString() || objCall.Disposition == ProspectCustomerTag.MemberStatesIneligibleMastectomy.ToString()))
            {
                customer.ActivityId = model.ActivityId > 0 ? model.ActivityId : (long?)null;
            }

            if (model.CallStatusId == (long)CallStatus.Attended && tag == ProspectCustomerTag.MemberStatesIneligibleMastectomy)
            {
                customer = _customerService.UpdateDoNotCallStatuswithReason(customer, false, ProspectCustomerTag.MemberStatesIneligibleMastectomy);
                var noteId = SaveDNCNotes(ProspectCustomerTag.MemberStatesIneligibleMastectomy.GetDescription(), organizationRoleUserId);
                customer.DoNotContactReasonNotesId = noteId;
            }
            else if (objCall.Status == (long)CallStatus.Attended && objCall.Disposition == ProspectCustomerTag.MemberStatesIneligibleMastectomy.ToString())
            {
                customer = _customerService.UpdateDoNotCallStatus(customer, true);
            }

            objCall.Status      = model.CallStatusId;
            objCall.Disposition = disposition;
            _callCenterCallRepository.Save(objCall);

            UpdateOutboundCallStatus(organizationRoleUserId, model.CallQueueCustomerId, model.CallBackDateTime, model.RemoveFromQueue);

            if (objCall.Status == (long)CallStatus.Attended)
            {
                ModifyCustomerToSaveConsent(customer, model);
            }
            _customerService.SaveCustomerOnly(customer, organizationRoleUserId);

            UpdateCallProspectCustomerData(model, model.CallBackDateTime, organizationRoleUserId, model.CallQueueCustomerId, model.RemoveFromQueue);

            return(customer);
        }
        public CallQueuePatientInfomationViewModel SaveCallOutCome([FromBody] CallOutComeEditModel model)
        {
            var customer = _callOutcomeService.SaveCallOutCome(model, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId);

            return(_callQueueCustomerContactService.PatientInfoPhoneModelForConsentUpdateCcRep(customer, model.CallId, _sessionContext.UserSession.CurrentOrganizationRole.OrganizationRoleUserId));
        }