public async Task <CustomerProfileErrorCodes> UpdateAsync(string customerId, string firstName, string lastName,
                                                                  string phoneNumber, int countryPhoneCodeId, int countryOfResidenceId)
        {
            var countryPhoneCode = await _dictionariesClient.Salesforce.GetCountryPhoneCodeByIdAsync(countryPhoneCodeId);

            if (countryPhoneCode == null)
            {
                return(CustomerProfileErrorCodes.InvalidCountryPhoneCodeId);
            }

            var e164FormattedNumber = PhoneUtils.GetE164FormattedNumber(phoneNumber, countryPhoneCode.IsoCode);

            if (e164FormattedNumber == null)
            {
                return(CustomerProfileErrorCodes.InvalidPhoneNumber);
            }

            var isPhoneNumberUsedByAnotherCustomer =
                await _customerProfileRepository.IsPhoneNumberUsedByAnotherCustomer(customerId, e164FormattedNumber);

            if (isPhoneNumberUsedByAnotherCustomer)
            {
                return(CustomerProfileErrorCodes.PhoneAlreadyExists);
            }

            var result = await _customerProfileRepository.UpdateAsync(customerId, firstName, lastName, e164FormattedNumber,
                                                                      phoneNumber, countryPhoneCodeId, countryOfResidenceId);

            if (result == CustomerProfileErrorCodes.CustomerProfileDoesNotExist)
            {
                _log.Warning("Customer profile does not exist so it was not updated", context: customerId);
            }

            return(result);
        }
        public async Task ShouldSendEmailWithCorrectFirstNameAndLastName_WhenValidDataIsPassed()
        {
            // Arrange
            var          fixture      = new NotificationPublisherServiceTestsFixture();
            const string confirmToken = "token";
            var          phone        = PhoneUtils.GetE164FormattedNumber(fixture.PhoneNumber, fixture.CountryCode);

            fixture.ShortenUrlResponseModel = new ShortenUrlResponseModel
            {
                ShortenedUrl = "short token" + confirmToken
            };

            // Act
            await fixture.Service.LeadConfirmRequestAsync(
                fixture.CustomerId.ToString(),
                phone,
                confirmToken);

            // Assert
            fixture.SmsEventMock.Verify(c =>
                                        c.PublishAsync(It.Is <SmsEvent>(x =>
                                                                        x.TemplateParameters.ContainsKey("target_phonenumber") && x.TemplateParameters.ContainsValue(phone) &&
                                                                        x.TemplateParameters.ContainsKey("AcceptLink") && x.TemplateParameters.ContainsValue(fixture.ShortenUrlResponseModel.ShortenedUrl) &&
                                                                        x.CustomerId == fixture.CustomerId.ToString())));

            //string.Format(_leadConfirmEmailLinkFormat, confirmToken)
        }
예제 #3
0
 private void Update()
 {
     if (Input.GetKeyDown(KeyCode.Escape))
     {
         PhoneUtils.ExitApp();
     }
 }
예제 #4
0
    public void OnClickTelefonar()
    {
        FreeHelpAnalytics.Event("app::serviço telefonar", this.serviceID);

        // FIX
        string phone = phoneNumber.Trim() == "" ? cellphoneNumber : phoneNumber;

        PhoneUtils.MakeCall(phone);
    }
예제 #5
0
    public void OnClickEnviarSMS()
    {
        FreeHelpAnalytics.Event("app::serviço sms", this.serviceID);

        string message = "";
        string phone   = cellphoneNumber;

        PhoneUtils.SMS(phone, message);
    }
예제 #6
0
    public void OnClickEnviarWhatsapp()
    {
        FreeHelpAnalytics.Event("app::serviço whatsapp", this.serviceID);

        string message = "";
        string phone   = cellphoneNumber;

        PhoneUtils.Whatsapp(NormalizeNumber(phone), txtNomeServico.text, message);
    }
예제 #7
0
        private void HandleSMS(Group group)
        {
            var phones = "";

            foreach (var person in group.People)
            {
                phones += person.PhoneNumber[0].Number + ';';
            }
            PhoneUtils.StartPhoneAction(phones, PhoneActions.SMS);
        }
예제 #8
0
    public void OnClickButton(int id)
    {
        FreeHelp.Instance.PlayButtonSound();

        if (id == 0)        // configuracoes
        {
            Page.Show("Configuracoes");
        }
        if (id == 1) // AVALIE
        {
            FreeHelpAnalytics.Event("avaliar");
            Application.OpenURL(URL.RATE);
        }
        if (id == 2) // SHARE
        {
            FreeHelpAnalytics.Event("compartilhar app");
            PhoneUtils.ShareText("FreeHelp", "Descobri esse aplicativo que busca, localiza e informa sobre os mais variados serviços! É uma grande ideia para fornecedores e consumidores, então lembrei de você!" + System.Environment.NewLine + System.Environment.NewLine + "Instale agora para conferir!" + System.Environment.NewLine + URL.SHARE);
        }
        if (id == 3) // PRIMEIROS PASSOS
        {
            //Alert.Show("Primeiros passos!");
            FreeHelpAnalytics.Event("primeiros passos");
            TutorialManager.Instance.Clear();
        }
        if (id == 4)         // Curta nosso facebook
        {
            FreeHelpAnalytics.Event("curtir facebook");
            Application.OpenURL(URL.FACEBOOK);
        }
        else if (id == 5)
        {
            Page.Show("SobreOFreeHelp");
        }
        else if (id == 6)
        {
            Page.Show("FaleConosco");
        }
        else if (id == 7)
        {
            User.Instance.Logoff();
            Page.Show("Login");
        }
        else if (id == 8)         // SAIR
        {
            User.Instance.Logoff();
            Page.Show("Login");
        }
        else if (id == 9)         // HISTORICO
        {
            FreeHelpAnalytics.Event("histórico");
            OnClickHistorico();
        }

        Hide();
    }
        public async Task <ICustomerProfile> GetByCustomerPhoneAsync(string phone, bool includeNotVerified = false, bool includeNotActive = false)
        {
            var e164FormattedNumber = PhoneUtils.GetE164FormattedNumber(phone);

            if (string.IsNullOrEmpty(e164FormattedNumber))
            {
                _log.Warning("Invalid phone number. Failed to convert to E164 format", null, phone);
                return(null);
            }

            var encryptedPhone = _encryptionService.EncryptValue(e164FormattedNumber);

            using (var context = _contextFactory.CreateDataContext())
            {
                var result = includeNotVerified
                    ? await context.CustomerProfiles
                             .Include(c => c.LoginProviders)
                             .IgnoreQueryFilters()
                             .Where(c => includeNotActive || c.Status == CustomerProfileStatus.Active)
                             .FirstOrDefaultAsync(c => c.PhoneNumber == encryptedPhone)
                    : await context.CustomerProfiles
                             .Include(c => c.LoginProviders)
                             .Where(c => includeNotActive || c.Status == CustomerProfileStatus.Active)
                             .FirstOrDefaultAsync(c => c.PhoneNumber == encryptedPhone);

                if (result == null)
                {
                    return(null);
                }

                result = _encryptionService.Decrypt(result);

                return(new CustomerProfileModel
                {
                    CustomerId = result.CustomerId,
                    Registered = result.Registered,
                    FirstName = result.FirstName,
                    LastName = result.LastName,
                    Email = result.Email,
                    IsEmailVerified = result.IsEmailVerified,
                    PhoneNumber = result.PhoneNumber,
                    ShortPhoneNumber = result.ShortPhoneNumber,
                    CountryPhoneCodeId = result.CountryPhoneCodeId,
                    CountryOfResidenceId = result.CountryOfResidenceId,
                    CountryOfNationalityId = result.CountryOfNationalityId,
                    TierId = result.TierId,
                    IsPhoneVerified = result.IsPhoneVerified,
                    LoginProviders = new List <LoginProvider>(
                        result.LoginProviders.Select(x => x.LoginProvider)),
                    Status = result.Status,
                });
            }
        }
예제 #10
0
        private void HandleEmail(Group group)
        {
            var emails = "";

            if (group.People.Count > 1)
            {
                emails = group.People[0].Email + "?cc=";
            }
            for (int i = 1; i < group.People.Count; i++)
            {
                emails += group.People[i].Email + ";";
            }
            PhoneUtils.StartPhoneAction(emails, PhoneActions.Mail);
        }
예제 #11
0
        public PaymentResult SendSmsPaymentToNumber(int orderId, string phoneNumber)
        {
            ISmsPaymentService service = SmsPaymentServiceSetting.GetSmsmPaymentServite();

            if (service == null)
            {
                return(new PaymentResult {
                    ErrorDescription = "Сервис отправки Sms не работает, обратитесь в РПО."
                });
            }

            string realPhoneNumber = "8" + PhoneUtils.RemoveNonDigit(phoneNumber);

            return(service.SendPayment(orderId, realPhoneNumber));
        }
예제 #12
0
        public async Task <ResultMessage> SendFastPaymentUrlAsync(Order order, string phoneNumber, bool isQr)
        {
            var orderId = order.Id;

            if (_instantSmsService == null)
            {
                return(new ResultMessage {
                    ErrorDescription = "Сервис отправки Sms не работает, обратитесь в РПО."
                });
            }

            var realPhoneNumber = PhoneUtils.RemoveNonDigit(phoneNumber);
            var response        = await GetFastPaymentResponseDtoAsync(orderId, realPhoneNumber, isQr);

            if (response == null)
            {
                return(new ResultMessage {
                    ErrorDescription = "Не удалось получить ответ от банка, обратитесь в РПО"
                });
            }

            if (response.ErrorMessage != null)
            {
                return(new ResultMessage {
                    ErrorDescription = response.ErrorMessage
                });
            }

            if (response.FastPaymentStatus.HasValue && response.FastPaymentStatus == FastPaymentStatus.Performed)
            {
                var resultMessage = new ResultMessage
                {
                    ErrorDescription = $"Заказ №{orderId} оплачен",
                    IsPaidStatus     = true
                };
                return(resultMessage);
            }

            var smsMessage = new InstantSmsMessage
            {
                MessageText = $"Ссылка на оплату заказа №{orderId}\n" +
                              $"{_fastPaymentParametersProvider.GetVodovozFastPayBaseUrl}/{response.FastPaymentGuid}",
                MobilePhone = phoneNumber,
                ExpiredTime = DateTime.Now.AddMinutes(10)
            };

            return(_instantSmsService.SendSms(smsMessage));
        }
예제 #13
0
        public void When_PhoneNumberPassed_Expect_FormatedPhoneNumber()
        {
            //Arange
            var phoneNumber = "00459 886 660 177";

            //Act
            var formatedPhoneNumber = PhoneUtils.PreparePhoneNumber(phoneNumber);

            //Assert
            var expectedPhoneNumber = new string(phoneNumber.Where(char.IsDigit).ToArray());

            expectedPhoneNumber = expectedPhoneNumber.TrimStart('0');
            expectedPhoneNumber = $"+{expectedPhoneNumber}";

            Assert.Equal(expectedPhoneNumber, formatedPhoneNumber);
        }
예제 #14
0
 private void Update()
 {
     if (Input.GetKeyDown(KeyCode.Escape))
     {
         if (shareObject == null || shareObject.activeSelf == false)
         {
             if (MenuLateral.Instance.IsOppened() == true)
             {
                 PhoneUtils.ExitApp();
             }
             else
             {
                 OnPressBack();
             }
         }
     }
 }
예제 #15
0
        public async Task ShouldCreateReferral_WhenValidDataIsPassed()
        {
            // Arrange
            var fixture = new ReferralLeadServiceTestsFixture();

            // Act
            await fixture.Service.CreateReferralLeadAsync(fixture.ReferralLead);

            // Assert

            fixture.ReferralLeadRepositoryMock.Verify(
                x => x.CreateAsync(
                    It.Is <ReferralLeadEncrypted>(c =>
                                                  c.AgentId == fixture.AgentId &&
                                                  c.PhoneNumberHash != fixture.PhoneNumber)),
                Times.Once);

            fixture.AgentManagementServiceMock.Verify(
                x => x.Agents.GetByCustomerIdAsync(
                    It.Is <Guid>(c => c == fixture.ReferralLead.AgentId)),
                Times.Once);
            var phoneNumberE164 = PhoneUtils.GetE164FormattedNumber(fixture.ReferralLead.PhoneNumber, fixture.CountryCode.ToString());

            fixture.NotificationPublisherServiceMock.Verify(
                x => x.LeadConfirmRequestAsync(
                    It.Is <string>(c => c == fixture.ReferralLead.AgentId.ToString()),
                    It.Is <string>(c => c == phoneNumberE164),
                    It.Is <string>(c => c == fixture.ReferralLead.ConfirmationToken)),
                Times.Once);

            fixture.NotificationPublisherServiceMock.Verify(
                x => x.LeadAlreadyConfirmedAsync(
                    It.IsAny <string>(),
                    It.IsAny <string>(),
                    It.IsAny <string>(),
                    It.IsAny <string>()),
                Times.Never);

            fixture.LeadStateChangePublisherMock.Verify(
                x =>
                x.PublishAsync(
                    It.Is <LeadStateChangedEvent>(
                        c =>
                        c.State == Contract.Enums.ReferralLeadState.Pending)),
                Times.Once);
        }
예제 #16
0
        public void When_PhoneWithExtraSpaces_Expect_E164FormatOfOnlyNumbers()
        {
            //Arange
            var extraSpacesNumber = "  +45  9     8  8    6     6 6  0      1 77";

            //Act
            var formatedPhoneNumber = PhoneUtils.GetE164FormattedNumber(extraSpacesNumber);

            //Assert
            var preparedNumber = new string(extraSpacesNumber.Where(char.IsDigit).ToArray());

            preparedNumber = preparedNumber.TrimStart('0');
            preparedNumber = $"+{preparedNumber}";

            var e164FormattedNumber = preparedNumber.ToE164Number();

            Assert.Equal(e164FormattedNumber, formatedPhoneNumber);
        }
예제 #17
0
        public void When_FullPhonePassedWithPlus_Expect_E164FormattedNumber()
        {
            //Arange
            var fullPhoneNumber = "+459 886 660 177";

            //Act
            var formatedPhoneNumber = PhoneUtils.GetE164FormattedNumber(fullPhoneNumber);

            //Assert
            var preparedNumber = new string(fullPhoneNumber.Where(char.IsDigit).ToArray());

            preparedNumber = preparedNumber.TrimStart('0');
            preparedNumber = $"+{preparedNumber}";

            var e164FormattedNumber = preparedNumber.ToE164Number();

            Assert.Equal(e164FormattedNumber, formatedPhoneNumber);
        }
예제 #18
0
        public void When_EmptyStringPassed_Expect_PlusSign()
        {
            //Arange
            var emptyNumber = " ";

            //Act
            var formatedPhoneNumber = PhoneUtils.GetE164FormattedNumber(emptyNumber);

            //Assert
            var preparedNumber = new string(emptyNumber.Where(char.IsDigit).ToArray());

            preparedNumber = preparedNumber.TrimStart('0');
            preparedNumber = $"+{preparedNumber}";

            var e164FormattedNumber = preparedNumber.ToE164Number();

            Assert.Equal(e164FormattedNumber, formatedPhoneNumber);
        }
        public async Task <CustomerProfileErrorCodes> UpdatePhoneInfoAsync(string customerId, string phoneNumber, int countryPhoneCodeId)
        {
            var customerProfile =
                await _customerProfileRepository.GetByCustomerIdAsync(customerId, includeNotVerified : true);

            if (customerProfile == null)
            {
                return(CustomerProfileErrorCodes.CustomerProfileDoesNotExist);
            }

            var countryPhoneCode = await _dictionariesClient.Salesforce.GetCountryPhoneCodeByIdAsync(countryPhoneCodeId);

            if (countryPhoneCode == null)
            {
                return(CustomerProfileErrorCodes.InvalidCountryPhoneCodeId);
            }

            var e164FormattedNumber = PhoneUtils.GetE164FormattedNumber(phoneNumber, countryPhoneCode.IsoCode);

            if (e164FormattedNumber == null)
            {
                return(CustomerProfileErrorCodes.InvalidPhoneNumber);
            }

            var isPhoneNumberUsedByAnotherCustomer =
                await _customerProfileRepository.IsPhoneNumberUsedByAnotherCustomer(customerId, e164FormattedNumber);

            if (isPhoneNumberUsedByAnotherCustomer)
            {
                return(CustomerProfileErrorCodes.PhoneAlreadyExists);
            }

            if (customerProfile.PhoneNumber == e164FormattedNumber &&
                customerProfile.ShortPhoneNumber == phoneNumber &&
                customerProfile.CountryPhoneCodeId == countryPhoneCodeId)
            {
                return(CustomerProfileErrorCodes.None);
            }

            var result = await _customerProfileRepository.UpdatePhoneInfoAsync(customerId, e164FormattedNumber,
                                                                               phoneNumber, countryPhoneCodeId, isPhoneVerified : false);

            return(result);
        }
예제 #20
0
        public void When_PhoneAndIsoCodePassed_Expect_E164FormattedNumber()
        {
            //Arange
            var shortPhoneNumber = "886 660 177";
            var isoCode          = "459";

            //Act
            var formatedPhoneNumber = PhoneUtils.GetE164FormattedNumber(shortPhoneNumber, isoCode);

            //Assert
            var fullPhoneNumber = $"{isoCode} {shortPhoneNumber}";

            var preparedNumber = new string(fullPhoneNumber.Where(char.IsDigit).ToArray());

            preparedNumber = preparedNumber.TrimStart('0');
            preparedNumber = $"+{preparedNumber}";

            var e164FormattedNumber = preparedNumber.ToE164Number();

            Assert.Equal(e164FormattedNumber, formatedPhoneNumber);
        }
        public async Task Save_Encrypted_Sensitive_Data_Of_Referral_Lead_While_Creating()
        {
            // arrange

            var profileFixture = new CustomerProfileResponse()
            {
                Profile = new CustomerProfile.Client.Models.Responses.CustomerProfile()
                {
                    Email = "*****@*****.**"
                },
                ErrorCode = CustomerProfileErrorCodes.None
            };

            _customerProfileClientMock.Setup(c => c.CustomerProfiles.GetByCustomerIdAsync(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>()))
            .ReturnsAsync(profileFixture);

            var emailHash = _referralLeadCreateInfo.Email.ToSha256Hash();

            var phoneNumberE164 =
                PhoneUtils.GetE164FormattedNumber(_referralLeadCreateInfo.PhoneNumber, _countryPhoneCode.IsoCode);

            var phoneNumberHash = phoneNumberE164.ToSha256Hash();

            // act

            await _service.CreateReferralLeadAsync(_referralLeadCreateInfo);

            // assert

            _referralLeadRepositoryMock.Verify(o => o.CreateAsync(
                                                   It.Is <ReferralLeadEncrypted>(referralLeadEncrypted =>
                                                                                 referralLeadEncrypted.EmailHash == emailHash &&
                                                                                 referralLeadEncrypted.PhoneNumberHash == phoneNumberHash &&
                                                                                 referralLeadEncrypted.PhoneCountryCodeId == _countryPhoneCode.Id &&
                                                                                 referralLeadEncrypted.AgentId == _referralLeadCreateInfo.AgentId &&
                                                                                 referralLeadEncrypted.AgentSalesforceId == _agent.SalesforceId &&
                                                                                 referralLeadEncrypted.State == ReferralLeadState.Pending)),
                                               Times.Once);
        }
        public async Task Create_Referral_Lead_Profile_While_Creating()
        {
            // arrange

            var phoneNumberE164 =
                PhoneUtils.GetE164FormattedNumber(_referralLeadCreateInfo.PhoneNumber, _countryPhoneCode.IsoCode);

            var profileFixture = new CustomerProfileResponse
            {
                Profile = new CustomerProfile.Client.Models.Responses.CustomerProfile
                {
                    Email = "*****@*****.**"
                },
                ErrorCode = CustomerProfileErrorCodes.None
            };

            _customerProfileClientMock.Setup(c => c.CustomerProfiles.GetByCustomerIdAsync(It.IsAny <string>(), false, false))
            .ReturnsAsync(profileFixture);

            // act

            await _service.CreateReferralLeadAsync(_referralLeadCreateInfo);

            // assert

            _customerProfileClientMock.Verify(o => o.ReferralLeadProfiles.AddAsync(
                                                  It.Is <ReferralLeadProfileRequest>(request =>
                                                                                     request.ReferralLeadId == _referralId &&
                                                                                     request.FirstName == _referralLeadCreateInfo.FirstName &&
                                                                                     request.LastName == _referralLeadCreateInfo.LastName &&
                                                                                     request.Email == _referralLeadCreateInfo.Email &&
                                                                                     request.PhoneNumber == phoneNumberE164 &&
                                                                                     request.Note == _referralLeadCreateInfo.Note
                                                                                     )),
                                              Times.Once);
        }
예제 #23
0
 private void HandleCall(Person person)
 {
     PhoneUtils.StartPhoneAction(person.PhoneNumber[0].Number, PhoneActions.Call);
 }
예제 #24
0
        public async Task <ReferralLead> CreateReferralLeadAsync(ReferralLead referralLead)
        {
            var agentCustomer = await _customerProfileClient.CustomerProfiles
                                .GetByCustomerIdAsync(referralLead.AgentId.ToString(), false, false);

            if (agentCustomer.ErrorCode == CustomerProfileErrorCodes.CustomerProfileDoesNotExist)
            {
                throw new CustomerDoesNotExistException($"Customer '{referralLead.AgentId}' does not exist.");
            }

            var agent = await _agentManagementClient.Agents.GetByCustomerIdAsync(referralLead.AgentId);

            if (agent == null || agent.Status != AgentStatus.ApprovedAgent)
            {
                throw new CustomerNotApprovedAgentException("Customer isn't an approved agent.");
            }

            var countryPhoneCode = await _dictionariesClient.Salesforce
                                   .GetCountryPhoneCodeByIdAsync(referralLead.PhoneCountryCodeId);

            if (countryPhoneCode == null)
            {
                throw new CountryCodeDoesNotExistException(
                          $"Country information for Country code id '{referralLead.PhoneCountryCodeId}' does not exist.");
            }

            if (agentCustomer.Profile.Email == referralLead.Email ||
                agentCustomer.Profile.CountryPhoneCodeId == referralLead.PhoneCountryCodeId &&
                (agentCustomer.Profile.PhoneNumber == referralLead.PhoneNumber ||
                 agentCustomer.Profile.ShortPhoneNumber == referralLead.PhoneNumber))
            {
                throw new ReferYourselfException("You can not refer yourself as lead.");
            }

            var emailHash = referralLead.Email.ToSha256Hash();

            var phoneNumberE164 = PhoneUtils.GetE164FormattedNumber(referralLead.PhoneNumber, countryPhoneCode.IsoCode);

            if (string.IsNullOrEmpty(phoneNumberE164))
            {
                _log.Error(message: "Referral lead has invalid phone number.",
                           context: $"agentId: {referralLead.AgentId}");

                throw new InvalidPhoneNumberException();
            }

            var phoneNumberHash = phoneNumberE164.ToSha256Hash();

            if (await ReferralLeadAlreadyExistsAsync(referralLead.AgentId, emailHash, referralLead.PhoneCountryCodeId, phoneNumberHash))
            {
                throw new ReferralAlreadyExistException("Lead with the same Phone or Email is already referred from you.");
            }

            if (await ConfirmedLeadExistsAsync(emailHash, referralLead.PhoneCountryCodeId, phoneNumberHash))
            {
                await _notificationPublisherService.LeadAlreadyConfirmedAsync(
                    referralLead.AgentId.ToString(), referralLead.FirstName, referralLead.LastName, phoneNumberE164);

                throw new ReferralLeadAlreadyConfirmedException("Lead with the same Phone or Email already confirmed.");
            }

            if (agent == null || agent.Status != AgentStatus.ApprovedAgent)
            {
                throw new CustomerNotApprovedAgentException("Customer isn't an approved agent.");
            }

            var referralStake = await _stakeService.GetReferralStake(referralLead.CampaignId, EstatePurchaseConditionName);

            var referralLeadEncrypted = new ReferralLeadEncrypted
            {
                Id = Guid.NewGuid(),
                PhoneCountryCodeId = referralLead.PhoneCountryCodeId,
                PhoneNumberHash    = phoneNumberHash,
                EmailHash          = emailHash,
                AgentId            = referralLead.AgentId,
                AgentSalesforceId  = agent.SalesforceId,
                ConfirmationToken  = GenerateConfirmationToken(),
                State        = ReferralLeadState.Pending,
                CampaignId   = referralLead.CampaignId,
                StakeEnabled = referralStake != null
            };

            if (referralStake != null)
            {
                await _stakeService.SetStake(
                    referralStake,
                    referralLead.AgentId.ToString("D"),
                    referralLeadEncrypted.Id.ToString("D"));
            }

            referralLeadEncrypted = await _referralLeadRepository.CreateAsync(referralLeadEncrypted);

            var createdReferralLead = _mapper.Map <ReferralLead>(referralLeadEncrypted);

            createdReferralLead.FirstName   = referralLead.FirstName;
            createdReferralLead.LastName    = referralLead.LastName;
            createdReferralLead.Email       = referralLead.Email;
            createdReferralLead.PhoneNumber = phoneNumberE164;
            createdReferralLead.Note        = referralLead.Note;

            var response = await _customerProfileClient.ReferralLeadProfiles.AddAsync(new ReferralLeadProfileRequest
            {
                ReferralLeadId = referralLeadEncrypted.Id,
                FirstName      = createdReferralLead.FirstName,
                LastName       = createdReferralLead.LastName,
                PhoneNumber    = createdReferralLead.PhoneNumber,
                Email          = createdReferralLead.Email,
                Note           = createdReferralLead.Note
            });

            if (response.ErrorCode != ReferralLeadProfileErrorCodes.None)
            {
                _log.Error(message: "An error occurred while creating referral lead profile",
                           context: $"referralLeadId: {createdReferralLead.Id}");
            }

            await _notificationPublisherService.LeadConfirmRequestAsync(referralLead.AgentId.ToString(),
                                                                        phoneNumberE164, referralLeadEncrypted.ConfirmationToken);

            await PublishLeadChangeStateEvent(referralLeadEncrypted.Id.ToString(),
                                              _mapper.Map <Contract.Enums.ReferralLeadState>(referralLead.State));

            return(createdReferralLead);
        }
예제 #25
0
 public void Share(InputField text)
 {
     PhoneUtils.ShareText("Titulo", "Eu podia estar roubando ou matando, mas estou enviando mensagens dinamicamente! ;)");
 }
예제 #26
0
 public void PhoneCall(InputField text)
 {
     PhoneUtils.MakeCall(text.text);
 }
예제 #27
0
        public async Task <ReferralLead> CreateReferralLeadAsync(ReferralLead referralLead)
        {
            ReferralLead createdReferralLead = null;

            try
            {
                var agentCustomer = await _customerProfileClient.CustomerProfiles
                                    .GetByCustomerIdAsync(referralLead.AgentId.ToString());

                if (agentCustomer.ErrorCode == CustomerProfileErrorCodes.CustomerProfileDoesNotExist)
                {
                    throw new CustomerDoesNotExistException($"Customer '{referralLead.AgentId}' does not exist.");
                }

                var agent = await _agentManagementClient.Agents.GetByCustomerIdAsync(referralLead.AgentId);

                if (agent == null || agent.Status != AgentStatus.ApprovedAgent)
                {
                    throw new CustomerNotApprovedAgentException("Customer isn't an approved agent.");
                }

                var countryPhoneCode = await _dictionariesClient.Salesforce
                                       .GetCountryPhoneCodeByIdAsync(referralLead.PhoneCountryCodeId);

                if (countryPhoneCode == null)
                {
                    throw new CountryCodeDoesNotExistException(
                              $"Country information for Country code id '{referralLead.PhoneCountryCodeId}' does not exist.");
                }

                var emailHash = referralLead.Email.ToSha256Hash();

                var phoneNumberE164 = PhoneUtils.GetE164FormattedNumber(referralLead.PhoneNumber, countryPhoneCode.IsoCode);

                if (string.IsNullOrEmpty(phoneNumberE164))
                {
                    _log.Error(message: "Referral lead has invalid phone number.",
                               context: $"agentId: {referralLead.AgentId}");

                    throw new InvalidPhoneNumberException();
                }

                var phoneNumberHash = phoneNumberE164.ToSha256Hash();

                var referralLeadEncrypted = new ReferralLeadEncrypted
                {
                    PhoneCountryCodeId = referralLead.PhoneCountryCodeId,
                    PhoneNumberHash    = phoneNumberHash,
                    EmailHash          = emailHash,
                    AgentId            = referralLead.AgentId,
                    AgentSalesforceId  = agent.SalesforceId,
                    ConfirmationToken  = GenerateConfirmationToken(),
                    // State is automatically approved
                    State = ReferralLeadState.Pending
                };

                referralLeadEncrypted = await _referralLeadRepository.CreateAsync(referralLeadEncrypted);

                createdReferralLead = _mapper.Map <ReferralLead>(referralLeadEncrypted);

                createdReferralLead.FirstName   = referralLead.FirstName;
                createdReferralLead.LastName    = referralLead.LastName;
                createdReferralLead.Email       = referralLead.Email;
                createdReferralLead.PhoneNumber = phoneNumberE164;
                createdReferralLead.Note        = referralLead.Note;

                var response = await _customerProfileClient.ReferralLeadProfiles.AddAsync(new ReferralLeadProfileRequest
                {
                    ReferralLeadId = referralLeadEncrypted.Id,
                    FirstName      = createdReferralLead.FirstName,
                    LastName       = createdReferralLead.LastName,
                    PhoneNumber    = createdReferralLead.PhoneNumber,
                    Email          = createdReferralLead.Email,
                    Note           = createdReferralLead.Note
                });

                if (response.ErrorCode != ReferralLeadProfileErrorCodes.None)
                {
                    _log.Error(message: "An error occurred while creating referral lead profile",
                               context: $"referralLeadId: {createdReferralLead.Id}");
                }

                await _notificationPublisherService.LeadConfirmRequestAsync(
                    referralLead.AgentId.ToString(),
                    phoneNumberE164,
                    referralLeadEncrypted.ConfirmationToken);
            }
            catch (Exception e)
            {
                _log.Error("Demo service failed to process the request.", e);
            }

            return(createdReferralLead);
        }
예제 #28
0
    void ShareNativeImage(string shareText)
    {
        if (Application.isEditor)
        {
                        #if UNITY_EDITOR
            UnityEditor.EditorUtility.DisplayDialog("Ooops!", "Social sharing is not working in the editor!", "Got it!");
                        #endif
            Debug.LogError("UniShare: Social sharing is not working in the editor!");
            return;
        }

                #if NETFX_CORE
        screenshotPath = Path.Combine(Application.persistentDataPath, ScreenshotName).Replace("/", "\\");

        byte[] imgData = createdTexture.EncodeToPNG();

        //write out all the bytes into a png
        File.WriteAllBytes(screenshotPath, imgData);

        _Call();
                #endif

                #if UNITY_IPHONE
        //byte[] imgData = createdTexture.EncodeToPNG();
        //FIX HERE //presentActivitySheetWithImageAndString(shareText,imgData,imgData.Length);

        PhoneUtils.ShareImage("FreeHelp", shareText, createdTexture);
                #endif

                #if UNITY_ANDROID
        Debug.Log("UNISHARE: " + "started");

        string screenShotPath = Application.persistentDataPath + "/" + ScreenshotName;

        //Debug.Log("UNISHARE: " + System.IO.File.Exists(screenShotPath));
        //Debug.Log("UNISHARE: " + screenShotPath);

        System.IO.File.WriteAllBytes(screenShotPath, createdTexture.EncodeToPNG());

        Debug.Log("UNISHARE: " + System.IO.File.Exists(screenShotPath));

        AndroidJavaClass  intentClass  = new AndroidJavaClass("android.content.Intent");
        AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");

        intentObject.Call <AndroidJavaObject>("setAction", intentClass.GetStatic <string>("ACTION_SEND"));
        AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");

        Debug.Log("UNISHARE: " + "file://" + screenShotPath);

        AndroidJavaObject uriObject = uriClass.CallStatic <AndroidJavaObject>("parse", "file://" + screenShotPath);
        intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_STREAM"), uriObject);
        intentObject.Call <AndroidJavaObject>("setType", "image/png");
        intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_TEXT"), shareText);

        AndroidJavaClass  unity           = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic <AndroidJavaObject>("currentActivity");

        AndroidJavaObject jChooser = intentClass.CallStatic <AndroidJavaObject>("createChooser", intentObject, "Share");
        currentActivity.Call("startActivity", jChooser);
                #endif
    }
예제 #29
0
 private void HandleCall(PhoneNumber phonenumber)
 {
     PhoneUtils.StartPhoneAction(phonenumber.Number, PhoneActions.Call);
 }
예제 #30
0
 public void Whatsapp(InputField text)
 {
     PhoneUtils.Whatsapp(text.text, "Nome", "Eu podia estar roubando ou matando, mas estou enviando mensagens dinamicamente! ;)");
 }