public WsSPC.ResultadoConsulta Consultar(TipoPessoaResponse tipo, string documento, string codigoProduto) { TipoPessoa tipoPessoa = tipo == TipoPessoaResponse.PessoaFisica ? WsSPC.TipoPessoa.F : WsSPC.TipoPessoa.J; var binding = new System.ServiceModel.BasicHttpsBinding(); binding.MaxReceivedMessageSize = 65536 * 30; binding.Security.Transport.ClientCredentialType = System.ServiceModel.HttpClientCredentialType.Basic; var address = new System.ServiceModel.EndpointAddress(_url); using (var serv = new WsSPC.consultaWebServiceClient(binding, address)) { serv.ClientCredentials.UserName.UserName = _usuario; serv.ClientCredentials.UserName.Password = _senha; serv.Open(); var filtro = new WsSPC.FiltroConsulta { codigoproduto = codigoProduto, tipoconsumidor = tipoPessoa, tipoconsumidorSpecified = true, documentoconsumidor = documento }; try { return(serv.consultar(filtro)); } catch (Exception ex) { throw new Exception(ex.Message); } } }
public ConsultaSpcResponse ConsultarSPC( string tipoPessoaDocumento, string documento, string usuarioLogado, string hash) { if (tipoPessoaDocumento != "1" && tipoPessoaDocumento != "2" && tipoPessoaDocumento != "F" && tipoPessoaDocumento != "J") { return(RetornarErro("Tipo de Pessoa informado incorretamente. (1 - PJ | 2 - PF)")); } if (string.IsNullOrWhiteSpace(documento)) { return(RetornarErro("Número do Documento (CNPJ/CPF) não informado")); } if (string.IsNullOrWhiteSpace(usuarioLogado)) { return(RetornarErro("ID do usuário CRM não informado")); } if (hash != Config.Hash) { return(RetornarErro("Não autorizado (hash inválido)")); } documento = documento.RemoverCaracteresEspeciaisDocumento(); TipoPessoaResponse tipoPessoa = TipoPessoaResponse.PessoaFisica; if (tipoPessoaDocumento == "2" || tipoPessoaDocumento == "J") { tipoPessoa = TipoPessoaResponse.PessoaJuridica; } SPCService service = new SPCService(Parametros.WsSPCUrl, Parametros.WsSPCUsuario, Parametros.WsSPCSenha); ConsultaSpcResponse dadosConsulta = new ConsultaSpcResponse(); ContaRepositorio contaRepositorio = new ContaRepositorio(); AnaliseCreditoRepositorio analiseCreditoRepositorio = new AnaliseCreditoRepositorio(); ParametrosRepositorio parametrosRepositorio = new ParametrosRepositorio(); var parametros = parametrosRepositorio.ObterParametros(); var contaBusca = contaRepositorio.ObterContaPorDocumento(documento); if (contaBusca == null) { return(RetornarErro($"Conta com documento {documento} é inexistente")); } var resultadoSpc = service.Consultar(tipoPessoa, documento.RemoverCaracteresEspeciaisDocumento(), Parametros.WsSPCProduto); if (resultadoSpc == null) { return(RetornarErro($"Sem resposta da Consulta S")); } dadosConsulta.ContaId = contaBusca.Id; dadosConsulta.DataConsulta = DateTime.Now; dadosConsulta.Protocolo = $"{resultadoSpc.protocolo.numero}-{resultadoSpc.protocolo.digito}"; dadosConsulta.Restricao = resultadoSpc.restricao; if (resultadoSpc.consumidor?.consumidorpessoajuridica != null) { dadosConsulta.TipoPessoa = TipoPessoaResponse.PessoaJuridica; var consumidor = resultadoSpc.consumidor?.consumidorpessoajuridica; dadosConsulta.RazaoSocial = consumidor.razaosocial; dadosConsulta.Fundacao = consumidor.datafundacao; dadosConsulta.CNPJ = Convert.ToUInt64(consumidor.cnpj.numero).ToString(@"00\.000\.000\/0000\-00"); dadosConsulta.Atividade = consumidor.atividadeeconomicaprincipal?.descricao ?? string.Empty; dadosConsulta.Situacao = consumidor.situacaocnpj?.descricaosituacao ?? string.Empty; var endereco = consumidor?.endereco; if (endereco != null) { dadosConsulta.Logradouro = endereco.logradouro; dadosConsulta.Bairro = endereco.bairro; dadosConsulta.Cidade = endereco.cidade.nome; dadosConsulta.Estado = endereco.cidade.estado.siglauf; dadosConsulta.CEP = endereco.cep; } } if (resultadoSpc.consumidor?.consumidorpessoafisica != null) { dadosConsulta.TipoPessoa = TipoPessoaResponse.PessoaFisica; var consumidor = resultadoSpc.consumidor?.consumidorpessoafisica; /// <summary> dadosConsulta.Nome = consumidor.nome; dadosConsulta.DataNascimento = consumidor.datanascimento; dadosConsulta.CPF = Convert.ToUInt64(consumidor.cpf.numero).ToString(@"000\.000\.000\-00"); dadosConsulta.Situacao = consumidor.situacaocpf?.descricaosituacao ?? string.Empty; dadosConsulta.Nacionalidade = consumidor.nacionalidade?.nome ?? string.Empty; var endereco = consumidor?.endereco; if (endereco != null) { dadosConsulta.Logradouro = endereco.logradouro; dadosConsulta.Bairro = endereco.bairro; dadosConsulta.Cidade = endereco.cidade.nome; dadosConsulta.Estado = endereco.cidade.estado.siglauf; dadosConsulta.CEP = endereco.cep; } } if (resultadoSpc.protesto?.resumo != null) { var protesto = resultadoSpc.protesto?.resumo; dadosConsulta.ProtestoQuantidade = protesto.quantidadetotal; dadosConsulta.ProtestoData = protesto.dataultimaocorrencia; dadosConsulta.ProtestoValorTotal = protesto.valortotal; dadosConsulta.Quantidade += protesto.quantidadetotal; } if (resultadoSpc.acao?.resumo != null) { var acao = resultadoSpc.acao?.resumo; dadosConsulta.AcaoQuantidade = acao.quantidadetotal; dadosConsulta.AcaoData = acao.dataultimaocorrencia; dadosConsulta.AcaoValorTotal = acao.valortotal; dadosConsulta.Quantidade += acao.quantidadetotal; } if (resultadoSpc.pendenciafinanceira?.resumo != null) { var pendencia = resultadoSpc.pendenciafinanceira?.resumo; dadosConsulta.PendenciaFinancQuantidade = pendencia.quantidadetotal; dadosConsulta.PendenciaFinancData = pendencia.dataultimaocorrencia; dadosConsulta.PendenciaFinancValorTotal = pendencia.valortotal; dadosConsulta.Quantidade += pendencia.quantidadetotal; for (int i = 0; i < resultadoSpc.pendenciafinanceira?.Items?.Length; i++) { var item = (WsSPC.InsumoPendenciaFinanceira)resultadoSpc.pendenciafinanceira.Items[i]; var detalhe = new DetalhesPendenciaFinanceiraDTO(); detalhe.Titulo = item.tituloocorrencia; detalhe.Avalista = item.avalista; detalhe.Contrato = item.contrato; detalhe.Ocorrencia = item.dataocorrencia; detalhe.Filial = item.filial; detalhe.Origem = item.origem; detalhe.Moeda = item.moeda?.simbolo; detalhe.Natureza = item.naturezaanotacao?.descricaonaturezaanotacao; detalhe.Cidade = item.cidade?.nome; detalhe.UF = item.cidade?.estado?.siglauf; detalhe.Valor = item.valorpendencia; dadosConsulta.DetalhesPendenciasFinanceiras.Add(detalhe); } } if (resultadoSpc.participacaofalencia?.resumo != null) { var participacaofalencia = resultadoSpc.participacaofalencia?.resumo; dadosConsulta.ParticipFalenciaQuantidade = participacaofalencia.quantidadetotal; dadosConsulta.ParticipFalenciaData = participacaofalencia.dataultimaocorrencia; dadosConsulta.ParticipFalenciaValorTotal = participacaofalencia.valortotal; dadosConsulta.Quantidade += participacaofalencia.quantidadetotal; } if (resultadoSpc.spc?.resumo != null) { var spc = resultadoSpc.spc?.resumo; dadosConsulta.SpcQuantidade = spc.quantidadetotal; dadosConsulta.SpcData = spc.dataultimaocorrencia; dadosConsulta.SpcValorTotal = spc.valortotal; dadosConsulta.Quantidade += spc.quantidadetotal; for (int i = 0; i < resultadoSpc.spc?.Items?.Length; i++) { var item = (WsSPC.InsumoSPC)resultadoSpc.spc.Items[i]; var detalhe = new DetalhesSpcDTO(); detalhe.Associado = item.nomeassociado; detalhe.Contrato = item.contrato; detalhe.Entidade = item.nomeentidade; detalhe.Inclusao = item.datainclusao; detalhe.Vencimento = item.datavencimento; detalhe.Valor = item.valor; dadosConsulta.DetalhesSpc.Add(detalhe); } } if (resultadoSpc.chequesemfundovarejo?.resumo != null) { var chequeSemFundoVarejo = resultadoSpc.chequesemfundovarejo?.resumo; dadosConsulta.ChequeSFQuantidade = chequeSemFundoVarejo.quantidadetotal; dadosConsulta.ChequeSFData = chequeSemFundoVarejo.dataultimaocorrencia; dadosConsulta.ChequeSFValorTotal = chequeSemFundoVarejo.valortotal; dadosConsulta.Quantidade += chequeSemFundoVarejo.quantidadetotal; } if (resultadoSpc.ccf?.resumo != null) { var ChequeSemFundoCCF = resultadoSpc.ccf?.resumo; dadosConsulta.ChequeSFCCFQuantidade = ChequeSemFundoCCF.quantidadetotal; dadosConsulta.ChequeSFCCFData = ChequeSemFundoCCF.dataultimaocorrencia; dadosConsulta.ChequeSFCCFValorTotal = ChequeSemFundoCCF.valortotal; dadosConsulta.Quantidade += ChequeSemFundoCCF.quantidadetotal; for (int i = 0; i < resultadoSpc.ccf?.Items?.Length; i++) { var item = (WsSPC.InsumoCCF)resultadoSpc.ccf.Items[i]; var detalhe = new CCFDetalhesDTO(); detalhe.Origem = item.origem; detalhe.DataUltimoCheque = item.dataultimocheque; detalhe.Quantidade = item.quantidade; detalhe.Motivo = item.motivo?.descricao; dadosConsulta.DetalhesCCF.Add(detalhe); } } if (resultadoSpc.chequelojista?.resumo != null) { var chequelojista = resultadoSpc.chequelojista?.resumo; dadosConsulta.ChequeLojistaQuantidade = chequelojista.quantidadetotal; dadosConsulta.ChequeLojistaData = chequelojista.dataultimaocorrencia; dadosConsulta.ChequeLojistaValorTotal = chequelojista.valortotal; dadosConsulta.Quantidade += chequelojista.quantidadetotal; for (int i = 0; i < resultadoSpc.chequelojista?.Items?.Length; i++) { var item = (WsSPC.InsumoChequeLojista)resultadoSpc.chequelojista.Items[i]; var detalhe = new DetalhesChequeLojistaDTO(); detalhe.Associado = item.nomeassociado; detalhe.Entidade = item.nomeentidade; detalhe.Inclusao = item.datainclusao; detalhe.Descricao = item.alinea?.descricao; detalhe.ChequeEmissao = item.chequeinicial?.dataemissao; detalhe.ChequeValor = item.chequeinicial?.valor; detalhe.CidadeAssociado = item.cidadeassociado?.nome; dadosConsulta.DetalhesChequesLojistas.Add(detalhe); } } if (resultadoSpc.chequeoutrasocorrenciassrs?.resumo != null) { var chequeOutrasOcorrencias = resultadoSpc.chequeoutrasocorrenciassrs?.resumo; dadosConsulta.ChequeCOOutrasQuantidade = chequeOutrasOcorrencias.quantidadetotal; dadosConsulta.ChequeCOOutrasData = chequeOutrasOcorrencias.dataultimaocorrencia; dadosConsulta.ChequeCOOutrasValorTotal = chequeOutrasOcorrencias.valortotal; dadosConsulta.Quantidade += chequeOutrasOcorrencias.quantidadetotal; } if (resultadoSpc.consultarealizada?.resumo != null) { var consultaRealizada = resultadoSpc.consultarealizada?.resumo; dadosConsulta.ConsultaRealizadaQuantidade = consultaRealizada.quantidadetotal; dadosConsulta.ConsultaRealizadaData = consultaRealizada.dataultimaocorrencia; dadosConsulta.ConsultaRealizadaValorTotal = consultaRealizada.valortotal; dadosConsulta.Quantidade += consultaRealizada.quantidadetotal; for (int i = 0; i < resultadoSpc.consultarealizada?.Items?.Length; i++) { var item = (WsSPC.InsumoConsultaRealizada)resultadoSpc.consultarealizada.Items[i]; var detalhe = new ConsultaRealizadaDTO(); detalhe.Associado = item.nomeassociado; detalhe.DataConsulta = item.dataconsulta; detalhe.Entidade = item.nomeentidadeorigem; detalhe.Cidade = item.origemassociado?.nome; detalhe.Estado = item.origemassociado?.estado?.siglauf; dadosConsulta.DetalhesConsultasRealizadas.Add(detalhe); } } if (resultadoSpc.alertadocumento?.resumo != null) { var alertaDocumento = resultadoSpc.alertadocumento?.resumo; dadosConsulta.AlertaDocQuantidade = alertaDocumento.quantidadetotal; dadosConsulta.AlertaDocData = alertaDocumento.dataultimaocorrencia; dadosConsulta.AlertaDocValorTotal = alertaDocumento.valortotal; dadosConsulta.Quantidade += alertaDocumento.quantidadetotal; for (int i = 0; i < resultadoSpc.alertadocumento?.Items?.Length; i++) { var item = (WsSPC.InsumoAlertaDocumento)resultadoSpc.alertadocumento.Items[i]; var detalhe = new AlertaDocumentosDTO(); detalhe.Inclusao = item.datainclusao; detalhe.Ocorrencia = item.dataocorrencia; detalhe.Entidade = item.entidadeorigem; detalhe.Motivo = item.motivo; if (item.tipodocumentoalerta?.Length > 0) { detalhe.Tipos = string.Join(",", item.tipodocumentoalerta.Select(c => c.nome)); } dadosConsulta.DetalhesAlertasDocumentos.Add(detalhe); } } if (resultadoSpc.creditoconcedido?.resumo != null) { var creditoConcedido = resultadoSpc.creditoconcedido?.resumo; dadosConsulta.CreditoConcQuantidade = creditoConcedido.quantidadetotal; dadosConsulta.CreditoConcData = creditoConcedido.dataultimaocorrencia; dadosConsulta.CreditoConcValorTotal = creditoConcedido.valortotal; dadosConsulta.Quantidade += creditoConcedido.quantidadetotal; } if (resultadoSpc.contraordem?.resumo != null) { var contraordem = resultadoSpc.contraordem?.resumo; dadosConsulta.ContraOrdemQuantidade = contraordem.quantidadetotal; dadosConsulta.ContraOrdemData = contraordem.dataultimaocorrencia; dadosConsulta.ContraOrdemValorTotal = contraordem.valortotal; dadosConsulta.Quantidade += contraordem.quantidadetotal; } if (resultadoSpc.contraordemdocumentodiferente?.resumo != null) { var contraordemDoc = resultadoSpc.contraordemdocumentodiferente?.resumo; dadosConsulta.ContraOrdemDFQuantidade = contraordemDoc.quantidadetotal; dadosConsulta.ContraOrdemDFData = contraordemDoc.dataultimaocorrencia; dadosConsulta.ContraOrdemDFValorTotal = contraordemDoc.valortotal; dadosConsulta.Quantidade += contraordemDoc.quantidadetotal; for (int i = 0; i < resultadoSpc.contraordemdocumentodiferente?.Items?.Length; i++) { var item = (WsSPC.InsumoContraOrdemDocumentoDiferente)resultadoSpc.contraordemdocumentodiferente.Items[i]; var detalhe = new ContraOrdemDocumentoDiferenteDTO(); detalhe.Documento = item.documento; detalhe.Inclusao = item.datainclusao; detalhe.Ocorrencia = item.dataocorrencia; detalhe.Origem = item.origem; detalhe.Informante = item.informante; detalhe.Descricao = item.motivo?.descricao; dadosConsulta.DetalhesContraOrdemDocumentoDiferente.Add(detalhe); } } dadosConsulta.UsuarioId = Convert.ToInt32(usuarioLogado); bool fluxoAprovacao = true; var pendenciasFinanceiras = analiseCreditoRepositorio .ObterPendenciasFinanceiras(contaBusca.Documento.RemoverCaracteresEspeciaisDocumento()); dadosConsulta.TotalDividaEcoporto = pendenciasFinanceiras.Sum(c => c.Valor); dadosConsulta.InadimplenteEcoporto = dadosConsulta.TotalDividaEcoporto > 0; dadosConsulta.TotalDividaSpc = ObterTotalDividaSpc(resultadoSpc); dadosConsulta.InadimplenteSpc = dadosConsulta.TotalDividaSpc > parametros.DividaSpc; if (dadosConsulta.TotalDividaSpc < parametros.DividaSpc) { dadosConsulta.Validade = DateTime.Now.AddYears(1); } if (dadosConsulta.TotalDividaSpc > parametros.DividaSpc && fluxoAprovacao == false) { dadosConsulta.Validade = DateTime.Now.AddMonths(3); } if (dadosConsulta.TotalDividaSpc > parametros.DividaSpc && fluxoAprovacao == true) { dadosConsulta.Validade = DateTime.Now.AddYears(1); } var contasRaizCnpj = contaRepositorio .ObterContasPorRaizDocumento(contaBusca.Documento.RemoverCaracteresEspeciaisDocumento()); dadosConsulta.StatusAnaliseDeCredito = StatusAnaliseDeCreditoResponse.PENDENTE; if ((dadosConsulta.TotalDividaSpc <= parametros.DividaSpc) && (dadosConsulta.TotalDividaEcoporto == 0)) { dadosConsulta.StatusAnaliseDeCredito = StatusAnaliseDeCreditoResponse.APROVADO; } analiseCreditoRepositorio.GravarConsultaSpc(dadosConsulta, contasRaizCnpj); return(dadosConsulta); }