Ejemplo n.º 1
0
        /// <summary>
        /// Obtem o saldo de conta margem do cliente
        /// </summary>
        /// <param name="IdCliente">Código do cliente</param>
        /// <returns>Saldo em conta margem do cliente</returns>
        private Nullable <decimal> ObtemSaldoContaMargem(int IdCliente)
        {
            AcessaDados lAcessaDados = new AcessaDados();
            SaldoContaCorrenteResponse <ContaCorrenteInfo> _SaldoContaCorrente = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();

            try
            {
                lAcessaDados.ConnectionStringName = gNomeConexaoContaMargem;

                using (DbCommand lDbCommand = lAcessaDados.CreateCommand(CommandType.StoredProcedure, "prc_sel_cliente_contamargem"))
                {
                    lAcessaDados.AddInParameter(lDbCommand, "IdCliente", DbType.AnsiString, IdCliente);

                    DataTable lDataTable =
                        lAcessaDados.ExecuteOracleDataTable(lDbCommand);

                    if (null != lDataTable && lDataTable.Rows.Count > 0)
                    {
                        return((lDataTable.Rows[0]["VL_LIMITE"]).DBToDecimal());
                    }
                    else
                    {
                        return(0);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Ocorreu um erro ao acessar a Conta margem do cliente: {0} Erro: {1}", IdCliente.ToString(), ex.StackTrace));
            }
        }
Ejemplo n.º 2
0
        private ContaCorrenteInfo BuscarSaldoEmContaNoServico(int pCodigoCliente)
        {
            var lRetorno = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();

            lRetorno = new ServicoContaCorrente().ObterSaldoContaCorrente(new SaldoContaCorrenteRequest()
            {
                IdCliente = pCodigoCliente
            });

            if (CriticaMensagemEnum.OK.Equals(lRetorno.StatusResposta))
            {
                return(lRetorno.Objeto);
            }
            else
            {
                return(new ContaCorrenteInfo());
            }
        }
Ejemplo n.º 3
0
        public ValidarContaCorrenteResponse ObterSaldoContaCorrente(ValidarContaCorrenteRequest request)
        {
            SaldoContaCorrenteRequest    requestSaldoContaCorrente = new SaldoContaCorrenteRequest();
            ValidarContaCorrenteResponse response = new ValidarContaCorrenteResponse();

            requestSaldoContaCorrente.IdCliente = request.IdCliente;


            try
            {
                IServicoContaCorrente servico = Ativador.Get <IServicoContaCorrente>();

                SaldoContaCorrenteResponse <ContaCorrenteInfo> responseSaldoContaCorrente = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();
                responseSaldoContaCorrente = servico.ObterSaldoContaCorrente(requestSaldoContaCorrente);

                response.SaldoD0          = responseSaldoContaCorrente.Objeto.SaldoD0;
                response.SaldoD1          = responseSaldoContaCorrente.Objeto.SaldoD1;
                response.SaldoD2          = responseSaldoContaCorrente.Objeto.SaldoD2;
                response.SaldoD3          = responseSaldoContaCorrente.Objeto.SaldoD3;
                response.SaldoContaMargem = responseSaldoContaCorrente.Objeto.SaldoContaMargem;
                response.SaldoBloqueado   = responseSaldoContaCorrente.Objeto.SaldoBloqueado;

                response.SaldoProjetado = ((
                                               response.SaldoD0 +
                                               response.SaldoD1 +
                                               response.SaldoD2 +
                                               response.SaldoD3) +
                                           (decimal.Parse(response.SaldoContaMargem.ToString())) +
                                           (decimal.Parse(response.SaldoBloqueado.ToString())));


                response.DataResposta      = DateTime.Now;
                response.CriticaResposta   = StatusRespostaEnum.Sucesso;
                response.DescricaoResposta = "Saldos carregados com sucesso.";
            }
            catch (Exception ex)
            {
                response.DataResposta      = DateTime.Now;
                response.CriticaResposta   = StatusRespostaEnum.ErroPrograma;
                response.Exception         = ex;
                response.DescricaoResposta = ex.Message;
            }
            return(response);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Obtem o saldo em conta corrente do cliente
        /// </summary>
        /// <param name="pParametro">Objeto com parametros do cliente</param>
        /// <returns>Objeto SaldoContaCorrenteResponse com as informacoes de saldo em conta corrente do cliente </returns>
        public SaldoContaCorrenteResponse <ContaCorrenteInfo> ObterSaldoContaCorrente(SaldoContaCorrenteRequest pParametro)
        {
            AcessaDados lAcessaDados = new AcessaDados();
            SaldoContaCorrenteResponse <ContaCorrenteInfo> _SaldoContaCorrente = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();

            try
            {
                ContaCorrenteInfo lRetorno = new ContaCorrenteInfo();
                lAcessaDados.ConnectionStringName = gNomeConexao;

                using (DbCommand lDbCommand = lAcessaDados.CreateCommand(CommandType.StoredProcedure, "pccsaldoprojetado"))
                {
                    lAcessaDados.AddInParameter(lDbCommand, "PCODCLIENTE", DbType.AnsiString, pParametro.IdCliente.DBToString());

                    lAcessaDados.AddOutParameter(lDbCommand, "PSALDO", DbType.Decimal, 12);
                    lAcessaDados.AddOutParameter(lDbCommand, "PD1", DbType.Decimal, 12);
                    lAcessaDados.AddOutParameter(lDbCommand, "PD2", DbType.Decimal, 12);
                    lAcessaDados.AddOutParameter(lDbCommand, "PD3", DbType.Decimal, 12);

                    lAcessaDados.ExecuteNonQuery(lDbCommand);

                    lRetorno.SaldoD0          = lAcessaDados.GetParameterValue(lDbCommand, "PSALDO").DBToDecimal();
                    lRetorno.SaldoD1          = lAcessaDados.GetParameterValue(lDbCommand, "PD1").DBToDecimal();
                    lRetorno.SaldoD2          = lAcessaDados.GetParameterValue(lDbCommand, "PD2").DBToDecimal();
                    lRetorno.SaldoD3          = lAcessaDados.GetParameterValue(lDbCommand, "PD3").DBToDecimal();
                    lRetorno.SaldoContaMargem = this.ObtemSaldoContaMargem(pParametro.IdCliente);

                    _SaldoContaCorrente.Objeto            = lRetorno;
                    _SaldoContaCorrente.DescricaoResposta = string.Format("Saldo de conta corrente do cliente: {0} carregado com sucesso", pParametro.IdCliente.DBToString());
                    _SaldoContaCorrente.StatusResposta    = CriticaMensagemEnum.OK;
                }
            }
            catch (Exception ex)
            {
                _SaldoContaCorrente.DescricaoResposta = ex.Message;
                _SaldoContaCorrente.StackTrace        = ex.StackTrace;
                _SaldoContaCorrente.StatusResposta    = CriticaMensagemEnum.Exception;
                _SaldoContaCorrente.Objeto            = null;
            }

            return(_SaldoContaCorrente);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Obtem o saldo de conta corrente do cliente { D0,D1,D2,D3,CM }
        /// </summary>
        /// <param name="pParametro"> Código do cliente</param>
        /// <returns> Objeto de conta corrente populado</returns>
        public SaldoContaCorrenteResponse <ContaCorrenteInfo> ObterSaldoContaCorrente(SaldoContaCorrenteRequest pParametro)
        {
            gLogger.Debug("Inicio ObterSaldoContaCorrente()");

            SaldoContaCorrenteResponse <ContaCorrenteInfo> response = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();

            try
            {
                response = new PersistenciaContaCorrente().ObterSaldoContaCorrente(pParametro);
            }
            catch (Exception ex)
            {
                response.DataResposta   = DateTime.Now;
                response.StackTrace     = ex.StackTrace;
                response.StatusResposta = Lib.Enum.CriticaMensagemEnum.Exception;
                gLogger.Error(string.Concat("ObterSaldoContaCorrente():", ex.Message), ex);
            }

            return(response);
        }
Ejemplo n.º 6
0
        private TransporteSaldoDeConta BuscarSaldoEmContaNoServico()
        {
            TransporteSaldoDeConta lRetorno = new TransporteSaldoDeConta();

            try
            {
                IServicoContaCorrente servicoCC = this.InstanciarServico <IServicoContaCorrente>();
                SaldoContaCorrenteResponse <ContaCorrenteInfo> resCC = servicoCC.ObterSaldoContaCorrente(new SaldoContaCorrenteRequest()
                {
                    IdCliente = this.GetCodigoBovespa
                });

                SaldoContaCorrenteResponse <ContaCorrenteBMFInfo> resBMF = servicoCC.ObterSaldoContaCorrenteBMF(new SaldoContaCorrenteRequest()
                {
                    IdCliente = this.GetCodigoBMF
                });

                if (resCC.StatusResposta == OMS.ContaCorrente.Lib.Enum.CriticaMensagemEnum.OK && resBMF.StatusResposta != OMS.ContaCorrente.Lib.Enum.CriticaMensagemEnum.OK)
                {
                    lRetorno = new TransporteSaldoDeConta(resCC.Objeto);
                }
                else if (resCC.StatusResposta != OMS.ContaCorrente.Lib.Enum.CriticaMensagemEnum.OK && resBMF.StatusResposta == OMS.ContaCorrente.Lib.Enum.CriticaMensagemEnum.OK)
                {
                    lRetorno = new TransporteSaldoDeConta(resBMF.Objeto);
                }
                else if (resCC.StatusResposta == OMS.ContaCorrente.Lib.Enum.CriticaMensagemEnum.OK && resBMF.StatusResposta == OMS.ContaCorrente.Lib.Enum.CriticaMensagemEnum.OK)
                {
                    lRetorno = new TransporteSaldoDeConta(resCC.Objeto, resBMF.Objeto);
                }
                else
                {
                    gLogger.Error(string.Format("Erro: {0}\r\n{1}", resCC.StatusResposta, resCC.DescricaoResposta));
                }
            }
            catch (Exception ex)
            {
                gLogger.Error(string.Format("Erro: {0}\r\n{1}", ex.Message, ex.StackTrace));
            }

            return(lRetorno);
        }
Ejemplo n.º 7
0
        private AdesaoClienteResponse CalcularRiscoCliente(AdesaoClienteRequest request)
        {
            AdesaoClienteResponse response = new AdesaoClienteResponse();
            decimal saldoProjetado         = 0;
            decimal saldoCustodia          = 0;
            decimal valorCarteira          = 0;

            // Obtendo saldo projetado do cliente
            SaldoContaCorrenteResponse <ContaCorrenteInfo> responseSaldo = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();

            try
            {
                SaldoContaCorrenteRequest requestSaldoContaCorrente = new SaldoContaCorrenteRequest();
                requestSaldoContaCorrente.IdCliente = request.IdCliente;

                IServicoContaCorrente servico = Ativador.Get <IServicoContaCorrente>();

                responseSaldo = servico.ObterSaldoContaCorrente(requestSaldoContaCorrente);

                saldoProjetado = ((
                                      responseSaldo.Objeto.SaldoD0 +
                                      responseSaldo.Objeto.SaldoD1 +
                                      responseSaldo.Objeto.SaldoD2 +
                                      responseSaldo.Objeto.SaldoD3) +
                                  (decimal.Parse(responseSaldo.Objeto.SaldoContaMargem.ToString())) +
                                  (decimal.Parse(responseSaldo.Objeto.SaldoBloqueado.ToString())));
            }
            catch (Exception ex)
            {
                response.DataResposta      = DateTime.Now;
                response.bSucesso          = false;
                response.CriticaResposta   = StatusRespostaEnum.ErroPrograma;
                response.Exception         = ex;
                response.DescricaoResposta = ex.Message;
                return(response);
            }

            // Obtendo saldo da custódia do cliente
            string listaCustodia = "";

            try
            {
                SaldoCustodiaRequest requestCustodia = new SaldoCustodiaRequest();
                requestCustodia.IdCliente = request.IdCliente;

                IServicoCustodia servico = Ativador.Get <IServicoCustodia>();
                SaldoCustodiaResponse <CustodiaClienteInfo> responseCustodia = servico.ObterSaldoCustodiaClienteIntranet(requestCustodia);

                foreach (CustodiaClienteInfo custodia in responseCustodia.ColecaoObjeto)
                {
                    decimal ultimaCotacao = ObterUltimaCotacao(custodia.CodigoInstrumento);
                    if (ultimaCotacao != 0)
                    {
                        saldoCustodia += (custodia.QtdeDisponivel * ultimaCotacao);
                        listaCustodia += custodia.CodigoInstrumento + "(" + custodia.QtdeDisponivel + "*" + ultimaCotacao + ") ";
                    }
                    else
                    {
                        saldoCustodia += Convert.ToDecimal(custodia.ValorPosicao);
                        listaCustodia += custodia.CodigoInstrumento + "(" + custodia.ValorPosicao + ") ";
                    }
                }
            }
            catch (Exception ex)
            {
                response.DataResposta      = DateTime.Now;
                response.bSucesso          = false;
                response.CriticaResposta   = StatusRespostaEnum.ErroPrograma;
                response.Exception         = ex;
                response.DescricaoResposta = ex.Message;
                return(response);
            }

            // Obtendo valor total da composicao da carteira recomendada
            string listaCarteira = "";

            try
            {
                ListarComposicaoRequest requestComposicao = new ListarComposicaoRequest();
                requestComposicao.idProduto = request.IdProduto;

                ListarComposicaoResponse responseComposicao = SolicitarListaComposicao(requestComposicao);

                foreach (CarteiraRecomendadaComposicaoInfo composicao in responseComposicao.listaComposicao)
                {
                    decimal ultimaCotacao = ObterUltimaCotacao(composicao.IdAtivo);
                    valorCarteira += (composicao.Quantidade * ultimaCotacao);

                    listaCarteira += composicao.IdAtivo + "(" + composicao.Quantidade + "*" + ultimaCotacao + ") ";
                }
            }
            catch (Exception ex)
            {
                response.DataResposta      = DateTime.Now;
                response.bSucesso          = false;
                response.CriticaResposta   = StatusRespostaEnum.ErroPrograma;
                response.Exception         = ex;
                response.DescricaoResposta = ex.Message;
                return(response);
            }


            logger.Debug("Saldo Projetado: " + saldoProjetado + " (" +
                         responseSaldo.Objeto.SaldoD0 + " + " +
                         responseSaldo.Objeto.SaldoD1 + " + " +
                         responseSaldo.Objeto.SaldoD2 + " + " +
                         responseSaldo.Objeto.SaldoD3 + " + " +
                         responseSaldo.Objeto.SaldoContaMargem.ToString() + " + " +
                         responseSaldo.Objeto.SaldoBloqueado.ToString() + ")");
            logger.Debug("Saldo Custodia: " + saldoCustodia + " (" + listaCustodia + ")");
            logger.Debug("Valor Carteira: " + valorCarteira + " (" + listaCarteira + ")");

            // Verifica o risco do cliente
            if (saldoCustodia + saldoProjetado < valorCarteira)
            {
                response.DataResposta      = DateTime.Now;
                response.bSucesso          = false;
                response.CriticaResposta   = StatusRespostaEnum.ErroNegocio;
                response.DescricaoResposta = "Cliente não possui saldo suficiente para adesão à Carteira Recomendada solicitada.";
                logger.Debug("Cliente não possui saldo suficiente para adesão à Carteira Recomendada solicitada");
            }
            else
            {
                response.DataResposta      = DateTime.Now;
                response.bSucesso          = true;
                response.CriticaResposta   = StatusRespostaEnum.Sucesso;
                response.DescricaoResposta = SUCESSO;
            }

            return(response);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Obtém o saldo do cliente para D+0, D+1, D+2, D+3 e Conta Margem. Filtragem por CPF/CNPJ, CdAcessor, CdCliente [Sinacor] e posição de saldo.
        /// </summary>
        /// <returns>Lista com posição dos clientes selecionados.</returns>
        public SaldoContaCorrenteResponse <ContaCorrenteInfo> ObterSaldoProjetadoContaCorrente(SaldoContaCorrenteRequest pParametro)
        {
            var lRetorno        = new SaldoContaCorrenteResponse <ContaCorrenteInfo>();
            var lStringConsulta = new StringBuilder();

            try
            {
                using (DataTable lDataTablePosicao = new DataTable())
                {
                    lock (lDataTablePosicao)
                    {
                        lDataTablePosicao.ReadXmlSchema(gCaminhoNomeSchema);
                        lDataTablePosicao.ReadXml(gCaminhoNomeXML);

                        {   //--> Montagem da consulta ao xml
                            if (!0.Equals(pParametro.IdCliente))
                            {
                                lStringConsulta.AppendFormat(" AND CD_CLIENTE = {0}", pParametro.IdCliente.DBToString());
                            }

                            if (null != pParametro.ConsultaIdAssessor)
                            {
                                lStringConsulta.AppendFormat(" AND CD_ASSESSOR = {0}", pParametro.ConsultaIdAssessor.Value.DBToString());
                            }

                            if (null != pParametro.ConsultaClientesCpfCnpj && pParametro.ConsultaClientesCpfCnpj.Count > 0)
                            {
                                lStringConsulta.Append(" AND CD_CPFCGC IN (");

                                pParametro.ConsultaClientesCpfCnpj.ForEach(delegate(string cpfCnpj) { lStringConsulta.Append(string.Concat(cpfCnpj.Trim().Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", ""), ", ")); });

                                lStringConsulta.Replace(',', ')', lStringConsulta.Length - 2, 1);
                            }

                            if (pParametro.ConsultaPosicaoD0)
                            {
                                lStringConsulta.AppendFormat(" AND D0 < 0");
                            }

                            if (pParametro.ConsultaPosicaoD1)
                            {
                                lStringConsulta.AppendFormat(" AND D1 < 0");
                            }

                            if (pParametro.ConsultaPosicaoD2)
                            {
                                lStringConsulta.AppendFormat(" AND D2 < 0");
                            }

                            if (pParametro.ConsultaPosicaoD3)
                            {
                                lStringConsulta.AppendFormat(" AND D3 < 0");
                            }

                            if (pParametro.ConsultaContaMargem)
                            {
                                lStringConsulta.AppendFormat(" AND CM < 0");
                            }
                        }

                        var lResultadoConsulta = lDataTablePosicao.Select(lStringConsulta.ToString().Trim().StartsWith("AND") ? lStringConsulta.ToString().Remove(0, 5) : string.Empty);

                        lDataTablePosicao.Dispose();

                        if (null != lResultadoConsulta)
                        {
                            for (int i = 0; i < lResultadoConsulta.Length; i++)
                            {
                                lRetorno.ObjetoLista.Add(this.CarregarContaCorrenteInfo(lResultadoConsulta[i]));
                            }
                        }

                        lRetorno.StatusResposta = CriticaMensagemEnum.OK;
                    }
                }
            }
            catch (Exception ex)
            {
                gLog.Error("Erro ao processar consulda de Conta Corrente Projetada", ex);
                lRetorno.DescricaoResposta = ex.Message + " - " + System.IO.Directory.GetCurrentDirectory();
                lRetorno.StackTrace        = ex.StackTrace;
                lRetorno.StatusResposta    = CriticaMensagemEnum.Exception;
                lRetorno.Objeto            = null;
            }

            return(lRetorno);
        }