/// <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)); } }
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()); } }
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); }
/// <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); }
/// <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); }
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); }
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); }
/// <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); }