示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
        }