Пример #1
0
 public async Task ValidarSelfie(string codigoConvite, string numeroCelular, string fotoBase64)
 {
     var validarSelfieCommand = new ValidarSelfieCommand(codigoConvite, numeroCelular, fotoBase64);
     await _bus.SendCommand(validarSelfieCommand);
 }
Пример #2
0
        public async Task <bool> Handle(ValidarSelfieCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                NotifyValidationErrors(message);
                return(await Task.FromResult(false));
            }

            var onboarding = _onboardingRepository.Find(o => o.CodigoConvite.Equals(message.CodigoConvite) && o.NumeroCelular.Equals(message.NumeroCelular)).FirstOrDefault();

            if (onboarding == null)
            {
                await _bus.RaiseEvent(new DomainNotification(message.MessageType, "Código do convite ou número de celular inválidos.", message));

                return(await Task.FromResult(false));
            }

            try
            {
                var client = _httpAppService.CreateClient(_serviceManager.UrlVileve);

                var token = await _httpAppService.OnPost <Token, object>(client, message.RequestId, "v1/auth/login", new
                {
                    usuario = _serviceManager.UserVileve,
                    senha   = _serviceManager.PasswordVileve
                });

                if (token == null || string.IsNullOrWhiteSpace(token.AccessToken))
                {
                    await _bus.RaiseEvent(new DomainNotification(message.MessageType, "Usuário de integração não encontrado.", message));

                    return(await Task.FromResult(false));
                }

                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);

                string apelido;
                string nomeSocial;

                if (onboarding.Consultor.Representante.NomeCompleto.IndexOf(" ", StringComparison.Ordinal).Equals(-1))
                {
                    apelido    = onboarding.Consultor.Representante.NomeCompleto;
                    nomeSocial = onboarding.Consultor.Representante.NomeCompleto;
                }
                else
                {
                    apelido    = onboarding.Consultor.Representante.NomeCompleto.Substring(0, onboarding.Consultor.Representante.NomeCompleto.IndexOf(" ", StringComparison.Ordinal));
                    nomeSocial = onboarding.Consultor.Representante.NomeCompleto.Substring(0, onboarding.Consultor.Representante.NomeCompleto.IndexOf(" ", StringComparison.Ordinal));
                }

                var pessoaJuridica = await _httpAppService.OnPost <PessoaJuridica, object>(client, message.RequestId, $"v1/consultor/cadastrar/pessoajuridica/{message.CodigoConvite}", new
                {
                    razao_social         = onboarding.Consultor.RazaoSocial,
                    nome_fantasia        = onboarding.Consultor.NomeFantasia,
                    data_fundacao        = "2015-01-18",
                    codigo_nacionalidade = "1",
                    cnpj = onboarding.Consultor.Cnpj,
                    codigo_ramo_atividade = 1,
                    inscricao_municipal   = onboarding.Consultor.InscricaoMunicipal,
                    inscricao_estadual    = onboarding.Consultor.InscricaoEstadual,
                    pessoa = new
                    {
                        nome_completo = onboarding.Consultor.Representante.NomeCompleto,
                        apelido,
                        nome_social          = nomeSocial,
                        codigo_sexo          = onboarding.Consultor.Representante.Sexo,
                        codigo_estado_civil  = onboarding.Consultor.Representante.EstadoCivil,
                        data_nascimento      = "1962-01-13",
                        codigo_nacionalidade = onboarding.Consultor.Representante.Nacionalidade,
                        cpf          = onboarding.Consultor.Representante.Cpf,
                        autenticacao = new
                        {
                            usuario       = onboarding.Email,
                            senha         = onboarding.Senha,
                            codigo_perfil = 17
                        },
                        emails = onboarding.Consultor.Representante.Emails.Select(item => new
                        {
                            tipo_email = item.TipoEmail,
                            email      = item.Email,
                            principal  = 1
                        }),
                        telefones = onboarding.Consultor.Representante.Telefones.Select(item => new
                        {
                            tipo_telefone = item.TipoTelefone,
                            ddd           = item.Numero.Replace("+55", "").Substring(0, 2),
                            telefone      = item.Numero.Replace("+55", "").Substring(2),
                            principal     = 1
                        }),
                        enderecos = onboarding.Consultor.Enderecos.Select(item => new
                        {
                            tipo_endereco = item.TipoEndereco,
                            rua           = item.Logradouro,
                            numero        = item.Numero,
                            complemento   = item.Complemento,
                            bairro        = item.Bairro,
                            cidade        = item.Cidade,
                            sigla_estado  = item.Estado,
                            cep           = item.Cep.Replace("-", ""),
                            principal     = item.Principal
                        }),
                        dados_bancarios = new List <object>
                        {
                            new
                            {
                                codigo_banco               = onboarding.Consultor.DadosBancarios.CodigoBanco,
                                agencia                    = onboarding.Consultor.DadosBancarios.Agencia,
                                conta                      = $"{onboarding.Consultor.DadosBancarios.ContaSemDigito}{onboarding.Consultor.DadosBancarios.Digito}",
                                codigo_operacao            = 1,
                                cpf_favorecido             = onboarding.Consultor.Representante.Cpf,
                                favorecido_fisica_juridica = "J",
                                principal                  = 1
                            }
                        }
                    }
                });

                if (pessoaJuridica.Sucesso)
                {
                    try
                    {
                        if (!string.IsNullOrWhiteSpace(message.FotoBase64))
                        {
                            var selfie = await _httpAppService.OnPost <object, object>(client, message.RequestId, "v1/pessoa/envio/selfie", new
                            {
                                codigo_pessoa  = pessoaJuridica.CodigoPessoa,
                                arquivo_base64 = message.FotoBase64
                            });
                        }
                    }
                    catch (Exception e)
                    {
                        _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                        {
                            message.RequestId,
                            e.Message
                        }));
                    }

                    try
                    {
                        if (!string.IsNullOrWhiteSpace(onboarding.Consultor.Representante.DocumentoFrenteBase64) &&
                            !string.IsNullOrWhiteSpace(onboarding.Consultor.Representante.DocumentoVersoBase64))
                        {
                            var documentoIdentificacao = await _httpAppService.OnPost <object, object>(client, message.RequestId, "v1/pessoa/envio/documento-identificacao", new
                            {
                                codigo_pessoa = pessoaJuridica.CodigoPessoa,
                                frente        = new
                                {
                                    arquivo_base64 = onboarding.Consultor.Representante.DocumentoFrenteBase64
                                },
                                verso = new
                                {
                                    arquivo_base64 = onboarding.Consultor.Representante.DocumentoVersoBase64
                                }
                            });
                        }
                    }
                    catch (Exception e)
                    {
                        _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                        {
                            message.RequestId,
                            e.Message
                        }));
                    }

                    // try
                    // {
                    //     foreach (var item in onboarding.Consultor.Enderecos)
                    //     {
                    //         await _httpAppService.OnPost<object, object>(client, message.RequestId, "v1/pessoa/envio/comprovante-endereco", new
                    //         {
                    //             codigo_pessoa = 0,
                    //             arquivo_base64 = item.ComprovanteBase64
                    //         });
                    //     }
                    // }
                    // catch (Exception e)
                    // {
                    //     _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                    //     {
                    //         message.RequestId,
                    //         e.Message
                    //     }));
                    // }

                    try
                    {
                        if (!string.IsNullOrWhiteSpace(onboarding.Consultor.ContratoSocialBase64))
                        {
                            var contratoSocial = await _httpAppService.OnPost <object, object>(client, message.RequestId, "v1/pessoa/envio/contrato-social", new
                            {
                                codigo_pessoa  = pessoaJuridica.CodigoPessoa,
                                tipo_contrato  = "contrato",
                                arquivo_base64 = onboarding.Consultor.ContratoSocialBase64
                            });
                        }
                    }
                    catch (Exception e)
                    {
                        _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                        {
                            message.RequestId,
                            e.Message
                        }));
                    }

                    try
                    {
                        if (!string.IsNullOrWhiteSpace(onboarding.Consultor.UltimaAlteracaoBase64))
                        {
                            var alteracaoContratoSocial = await _httpAppService.OnPost <object, object>(client, message.RequestId, "v1/pessoa/envio/contrato-social", new
                            {
                                codigo_pessoa  = pessoaJuridica.CodigoPessoa,
                                tipo_contrato  = "alteracao",
                                arquivo_base64 = onboarding.Consultor.UltimaAlteracaoBase64
                            });
                        }
                    }
                    catch (Exception e)
                    {
                        _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                        {
                            message.RequestId,
                            e.Message
                        }));
                    }
                }
            }
            catch (Exception e)
            {
                _logger.Log(LogLevel.Error, e, JsonSerializer.Serialize(new
                {
                    message.RequestId,
                    e.Message
                }));

                var errors = new List <string>();

                try
                {
                    var responseError = JsonConvert.DeserializeObject <ResponseError>(e.Message);
                    errors.AddRange(responseError.Erros);
                }
                catch (Exception)
                {
                    // ignored
                }

                if (errors.Any())
                {
                    foreach (var error in errors)
                    {
                        await _bus.RaiseEvent(new DomainNotification(message.MessageType, error, message));
                    }
                }
                else
                {
                    await _bus.RaiseEvent(new DomainNotification(message.MessageType, "O sistema está momentaneamente indisponível, tente novamente mais tarde.", message));
                }

                return(await Task.FromResult(false));
            }

            onboarding.StatusOnboarding = StatusOnboarding.Finalizado;

            _onboardingRepository.Update(onboarding);

            if (Commit())
            {
            }

            return(await Task.FromResult(true));
        }