private ProspectCustomer GetProspectCustomer(long eventCustomerId) { var eventCustomer = _eventCustomerRepository.GetById(eventCustomerId); if (eventCustomer == null) { return(null); } var prospectCustomer = _prospectCustomerRepository.GetProspectCustomerByCustomerId(eventCustomer.CustomerId); if (prospectCustomer == null) { var customer = _customerRepository.GetCustomer(eventCustomer.CustomerId); prospectCustomer = new ProspectCustomer { FirstName = customer.Name.FirstName, LastName = customer.Name.LastName, Gender = customer.Gender, Address = customer.Address, CallBackPhoneNumber = customer.HomePhoneNumber, Email = customer.Email, BirthDate = customer.DateOfBirth, MarketingSource = customer.MarketingSource, CustomerId = customer.CustomerId, Source = ProspectCustomerSource.CallCenter }; } return(prospectCustomer); }
public void GetProspectCustomerReturnsNullForNonexistentProspectId() { const long nonexistentProspectId = 0; ProspectCustomer prospectCustomer = _prospectCustomerRepository.GetProspectCustomer(nonexistentProspectId); Assert.IsNull(prospectCustomer); }
public ProspectCustomer SaveProspectCustomer(ProspectCustomer prospectCustomer) { long prospectCustomerId = prospectCustomer.Id; if (prospectCustomer.Id > 0 && prospectCustomer.CreatedOn == DateTime.MinValue) { prospectCustomer.CreatedOn = DateTime.Now; } prospectCustomer = _uniqueItemRepository.Save(prospectCustomer); // If this is a new prospect customer, track this conversion.) if (prospectCustomerId == 0) { long clickId = 0; HttpCookie clickIdCookie = Context.Request.Cookies["advertiserClick"]; if (clickIdCookie != null) { long.TryParse(clickIdCookie.Value, out clickId); } // if there's a click ID, save which click caused the conversion to a prospective customer, and their prospect ID if (clickId > 0) { IClickConversionRepository clickConversionRepository = new ClickConversionRepository(); clickConversionRepository.SaveProspectConversion(clickId, prospectCustomer.Id); } } return(prospectCustomer); }
private void CreateProspectCustomer() { var prospectCustomerRepository = IoC.Resolve <IUniqueItemRepository <ProspectCustomer> >(); var prospectCustomer = ((IProspectCustomerRepository)prospectCustomerRepository).GetProspectCustomerByCustomerId(CustomerId); var customer = CurrentCustomer; if (prospectCustomer == null) { prospectCustomer = new ProspectCustomer { FirstName = customer.Name.FirstName, LastName = customer.Name.LastName, Gender = customer.Gender, Address = customer.Address, CallBackPhoneNumber = customer.HomePhoneNumber, Email = customer.Email, BirthDate = customer.DateOfBirth, MarketingSource = customer.MarketingSource, CustomerId = CustomerId, Source = ProspectCustomerSource.CallCenter, Tag = ProspectCustomerTag.Unspecified, CreatedOn = DateTime.Now, IsConverted = false, Status = (long)ProspectCustomerConversionStatus.NotConverted, TagUpdateDate = DateTime.Now }; prospectCustomerRepository.Save(prospectCustomer); } }
public void GetProspectCustomerReturnsProspectCustomerForExistingProspectId() { const long testProspectCustomerId = 12732; ProspectCustomer prospectCustomer = _prospectCustomerRepository.GetProspectCustomer(testProspectCustomerId); Assert.IsNotNull(prospectCustomer); Assert.AreEqual("Test", prospectCustomer.FirstName); Assert.AreEqual("238382", prospectCustomer.Address.StreetAddressLine1); }
private ProspectCustomer UpdateProspectCustomer(ProspectCustomer prospectCustomer, DateTime?callDateTime) { if (callDateTime.HasValue) { prospectCustomer.CallBackRequestedDate = callDateTime.Value; prospectCustomer.CallBackRequestedOn = DateTime.Now; prospectCustomer.IsQueuedForCallBack = true; } prospectCustomer = ((IUniqueItemRepository <ProspectCustomer>)_prospectCustomerRepository).Save(prospectCustomer); return(prospectCustomer); }
public bool UpdateCustomerDetails(MedicareCustomerViewModel customerViewModel) { var customer = _customerRepository.GetCustomer(customerViewModel.Id); if (customer == null) { return(false); } _medicareFactory.UpdateCustomer(customerViewModel, customer); PrepareAddress(customer, customerViewModel); //_addressService.SaveAfterSanitizing(customer.Address); //_userRepository.SaveUser(customer); ProspectCustomer prospectCustomer = _prospectCustomerRepository.GetProspectCustomerByCustomerId(customerViewModel.Id); if (prospectCustomer == null) { return(_customerService.SaveCustomerOnly(customer, customerViewModel.UpdatedBy)); } prospectCustomer.FirstName = customerViewModel.FirstName; prospectCustomer.LastName = customerViewModel.LastName; if (customer.Gender > 0) { prospectCustomer.Gender = customer.Gender; } prospectCustomer.BirthDate = customer.DateOfBirth; prospectCustomer.Email = customer.Email; prospectCustomer.CallBackPhoneNumber = customer.HomePhoneNumber; if (customer.Address != null) { prospectCustomer.Address.StreetAddressLine1 = customer.Address.StreetAddressLine1; prospectCustomer.Address.StreetAddressLine2 = customer.Address.StreetAddressLine2; if (customer.Address.StateId > 0) { var state = _stateRepository.GetState(customer.Address.StateId); prospectCustomer.Address.State = state.Name; } if (!string.IsNullOrEmpty(customer.Address.City)) { prospectCustomer.Address.City = customer.Address.City; } prospectCustomer.Address.ZipCode = customer.Address.ZipCode; } ((IUniqueItemRepository <ProspectCustomer>)_prospectCustomerRepository).Save(prospectCustomer); return(_customerService.SaveCustomer(customer, customerViewModel.UpdatedBy)); }
private void SaveProspectCustomerNew(ProspectCustomer prospectCustomer) { if (prospectCustomer != null && !string.IsNullOrEmpty(prospectCustomer.FirstName) && !string.IsNullOrEmpty(prospectCustomer.LastName) && prospectCustomer.CallBackPhoneNumber != null && !string.IsNullOrWhiteSpace(prospectCustomer.CallBackPhoneNumber.ToString()) && prospectCustomer.CallBackPhoneNumber.ToString() != "(___)-___-____") { var isNewProspectCustomer = prospectCustomer.Id <= 0; IUniqueItemRepository <ProspectCustomer> uniqueItemRepository = new ProspectCustomerRepository(); prospectCustomer = uniqueItemRepository.Save(prospectCustomer); CurrentProspectCustomerId = prospectCustomer.Id; if (isNewProspectCustomer && ExistingCallId > 0 && CurrentProspectCustomerId > 0) { var callWizardService = new CallCenterCallWizardService(); callWizardService.BindCurrentCallToProspectCustomer(ExistingCallId, CurrentProspectCustomerId, IoC.Resolve <ISessionContext>().UserSession.UserId); } } }
private bool CheckCustomerUnableToSchedule(ProspectCustomer prospectCustomer, DateTime from, DateTime todDate, CustomerEligibility customerEligibility) { if (prospectCustomer != null && (prospectCustomer.Tag == ProspectCustomerTag.Deceased)) { return(true); } if (customerEligibility == null || !customerEligibility.IsEligible.HasValue || !customerEligibility.IsEligible.Value) { return(true); } return(prospectCustomer != null && ((prospectCustomer.TagUpdateDate.HasValue && prospectCustomer.TagUpdateDate.Value >= from && prospectCustomer.TagUpdateDate.Value <= todDate) && (prospectCustomer.Tag == ProspectCustomerTag.HomeVisitRequested || prospectCustomer.Tag == ProspectCustomerTag.MobilityIssue || prospectCustomer.Tag == ProspectCustomerTag.NoLongeronInsurancePlan))); }
private ProspectCustomer SetCallBackPhoneNumber(ProspectCustomer prospectCustomer, Customer customer) { if (customer.HomePhoneNumber != null && !string.IsNullOrEmpty(customer.HomePhoneNumber.ToString())) { prospectCustomer.CallBackPhoneNumber = customer.HomePhoneNumber; } else if (customer.MobilePhoneNumber != null && !string.IsNullOrEmpty(customer.MobilePhoneNumber.ToString())) { prospectCustomer.CallBackPhoneNumber = customer.MobilePhoneNumber; } else if (customer.OfficePhoneNumber != null && !string.IsNullOrEmpty(customer.OfficePhoneNumber.ToString())) { prospectCustomer.CallBackPhoneNumber = customer.OfficePhoneNumber; } return(prospectCustomer); }
public CallQueuePatientInfomationViewModel SetProspectCustomerInfo(ProspectCustomer domain) { var address = domain.Address != null?Mapper.Map <Address, AddressViewModel>(domain.Address) : null; var model = new CallQueuePatientInfomationViewModel { ProspectCustomerId = domain.Id, FirstName = domain.FirstName, LastName = domain.LastName, Gender = domain.Gender, DateOfBirth = domain.BirthDate, Email = domain.Email != null?domain.Email.ToString() : string.Empty, AddressViewModel = address, CallBackPhoneNumber = domain.CallBackPhoneNumber, }; return(model); }
private void SetProspectCustomerDataToControls() { var commonCode = new CommonCode(); ProspectCustomer currentProspectCustomer = null; if (CurrentProspectCustomerId > 0) { var prospectCustomerRepository = IoC.Resolve <IUniqueItemRepository <ProspectCustomer> >(); currentProspectCustomer = prospectCustomerRepository.GetById(CurrentProspectCustomerId); CurrentProspectCustomerId = currentProspectCustomer.Id; } if (currentProspectCustomer == null) { return; } txtFirstName.Text = currentProspectCustomer.FirstName; txtLastName.Text = currentProspectCustomer.LastName; txtZipCode.Text = currentProspectCustomer.Address.ZipCode.Zip; txtCallBackNo.Text = currentProspectCustomer.CallBackPhoneNumber != null ? commonCode.FormatPhoneNumber( currentProspectCustomer.CallBackPhoneNumber.ToString()) : string.Empty; }
public CallQueuePatientInfomationViewModel SetCustomerTagInfo(ProspectCustomer domain, CallQueuePatientInfomationViewModel model) { if (domain == null) { model.ContactType = CallQueueTypeOfContact.Prospect.GetDescription(); model.ProspectTag = "Annual Customers"; } else { if (domain.Tag.GetDescription() == ProspectCustomerTag.OnlineSignup.GetDescription()) { model.ContactType = CallQueueTypeOfContact.WebProspect.GetDescription(); } else { model.ContactType = CallQueueTypeOfContact.Prospect.GetDescription(); } model.ProspectTag = domain.Tag.GetDescription() == ProspectCustomerTag.Unspecified.GetDescription() ? "Annual Customers" : domain.Tag.GetDescription(); } return(model); }
public ProspectCustomer CreateProspectCustomerFromCustomer(Customer customer, bool isConverted) { var prospectCustomer = new ProspectCustomer(); prospectCustomer.IsConverted = isConverted; if (!prospectCustomer.IsConverted.Value) { prospectCustomer.ConvertedOnDate = null; prospectCustomer.Status = (long)ProspectCustomerConversionStatus.NotConverted; } prospectCustomer.CreatedOn = DateTime.Now; prospectCustomer.CustomerId = customer.CustomerId; prospectCustomer.FirstName = customer.Name.FirstName; prospectCustomer.LastName = customer.Name.LastName; prospectCustomer.Gender = customer.Gender; prospectCustomer.Address = customer.Address; prospectCustomer.BirthDate = customer.DateOfBirth; prospectCustomer.CustomerId = customer.CustomerId; prospectCustomer.PhoneNumber = customer.MobilePhoneNumber; prospectCustomer = SetCallBackPhoneNumber(prospectCustomer, customer); prospectCustomer.Email = customer.Email; prospectCustomer.Source = ProspectCustomerSource.CallCenter; prospectCustomer.Tag = ProspectCustomerTag.CallCenterSignup; prospectCustomer.MarketingSource = customer.MarketingSource; prospectCustomer.TagUpdateDate = DateTime.Now; return(prospectCustomer); }
private bool CheckCustomerRefusal(ProspectCustomer prospectCustomer, DateTime fromDate, DateTime toDateTime) { return(prospectCustomer != null && prospectCustomer.TagUpdateDate >= fromDate && prospectCustomer.TagUpdateDate <= toDateTime && (prospectCustomer.Tag == ProspectCustomerTag.RecentlySawDoc)); }
private string GetCurrentStatus(Customer customer, IEnumerable <DirectMail> directMails, EventCustomer eventCustomer, EventVolumeModel eventModel, EventVolumeModel lastScreeningEvent, ProspectCustomer prospectCustomer, DateTime fromDate, DateTime toDate, CustomerEligibility customerEligibility) { if (eventCustomer != null && eventCustomer.NoShow) { return(CurrentStatus.NoShow); } if (eventModel != null && eventModel.EventDate.Date >= DateTime.Today && (eventCustomer != null && eventCustomer.AppointmentId.HasValue)) { return(CurrentStatus.ScheduledFutureAppointment); } //if (eventModel != null && eventModel.EventDate.Date == DateTime.Today && (eventCustomer != null && eventCustomer.AppointmentId.HasValue)) //{ // return CompletionStatus.ScheduledForToday; //} if (lastScreeningEvent != null) { return(CurrentStatus.ScheduledTestingComplete); } if (eventCustomer != null && !eventCustomer.AppointmentId.HasValue) { return(CurrentStatus.ScheduledCancelled); } if (customer.IsIncorrectPhoneNumber) { return(CurrentStatus.InvalidData); } if (CheckCustomerUnableToSchedule(prospectCustomer, fromDate, toDate, customerEligibility)) { return(CurrentStatus.UnableToSchedule); } if (CheckCustomerRefusal(prospectCustomer, fromDate, toDate) || IsCustomerMarkedDonotContact(customer, fromDate, toDate)) { return(CurrentStatus.Refusal); } if (directMails != null && directMails.Count() > 4) { var customerDirectMail = directMails.OrderByDescending(dm => dm.MailDate).FirstOrDefault(); if (customerDirectMail.MailDate.AddDays(28) < DateTime.Today) { return(CurrentStatus.Exhausted); } } return(CurrentStatus.InProgress); }
private void UpdateProspectCustomer() { var prospectCustomerRepository = IoC.Resolve <IProspectCustomerRepository>(); var prospectCustomer = prospectCustomerRepository.GetProspectCustomerByCustomerId(CustomerId); if (prospectCustomer != null && RegistrationFlow != null) { RegistrationFlow.ProspectCustomerId = prospectCustomer.Id; return; } prospectCustomer = new ProspectCustomer(); ICustomerRepository customerRepository = new CustomerRepository(); var customer = customerRepository.GetCustomer(CustomerId); prospectCustomer.FirstName = customer.Name.FirstName; prospectCustomer.LastName = customer.Name.LastName; if (customer.HomePhoneNumber != null && !string.IsNullOrEmpty(customer.HomePhoneNumber.ToString())) { prospectCustomer.CallBackPhoneNumber = customer.HomePhoneNumber; } else if (customer.MobilePhoneNumber != null && !string.IsNullOrEmpty(customer.MobilePhoneNumber.ToString())) { prospectCustomer.CallBackPhoneNumber = customer.MobilePhoneNumber; } else if (customer.OfficePhoneNumber != null && !string.IsNullOrEmpty(customer.OfficePhoneNumber.ToString())) { prospectCustomer.CallBackPhoneNumber = customer.OfficePhoneNumber; } prospectCustomer.Address = new Address { City = customer.Address.City, Country = customer.Address.Country, State = customer.Address.State, StreetAddressLine1 = customer.Address.StreetAddressLine1, StreetAddressLine2 = customer.Address.StreetAddressLine2, ZipCode = new ZipCode { Zip = customer.Address.ZipCode.Zip } }; if (customer.DateOfBirth.HasValue) { prospectCustomer.BirthDate = customer.DateOfBirth.Value.Date; } if (!string.IsNullOrEmpty(customer.Email.ToString())) { prospectCustomer.Email = customer.Email; } prospectCustomer.CustomerId = CustomerId; prospectCustomer.Source = ProspectCustomerSource.CallCenter; prospectCustomer.Tag = ProspectCustomerTag.CallCenterSignup; prospectCustomer.TagUpdateDate = DateTime.Now; var eventRepository = IoC.Resolve <IEventRepository>(); prospectCustomer.IsConverted = eventRepository.CheckCustomerRegisteredForFutureEvent(CustomerId); if (!prospectCustomer.IsConverted.Value) { prospectCustomer.ConvertedOnDate = null; prospectCustomer.Status = (long)ProspectCustomerConversionStatus.NotConverted; prospectCustomer.CreatedOn = DateTime.Now; } IUniqueItemRepository <ProspectCustomer> uniqueItemRepository = new ProspectCustomerRepository(); prospectCustomer = uniqueItemRepository.Save(prospectCustomer); if (RegistrationFlow != null) { RegistrationFlow.ProspectCustomerId = prospectCustomer.Id; } }
private ProspectCustomerFollowupNotificationViewModel GetProspectCustomerFollowupNotificationModel(DateTime todayDate, int maxNumberofRecordstoFetch, int showNoOfRecords, string checkOutUrl, ProspectCustomer prospectCustomer, string message) { int totalEvents; var model = GetEvents(prospectCustomer.Address.ZipCode.Zip, maxNumberofRecordstoFetch, out totalEvents); if (totalEvents == 0) { _logger.Info(string.Format("No event found for {0} on {1} for zip {2} for Prospect Customer [Id: {3}]", message, todayDate.ToShortDateString(), prospectCustomer.Address.ZipCode.Zip, prospectCustomer.Id)); _logger.Info("\n"); return(null); } var events = model.Events.Where(e => e.AvailableSlots > 0).Select(e => e).ToArray().Take(showNoOfRecords); if (events.IsNullOrEmpty()) { _logger.Info(string.Format("Event found but no available slot for {0} on {1} for zip {2} for Prospect Customer [Id: {3}]", message, todayDate.ToShortDateString(), prospectCustomer.Address.ZipCode.Zip, prospectCustomer.Id)); _logger.Info("\n"); return(null); } checkOutUrl = checkOutUrl + "?Radius=50&ZipCode=" + prospectCustomer.Address.ZipCode.Zip; return(_emailNotificationModelsFactory.GetProspectCustomerFollowupNotificationViewModel(prospectCustomer.FirstName + " " + prospectCustomer.LastName, checkOutUrl, events)); }
private bool UpdateProspectCustomerDisposition(CallUploadLog callUploadLog, ProspectCustomer prospectCustomer, long organizationRoleUserId, long callqueueCustomerId, long callQueueId, long?callStatus, long?prospectCustomerTag, ILogger logger) { prospectCustomer.IsContacted = true; prospectCustomer.ContactedDate = callUploadLog.OutreachDateTime; prospectCustomer.ContactedBy = organizationRoleUserId; bool isRemovedFromCallQueue = false; if (prospectCustomerTag.HasValue) { prospectCustomer.Tag = ((ProspectCustomerTag)prospectCustomerTag); prospectCustomer.TagUpdateDate = callUploadLog.OutreachDateTime; } if (callStatus != null && ((CallStatus)callStatus.Value) == CallStatus.Attended) { if (prospectCustomerTag.HasValue && IsCustomerDispositionForRemove((ProspectCustomerTag)prospectCustomerTag.Value)) { _callQueueCustomerRepository.UpdateOtherCustomerAttempt(callqueueCustomerId, callUploadLog.CustomerId, 0, organizationRoleUserId, callUploadLog.OutreachDateTime.Value, true, callQueueId); if (((ProspectCustomerTag)prospectCustomerTag.Value) == ProspectCustomerTag.IncorrectPhoneNumber || ((ProspectCustomerTag)prospectCustomerTag.Value) == ProspectCustomerTag.IncorrectPhoneNumber_TalkedToOthers) { _customerService.UpdateIsIncorrectPhoneNumber(callUploadLog.CustomerId, true, organizationRoleUserId); } if (((ProspectCustomerTag)prospectCustomerTag.Value) == ProspectCustomerTag.NotEligible) { var customer = _customerRepository.GetCustomer(callUploadLog.CustomerId); const bool isEligible = false; _customerService.SaveCustomerOnly(customer, organizationRoleUserId); //always save eligibility after saving customer , because history is maintained by SaveCustomer/SaveCustomerOnly function. _customerEligibilityService.Save(customer.CustomerId, DateTime.Now.Year, isEligible: isEligible, createdBy: organizationRoleUserId, logger: logger); } prospectCustomer.CallBackRequestedDate = null; prospectCustomer.IsQueuedForCallBack = false; isRemovedFromCallQueue = true; } else if (prospectCustomerTag.HasValue && ((ProspectCustomerTag)prospectCustomerTag.Value) == ProspectCustomerTag.LanguageBarrier) { _customerService.UpdateIsLanguageBarrier(callUploadLog.CustomerId, true, organizationRoleUserId); prospectCustomer.CallBackRequestedDate = null; prospectCustomer.IsQueuedForCallBack = false; } } else if (callStatus != null && ((((CallStatus)callStatus.Value) == CallStatus.IncorrectPhoneNumber) || ((((CallStatus)callStatus.Value) == CallStatus.TalkedtoOtherPerson) && ((ProspectCustomerTag)prospectCustomerTag.Value) == ProspectCustomerTag.IncorrectPhoneNumber_TalkedToOthers))) { _customerService.UpdateIsIncorrectPhoneNumber(callUploadLog.CustomerId, true, organizationRoleUserId); _callQueueCustomerRepository.UpdateOtherCustomerAttempt(callqueueCustomerId, callUploadLog.CustomerId, 0, organizationRoleUserId, callUploadLog.OutreachDateTime.Value, true, callQueueId); prospectCustomer.CallBackRequestedDate = null; prospectCustomer.IsQueuedForCallBack = false; isRemovedFromCallQueue = true; } else if (callStatus != null && ((((CallStatus)callStatus.Value) == CallStatus.TalkedtoOtherPerson && (prospectCustomerTag.HasValue && IsCustomerDispositionForRemove((ProspectCustomerTag)prospectCustomerTag.Value))))) { _customerService.UpdateIsIncorrectPhoneNumber(callUploadLog.CustomerId, true, organizationRoleUserId); isRemovedFromCallQueue = true; } ((IUniqueItemRepository <ProspectCustomer>)_prospectCustomerRepository).Save(prospectCustomer); return(isRemovedFromCallQueue); }
private OutboundCallQueueViewModel OutboundCallQueueViewModel(CallQueueCustomer cqc, Customer customer, ProspectCustomer prospectCustomer, string email, PhoneNumber mobilePhoneNumber, PhoneNumber officePhoneNumber, Event theEvent, Host host, AddressViewModel eventLocation, string customTags) { 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, ProspectCreatedOn = prospectCustomer != null && prospectCustomer.CreatedOn != DateTime.MinValue ? prospectCustomer.CreatedOn : (DateTime?)null, EventId = theEvent != null ? theEvent.Id : (long?)null, EventDate = theEvent != null ? theEvent.EventDate : (DateTime?)null, HostName = host != null ? host.OrganizationName : string.Empty, EventLocation = eventLocation, Tag = prospectCustomer != null?prospectCustomer.Tag.GetDescription() : string.Empty, ZipCode = customer != null ? customer.Address.ZipCode.Zip : prospectCustomer.Address.ZipCode.Zip, IsDoNotCallCustomer = (prospectCustomer != null && prospectCustomer.Status == (long)ProspectCustomerConversionStatus.Declined) || (customer != null && customer.DoNotContactTypeId.HasValue && (customer.DoNotContactTypeId.Value == (long)DoNotContactType.DoNotContact || customer.DoNotContactTypeId.Value == (long)DoNotContactType.DoNotCall)), //customer.DoNotContactReasonId != null RequestedCallBackDateTime = prospectCustomer != null && prospectCustomer.IsQueuedForCallBack ? prospectCustomer.CallBackRequestedDate : (DateTime?)null, CustomCorporateTags = customTags }; return(outboundModel); }
public bool UpdateCustomerData(CallQueueCustomerEditModel model, long createdByOrgRoleUserId) { if (model.CustomerId > 0) { var customer = _customerRepository.GetCustomer(model.CustomerId); var previousIncorrectPhoneNumberStatus = customer.IsIncorrectPhoneNumber; customer.Name.FirstName = model.FirstName; customer.Name.LastName = model.LastName; var address = _addressService.SaveAfterSanitizing(Mapper.Map <AddressEditModel, Address>(model.Address)); if (customer.Address != null && customer.Address.Id > 0) { address.Id = customer.Address.Id; } customer.Address = address; string officePhoneNumber = PhoneNumber.Create(model.OfficePhoneNumber, PhoneNumberType.Office).ToString(); string mobilePhoneNumber = PhoneNumber.Create(model.MobilePhoneNumber, PhoneNumberType.Mobile).ToString(); string homePhoneNumber = PhoneNumber.Create(model.CallBackPhoneNumber, PhoneNumberType.Home).ToString(); if ((customer.OfficePhoneNumber != null && customer.OfficePhoneNumber.ToString() != officePhoneNumber) || (customer.MobilePhoneNumber != null && customer.MobilePhoneNumber.ToString() != mobilePhoneNumber) || (customer.HomePhoneNumber != null && customer.HomePhoneNumber.ToString() != homePhoneNumber)) { customer.IsIncorrectPhoneNumber = false; customer.IncorrectPhoneNumberMarkedDate = null; } var currentIncorrectPhoneNumberStatus = customer.IsIncorrectPhoneNumber; customer.OfficePhoneNumber = PhoneNumber.Create(model.OfficePhoneNumber, PhoneNumberType.Office); customer.MobilePhoneNumber = PhoneNumber.Create(model.MobilePhoneNumber, PhoneNumberType.Mobile); customer.HomePhoneNumber = PhoneNumber.Create(model.CallBackPhoneNumber, PhoneNumberType.Home); customer.Hicn = model.Hicn; customer.Mbi = model.Mbi; customer.InsuranceId = model.MemberId; //customer.IsEligible = model.EligibleStatus; customer.ActivityId = model.ActivityId > 0 ? model.ActivityId : (long?)null; customer.Email = null; if (!string.IsNullOrEmpty(model.Email)) { customer.Email = new Email(model.Email); } //else if (!string.IsNullOrEmpty(customer.Email.ToString()) && string.IsNullOrEmpty(model.Email)) //{ // customer.Email = null; //} customer.AlternateEmail = null; if (!string.IsNullOrEmpty(model.AlternateEmail)) { customer.AlternateEmail = new Email(model.AlternateEmail); } customer.DateOfBirth = model.DateOfBirth; customer.Gender = (Gender)model.Gender; customer.EnableEmail = model.EnableEmail; _customerService.SaveCustomer(customer, createdByOrgRoleUserId); if (previousIncorrectPhoneNumberStatus && !currentIncorrectPhoneNumberStatus) { _customerNotesService.SavePhoneNumberUpdatedMessage(customer.CustomerId, createdByOrgRoleUserId); } } ProspectCustomer prospectCustomer = null; if (model.ProspectCustomerId > 0) { prospectCustomer = _prospectCustomerRepository.GetProspectCustomer(model.ProspectCustomerId); } else if (model.CustomerId > 0) { prospectCustomer = _prospectCustomerRepository.GetProspectCustomerByCustomerId(model.CustomerId); } if (prospectCustomer == null) { return(true); } prospectCustomer.FirstName = model.FirstName; prospectCustomer.LastName = model.LastName; if (model.Gender > 0) { prospectCustomer.Gender = (Gender)model.Gender; } prospectCustomer.BirthDate = model.DateOfBirth; prospectCustomer.Email = string.IsNullOrEmpty(model.Email) ? null : new Email(model.Email); prospectCustomer.CallBackPhoneNumber = PhoneNumber.Create(model.CallBackPhoneNumber, PhoneNumberType.Home); if (model.Address != null) { prospectCustomer.Address.StreetAddressLine1 = model.Address.StreetAddressLine1; prospectCustomer.Address.StreetAddressLine2 = model.Address.StreetAddressLine2; if (model.Address.StateId > 0) { var state = _stateRepository.GetState(model.Address.StateId); prospectCustomer.Address.State = state.Name; } if (!string.IsNullOrEmpty(model.Address.City)) { prospectCustomer.Address.City = model.Address.City; } prospectCustomer.Address.ZipCode = new ZipCode(model.Address.ZipCode); } ((IUniqueItemRepository <ProspectCustomer>)_prospectCustomerRepository).Save(prospectCustomer); return(true); }
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); }
private CallQueueCustomer CreateCustomerCallQueueCustomerModel(CallQueueCustomer existingCallQueueCustomer, CallQueueCustomer callQueueCustomer, Customer customer, IEnumerable <Call> customerCalls, int callAttempts, Appointment futureAppointment, ProspectCustomer prospectCustomer, EventAppointmentCancellationLog eacl, bool isConfirmationCallQueue, CustomerEligibility customerEligibility, IEnumerable <EventCustomer> eventCustomers, CustomerTargeted customerTargeted) { var lastCall = (from cc in customerCalls where cc.Status != (long)CallStatus.CallSkipped && (isConfirmationCallQueue == false || cc.CallQueueId == callQueueCustomer.CallQueueId) orderby cc.DateCreated descending select cc).FirstOrDefault(); if (existingCallQueueCustomer == null) { existingCallQueueCustomer = callQueueCustomer; existingCallQueueCustomer.DateCreated = DateTime.Now; existingCallQueueCustomer.CallDate = DateTime.Now; } else { existingCallQueueCustomer.CallDate = DateTime.Now; } existingCallQueueCustomer.IsActive = true; existingCallQueueCustomer.Status = CallQueueStatus.Initial; existingCallQueueCustomer.FirstName = customer.Name.FirstName; existingCallQueueCustomer.LastName = customer.Name.LastName; existingCallQueueCustomer.MiddleName = customer.Name.MiddleName; existingCallQueueCustomer.PhoneHome = customer.HomePhoneNumber; existingCallQueueCustomer.PhoneCell = customer.MobilePhoneNumber; existingCallQueueCustomer.PhoneOffice = customer.OfficePhoneNumber; existingCallQueueCustomer.ZipId = customer.Address.ZipCode.Id; existingCallQueueCustomer.ZipCode = customer.Address.ZipCode.Zip; existingCallQueueCustomer.Tag = customer.Tag; existingCallQueueCustomer.IsEligble = customerEligibility != null ? customerEligibility.IsEligible : null; existingCallQueueCustomer.IsIncorrectPhoneNumber = customer.IsIncorrectPhoneNumber; existingCallQueueCustomer.IsLanguageBarrier = customer.IsLanguageBarrier; existingCallQueueCustomer.ActivityId = customer.ActivityId; existingCallQueueCustomer.DoNotContactTypeId = customer.DoNotContactTypeId; existingCallQueueCustomer.DoNotContactUpdateDate = customer.DoNotContactUpdateDate; existingCallQueueCustomer.AppointmentDate = futureAppointment != null ? futureAppointment.StartTime : (DateTime?)null; existingCallQueueCustomer.NoShowDate = futureAppointment == null ? (eventCustomers.Any() ? eventCustomers.OrderByDescending(x => x.NoShowDate).First().NoShowDate : null) : null; if (!isConfirmationCallQueue) { existingCallQueueCustomer.CallCount = customerCalls.Count(x => x.IsContacted.HasValue && x.IsContacted.Value); existingCallQueueCustomer.Attempts = callAttempts; existingCallQueueCustomer.CallStatus = lastCall != null ? lastCall.Status : (long?)null; existingCallQueueCustomer.Disposition = lastCall != null ? lastCall.Disposition : string.Empty; } //confirm call queue - called then registered for another event, and queue regenerated existingCallQueueCustomer.ContactedDate = lastCall != null ? lastCall.DateCreated : (DateTime?)null; existingCallQueueCustomer.CallBackRequestedDate = null; if (prospectCustomer != null && lastCall != null && lastCall.Status == (long)CallStatus.Attended && lastCall.Disposition == ProspectCustomerTag.CallBackLater.ToString()) { existingCallQueueCustomer.CallBackRequestedDate = prospectCustomer.CallBackRequestedDate; } existingCallQueueCustomer.AppointmentCancellationDate = (DateTime?)null; if (eacl != null && (lastCall == null || lastCall.DateCreated < eacl.DateCreated)) { existingCallQueueCustomer.AppointmentCancellationDate = eacl.DateCreated; } existingCallQueueCustomer.DoNotContactUpdateSource = customer.DoNotContactUpdateSource; existingCallQueueCustomer.LanguageBarrierMarkedDate = customer.LanguageBarrierMarkedDate; existingCallQueueCustomer.IncorrectPhoneNumberMarkedDate = customer.IncorrectPhoneNumberMarkedDate; existingCallQueueCustomer.LanguageId = customer.LanguageId; if (customerTargeted != null) { existingCallQueueCustomer.TargetedYear = customerTargeted.ForYear; existingCallQueueCustomer.IsTargeted = customerTargeted.IsTargated; } existingCallQueueCustomer.ProductTypeId = customer.ProductTypeId; return(existingCallQueueCustomer); }
private void SetProspectCustomer() { long?sourceCodeId = null; if (!string.IsNullOrEmpty(txtSourceCode.Text)) { ISourceCodeRepository sourceCodeRepository = new SourceCodeRepository(); try { var sourceCode = sourceCodeRepository.GetSourceCodeByCode(txtSourceCode.Text); if (sourceCode != null) { sourceCodeId = sourceCode.Id; } } catch { sourceCodeId = null; } } var commonCode = new CommonCode(); var phoneNumber = commonCode.FormatPhoneNumber(txtCallBackNo.Text); ProspectCustomer prospectCustomer = null; if (CurrentProspectCustomerId > 0) { var proecpectCustomerRepository = IoC.Resolve <IProspectCustomerRepository>(); prospectCustomer = proecpectCustomerRepository.GetProspectCustomer(CurrentProspectCustomerId); } else { prospectCustomer = new ProspectCustomer { FirstName = txtFirstName.Text, LastName = txtLastName.Text, Address = new Address { ZipCode = new ZipCode { Zip = txtZipCode.Text } }, Source = ProspectCustomerSource.CallCenter, Tag = ProspectCustomerTag.CallCenterSignup, TagUpdateDate = DateTime.Now //SourceCodeId = sourceCodeId }; } if (!string.IsNullOrEmpty(phoneNumber)) { prospectCustomer.CallBackPhoneNumber = new PhoneNumber { PhoneNumberType = PhoneNumberType.Unknown, Number = phoneNumber.Substring(3, phoneNumber.Length - 3), AreaCode = phoneNumber.Substring(0, 3) }; } if (ViewState["IncomingPhoneLine"] != null && !string.IsNullOrEmpty(ViewState["IncomingPhoneLine"].ToString())) { var incomingPhoneNumber = ViewState["IncomingPhoneLine"].ToString(); prospectCustomer.PhoneNumber = new PhoneNumber { PhoneNumberType = PhoneNumberType.Unknown, Number = incomingPhoneNumber.Substring(3, incomingPhoneNumber .Length - 3), AreaCode = incomingPhoneNumber.Substring(0, 3) }; } SaveProspectCustomerNew(prospectCustomer); }
public OutboundCallQueueListModel SystemGeneratedCallQueueCustomers(IEnumerable <CallQueueCustomer> callQueueCustomers, IEnumerable <Customer> customers, IEnumerable <ProspectCustomer> prospectCustomers, IEnumerable <CallQueueCustomerCallViewModel> callQueueCustomerCalls, IEnumerable <CallCenterNotes> callCenterNoteses, IEnumerable <Event> events, IEnumerable <Host> hosts, IEnumerable <CorporateCustomerCustomTag> corporateCustomerCustomTags) { 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); } var email = string.Empty; PhoneNumber mobilePhoneNumber = null; PhoneNumber officePhoneNumber = null; if (customer != null) { email = (customer.Email != null) ? customer.Email.ToString() : string.Empty; mobilePhoneNumber = customer.MobilePhoneNumber; officePhoneNumber = customer.OfficePhoneNumber; } else { email = prospectCustomer.Email != null ? prospectCustomer.Email.ToString() : string.Empty; } Event theEvent = null; Host host = null; AddressViewModel eventLocation = null; var customTags = string.Empty; if (corporateCustomerCustomTags != null && corporateCustomerCustomTags.Any() && cqc.CustomerId.HasValue) { var tags = corporateCustomerCustomTags.Where(x => x.CustomerId == cqc.CustomerId.Value).OrderByDescending(x => x.DataRecorderMetaData.DateCreated); if (tags != null && tags.Any()) { customTags = string.Join(",", tags.Select(x => x.Tag)); } } if (events != null && cqc.EventId.HasValue && events.Any(e => e.Id == cqc.EventId.Value)) { theEvent = events.First(e => e.Id == cqc.EventId.Value); host = hosts.Single(h => h.Id == theEvent.HostId); eventLocation = Mapper.Map <Address, AddressViewModel>(host.Address); } var outboundModel = OutboundCallQueueViewModel(cqc, customer, prospectCustomer, email, mobilePhoneNumber, officePhoneNumber, theEvent, host, eventLocation, customTags); SetHistoryViewModelList(callQueueCustomerCalls, callCenterNoteses, cqc, outboundModel); collection.Add(outboundModel); }); model.OutboundCallQueues = collection; model.IsQueueGenerated = true; return(model); }
public bool ApplyRuleEngine(CallUploadLog callUploadLog, IEnumerable <Call> calls, ProspectCustomer prospectCustomer, long organizationRoleUserId, long callqueueCustomerId, long callQueueId, out bool isRemovedFromCallQueue, ILogger logger) { isRemovedFromCallQueue = false; if (_callQueueCustomerLockRepository.CheckCustomerLockByCustomerId(callUploadLog.CustomerId)) { return(false); } long?callStatus = GetCallStatus(callUploadLog.Outcome); long?prospectCustomerTag = GetProspectCustomerTag(callUploadLog.Disposition); if (calls.IsNullOrEmpty()) { isRemovedFromCallQueue = UpdateProspectCustomerDisposition(callUploadLog, prospectCustomer, organizationRoleUserId, callqueueCustomerId, callQueueId, callStatus, prospectCustomerTag, logger); } else { if (callStatus.Value == (long)CallStatus.Attended || callStatus.Value == (long)CallStatus.IncorrectPhoneNumber || (callStatus.Value == (long)CallStatus.TalkedtoOtherPerson && ((ProspectCustomerTag)prospectCustomerTag.Value) == ProspectCustomerTag.IncorrectPhoneNumber_TalkedToOthers)) { var callMadeAfterUploadCall = calls.OrderByDescending(x => x.DateCreated).FirstOrDefault(x => x.DateCreated > callUploadLog.OutreachDateTime); if (callMadeAfterUploadCall == null || callMadeAfterUploadCall.Status != (long)CallStatus.Attended) { isRemovedFromCallQueue = UpdateProspectCustomerDisposition(callUploadLog, prospectCustomer, organizationRoleUserId, callqueueCustomerId, callQueueId, callStatus, prospectCustomerTag, logger); } } } return(true); }