private async Task SaveContactPreferences(ContactPreferencesVm viewModel)
        {
            SaveContactPreferencesDto contactPreferences;

            var cached = await GetFromCache <ContactPreferencesRetrievedDto>($"contact-preferences-{GetCaseflowUserId()}");

            if (cached != null)
            {
                if (!viewModel.AllowContactBySms && !string.IsNullOrWhiteSpace(cached.PrimaryPhone))
                {
                    viewModel.MobileNumber = cached.PrimaryPhone;
                }

                contactPreferences = BuildSaveContactPreferencesModel(viewModel, cached);
            }
            else
            {
                var contactPreferencesRetrieved = await _myProfileService.GetContactPreferences(viewModel.LowellReference);

                if (!viewModel.AllowContactBySms && !string.IsNullOrWhiteSpace(contactPreferencesRetrieved.PrimaryPhone))
                {
                    viewModel.MobileNumber = contactPreferencesRetrieved.PrimaryPhone;
                }

                contactPreferences = BuildSaveContactPreferencesModel(viewModel, contactPreferencesRetrieved);
            }

            await _myProfileService.SaveContactPreferences(contactPreferences);
        }
        public async Task <IActionResult> MobileNumberPost(ContactPreferencesVm contactPreferencesVm)
        {
            Logger.LogInformation("Saving MobileNumber.");

            if (!ModelState.IsValid)
            {
                Logger.LogDebug("Modelstate is invalid");
                return(View("MobileNumber", contactPreferencesVm));
            }

            if (string.IsNullOrWhiteSpace(contactPreferencesVm.MobileNumber))
            {
                ModelState.AddModelError("MobileNumber", "Please enter a valid mobile number");
                return(View("MobileNumber", contactPreferencesVm));
            }

            var contactPreferencesCached = await GetFromCache <ContactPreferencesRetrievedDto>($"contact-preferences-{GetCaseflowUserId()}");

            await SaveMobileNumber(contactPreferencesVm);

            _gtmService.RaiseMobilePhoneNumberChangeEvent(contactPreferencesVm, LoggedInUserId, contactPreferencesVm.MobileNumber, contactPreferencesCached.PrimaryPhone);
            await _webActivityService.LogMobilePhoneNumberUpdateChange(contactPreferencesVm.LowellReference, LoggedInUserId, contactPreferencesVm.MobileNumber, contactPreferencesCached.PrimaryPhone);

            return(RedirectToAction("Index"));
        }
 public void RaiseMobileUpdatePageEvent(ContactPreferencesVm vm, string userId)
 {
     vm.GtmEvents.Add(new GtmEvent
     {
         gtm_event    = GtmEvents.ContactPreference,
         guid         = userId,
         action_taken = "Mobile Update Page Viewed"
     });
 }
 public void RaiseMobilePhoneNumberChangeEvent(ContactPreferencesVm vm, string userId, string newValue, string oldValue)
 {
     if (newValue != oldValue)
     {
         vm.GtmEvents.Add(new GtmEvent
         {
             gtm_event    = GtmEvents.ContactPreference,
             guid         = userId,
             action_taken = "Mobile number updated"
         });
     }
 }
        private async Task LogEvents(ContactPreferencesVm contactPreferencesVm)
        {
            var contactPreferencesCached = await GetFromCache <ContactPreferencesRetrievedDto>($"contact-preferences-{GetCaseflowUserId()}");

            _gtmService.RaiseContactPreferecesSMSChangeEvent(contactPreferencesVm, LoggedInUserId, contactPreferencesVm.AllowContactBySms, contactPreferencesCached.ContactPreferenceSMS);
            await _webActivityService.LogContactPreferencesSMSChange(contactPreferencesVm.LowellReference, LoggedInUserId, contactPreferencesVm.AllowContactBySms, contactPreferencesCached.ContactPreferenceSMS);

            _gtmService.RaiseContactPreferecesEmailChangeEvent(contactPreferencesVm, LoggedInUserId, contactPreferencesVm.AllowContactByEmail, contactPreferencesCached.ContactPreferenceEmail);
            await _webActivityService.LogContactPreferecesEmailChange(contactPreferencesVm.LowellReference, LoggedInUserId, contactPreferencesVm.AllowContactByEmail, contactPreferencesCached.ContactPreferenceEmail);

            _gtmService.RaiseMobilePhoneNumberChangeEvent(contactPreferencesVm, LoggedInUserId, contactPreferencesVm.MobileNumber, contactPreferencesCached.PrimaryPhone);
            await _webActivityService.LogMobilePhoneNumberUpdateChange(contactPreferencesVm.LowellReference, LoggedInUserId, contactPreferencesVm.MobileNumber, contactPreferencesCached.PrimaryPhone);
        }
        public void RaiseContactPreferecesEmailChangeEvent(ContactPreferencesVm vm, string userId, bool newValue, bool oldValue)
        {
            if (newValue != oldValue)
            {
                string accountActivities = newValue ? "Email selected" : "Email deselected";

                vm.GtmEvents.Add(new GtmEvent
                {
                    gtm_event    = GtmEvents.ContactPreference,
                    guid         = userId,
                    action_taken = accountActivities
                });
            }
        }
        public async Task <IActionResult> ContactPreferences(ContactPreferencesVm contactPreferencesVm)
        {
            if (!_portalSetting.Features.EnableContactPreferences)
            {
                return(RedirectToAction("Index"));
            }

            Logger.LogInformation("Navigated to MyProfile/ContactPreferences.");

            _gtmService.RaiseContactPreferecesPageEvent(contactPreferencesVm, LoggedInUserId);
            await _webActivityService.LogContactPreferencesPageVist(contactPreferencesVm.LowellReference, LoggedInUserId);

            return(View(contactPreferencesVm));
        }
        private SaveContactPreferencesDto BuildSaveContactPreferencesModel(ContactPreferencesVm viewModel, ContactPreferencesRetrievedDto dto)
        {
            var contactPreferences = new SaveContactPreferencesDto
            {
                LowellReference        = viewModel.LowellReference,
                CaseflowUserId         = GetCaseflowUserId(),
                ContactPreferenceEmail = viewModel.AllowContactByEmail,
                ContactPreferenceSMS   = viewModel.AllowContactBySms,
                PrimaryPhone           = viewModel.MobileNumber,
                BusinessPhone          = dto.BusinessPhone,
                EmailAddress           = dto.EmailAddress,
                EmailConfirmedDate     = dto.EmailConfirmedDate,
                Forename              = dto.Forename,
                HomePhone             = dto.HomePhone,
                OtherPhone            = dto.OtherPhone,
                PaymentReminderEmails = dto.PaymentReminderEmails,
                PhoneChangedDate      = dto.PhoneChangedDate,
                ReminderEmailsUpdBy   = dto.ReminderEmailsUpdBy,
                Title               = dto.Title,
                Salutation          = dto.Salutation,
                StrategyEmails      = dto.StrategyEmails,
                StrategyEmailsUpdBy = dto.StrategyEmailsUpdBy,
                StrategyEmailsUpdOn = dto.StrategyEmailsUpdOn,
                Surname             = dto.Surname,
                Name = dto.Name,
                ReminderEmailsUpdOn = dto.ReminderEmailsUpdOn,
                Address             = new List <Address>(),
            };

            foreach (var item in dto.Address)
            {
                contactPreferences.Address.Add(new Address
                {
                    Line1    = item.Line1,
                    Line2    = item.Line2,
                    Line3    = item.Line3,
                    Line4    = item.Line4,
                    Postcode = item.Postcode,
                    Type     = item.Type
                });
            }

            return(contactPreferences);
        }
        private async Task SaveMobileNumber(ContactPreferencesVm viewModel)
        {
            SaveContactPreferencesDto contactPreferences;

            var cached = await GetFromCache <ContactPreferencesRetrievedDto>($"contact-preferences-{GetCaseflowUserId()}");

            if (cached != null)
            {
                contactPreferences = BuildSaveContactPreferencesModel(viewModel, cached);
            }
            else
            {
                var contactPreferencesRetrieved = await _myProfileService.GetContactPreferences(viewModel.LowellReference);

                contactPreferences = BuildSaveContactPreferencesModel(viewModel, contactPreferencesRetrieved);
            }

            await _myProfileService.SaveContactPreferences(contactPreferences);
        }
        public async Task <IActionResult> ContactPreferencesPost(ContactPreferencesVm contactPreferencesVm)
        {
            Logger.LogInformation("Saving ContactPreferences data.");

            if (!ModelState.IsValid)
            {
                Logger.LogDebug("Modelstate is invalid");
                return(View("ContactPreferences", contactPreferencesVm));
            }

            if (contactPreferencesVm.AllowContactBySms && string.IsNullOrWhiteSpace(contactPreferencesVm.MobileNumber))
            {
                ModelState.AddModelError("MobileNumber", "Please enter a valid mobile number");
                return(View("ContactPreferences", contactPreferencesVm));
            }

            await SaveContactPreferences(contactPreferencesVm);

            await LogEvents(contactPreferencesVm);

            return(RedirectToAction("Index"));
        }