Beispiel #1
0
        public void InserirMovimentoClienteRetroativo()
        {
            PersistenciaDB lDb = new PersistenciaDB();

            MovimentoCCSinacorResponse _movimentoCCSinacor;
            CompraETFResponse          _CompraETFResponse;
            ClienteMovCCRequest        _clienteMovCCRequest = new ClienteMovCCRequest();
            CustodiaValorizadaRequest  _CustodiaValorizadaRequest;


            decimal  ValorAplicacao  = 0;
            decimal  ValorCompra     = 0;
            decimal  ValorResquiso   = 0;
            decimal  ValorPrecoMedio = 0;
            DateTime dataTransacao   = DateTime.Now;

            AcessaDados _AcessaDados = new AcessaDados();

            _AcessaDados.ConnectionStringName = PersistenciaDB.ConexaoSQL;

            _AcessaDados.Conexao._ConnectionStringName = PersistenciaDB.ConexaoSQL;

            DbTransaction transacao;

            DbConnection ConnectionSql;

            ConnectionSql = _AcessaDados.Conexao.CreateIConnection();

            ConnectionSql.Open();

            transacao = ConnectionSql.BeginTransaction();


            try
            {
                ClienteProdutoResponse ClienteSemMovimentoMes = lDb.SelecionarClienteRentabilidadeRetroativa(48054, new DateTime(2011, 11, 25)); //seleciona os clientes do poupe direct com data de movimento para hoje
                DateTime dataInicioVencimento     = DateTime.MinValue;
                DateTime dataFimVencimento        = DateTime.MinValue;
                decimal  _CustoPapelHoje          = 0;
                decimal  _PercentualVariazao      = 0;
                decimal  _ValorPapelRentabilizado = 0;


                gLogger.InfoFormat("Quantidade de clientes com vencimento hoje - {0} .", ClienteSemMovimentoMes.ListaClienteProduto.Count);


                foreach (ClienteProdutoInfo clienteProduto in ClienteSemMovimentoMes.ListaClienteProduto)
                {
                    _movimentoCCSinacor = new MovimentoCCSinacorResponse();

                    dataFimVencimento    = clienteProduto.DtInicioTrocaPlano.Value.AddDays(-1);
                    dataInicioVencimento = clienteProduto.DtVencimento.Value.AddDays(-clienteProduto.QtdDiasVencimento);

                    _movimentoCCSinacor = lDb.SelecionarMovimentoCliente(clienteProduto.CodigoClientePoupe, dataInicioVencimento, dataFimVencimento);                              //Seleciona do SINACOR movimento do mes corrente

                    _CompraETFResponse = lDb.SelecionarMovimentoCompraETF(clienteProduto.CodigoClientePoupe, dataInicioVencimento, dataFimVencimento, clienteProduto.CodigoAtivo); //Seleciona a compra de ETFs

                    if (_movimentoCCSinacor.ListaMovimentoCCSinacor.Count > 0 && _CompraETFResponse.ListaCompraETF.Count > 0)
                    {
                        gLogger.InfoFormat("Usuário - {0} - vai ser rentabilizado.", clienteProduto.CodigoClientePoupe);

                        ValorAplicacao = _movimentoCCSinacor.ListaMovimentoCCSinacor[0].ValorLancamento;
                        ValorCompra    = _CompraETFResponse.ListaCompraETF[0].ValorLiquido < 0 ? _CompraETFResponse.ListaCompraETF[0].ValorLiquido * -1 : _CompraETFResponse.ListaCompraETF[0].ValorLiquido;
                        ValorResquiso  = ValorAplicacao - ValorCompra;

                        ValorResquiso = ValorAplicacao - ValorCompra;

                        ValorPrecoMedio = lDb.ObterPrecoMedio(clienteProduto.CodigoClientePoupe, dataInicioVencimento, dataFimVencimento, clienteProduto.CodigoAtivo);

                        _clienteMovCCRequest.ClienteMovCC = new ClienteMovCCInfo();


                        _clienteMovCCRequest.ClienteMovCC.CodigoClienteProduto = clienteProduto.CodigoClienteProduto;
                        _clienteMovCCRequest.ClienteMovCC.CodigoCliente        = clienteProduto.CodigoCliente;
                        _clienteMovCCRequest.ClienteMovCC.ValorAplicacao       = ValorAplicacao;
                        _clienteMovCCRequest.ClienteMovCC.ValorConsumido       = ValorCompra;
                        _clienteMovCCRequest.ClienteMovCC.ValorResquicio       = ValorResquiso;
                        _clienteMovCCRequest.ClienteMovCC.ValorCorretagem      = _CompraETFResponse.ListaCompraETF[0].ValorCorretagem;//tenho que definir de onde vem
                        _clienteMovCCRequest.ClienteMovCC.DtSistema            = DateTime.Now;
                        _clienteMovCCRequest.ClienteMovCC.DtTransacao          = _CompraETFResponse.ListaCompraETF[0].DataNegocio;
                        _clienteMovCCRequest.ClienteMovCC.DescMovCC            = "Movimento Sinacor para POUPE DIRECT";

                        lDb.InserirAtualizarClienteMovCC(_clienteMovCCRequest, transacao, _AcessaDados); //inseri na tabela tb_cliente_mov_cc

                        _CustodiaValorizadaRequest = new CustodiaValorizadaRequest();
                        _CustodiaValorizadaRequest.CustodiaValorizada = new CustodiaValorizadaInfo();

                        _CustoPapelHoje     = lDb.ObterPosicaoFechamentoCotacao(clienteProduto.CodigoAtivo);
                        _PercentualVariazao = ((_CustoPapelHoje - _CompraETFResponse.ListaCompraETF[0].ValorPapel) * 100) / _CompraETFResponse.ListaCompraETF[0].ValorPapel;


                        _ValorPapelRentabilizado = _CompraETFResponse.ListaCompraETF[0].QuantidadePapel * _CustoPapelHoje;


                        RentabilidadeInfo rentabilidade = lDb.RentabilizarCarteira(clienteProduto.CodigoCliente, clienteProduto.CodigoProduto, _ValorPapelRentabilizado, _PercentualVariazao);


                        _CustodiaValorizadaRequest.CustodiaValorizada.CodigoClienteProduto = clienteProduto.CodigoClienteProduto;
                        _CustodiaValorizadaRequest.CustodiaValorizada.CodigoCliente        = clienteProduto.CodigoCliente;
                        _CustodiaValorizadaRequest.CustodiaValorizada.CodigoProduto        = clienteProduto.CodigoProduto;
                        _CustodiaValorizadaRequest.CustodiaValorizada.ValorAplicacao       = ValorAplicacao;
                        _CustodiaValorizadaRequest.CustodiaValorizada.ValorConsumido       = ValorCompra;
                        _CustodiaValorizadaRequest.CustodiaValorizada.ValorResquicio       = ValorResquiso;
                        _CustodiaValorizadaRequest.CustodiaValorizada.ValorCarteira        = rentabilidade.ValorTotalCarteira + ValorResquiso;
                        _CustodiaValorizadaRequest.CustodiaValorizada.ValorCustoMedio      = ValorPrecoMedio;
                        _CustodiaValorizadaRequest.CustodiaValorizada.DtRentabilizacao     = DateTime.Now;
                        _CustodiaValorizadaRequest.CustodiaValorizada.QtdTitulos           = _CompraETFResponse.ListaCompraETF[0].QuantidadePapel;
                        _CustodiaValorizadaRequest.CustodiaValorizada.PercentVariacao      = rentabilidade.PercentVariacaoTotal;
                        _CustodiaValorizadaRequest.CustodiaValorizada.CodigoAtivo          = clienteProduto.CodigoAtivo;
                        _CustodiaValorizadaRequest.CustodiaValorizada.ValorAtivo           = _CompraETFResponse.ListaCompraETF[0].ValorPapel;

                        lDb.InserirAtualizarCustodiaValorizada(_CustodiaValorizadaRequest, transacao, _AcessaDados); //inseri na tabela TB_CUSTODIA_VALORIZADA
                    }



                    //zera as variáveis
                    ValorAplicacao = 0;
                    ValorCompra    = 0;
                    ValorResquiso  = 0;
                }

                transacao.Commit();
            }

            catch (Exception ex)
            {
                transacao.Rollback();
                gLogger.ErrorFormat("Erro ao Pegar o movimento do cliente para o poupe - {0} - StackTrace - {1}", ex.Message, ex.StackTrace);
            }
            finally
            {
                ConnectionSql.Close();
                ConnectionSql.Dispose();
                ConnectionSql = null;
                transacao     = null;
            }
        }
 public void Dispose()
 {
     _connectionSql.Dispose();
 }