public IHttpActionResult Put(int idPessoa, [FromBody] HistoricoInvestido value)
        {
            try
            {
                Carteira carteira    = new Carteira();
                double   valorCripto = new Negocio().ConverterRealParaCripto(value.ValorInvestido, value._carteira.TipoMoeda);
                carteira._pessoa          = new Pessoa();
                carteira._pessoa.IdPessoa = idPessoa;
                carteira.IdCarteira       = value._carteira.IdCarteira;
                carteira.TipoMoeda        = value._carteira.TipoMoeda;
                CarteiraCrud carteiraCrud   = new CarteiraCrud();
                var          carteiraAntiga = carteiraCrud.ConsultarPorIdPessoaANDTMoeda(carteira);
                carteira.Saldo = carteiraAntiga.Saldo + valorCripto;

                HistoricoCarteira  historicoCarteira  = new HistoricoCarteira(value._carteira, DateTime.Now, value.ValorInvestido, "Resgate Investimento");
                HistoricoInvestido historicoInvestido = new HistoricoInvestido(value._carteira, DateTime.Now);

                carteiraCrud.Alterar(carteira);
                new HistoricoCarteiraCrud().InserirResgateInvestimento(historicoCarteira);
                new HistoricoInvestidoCrud().ResgatarInvestimento(historicoInvestido);

                return(Ok(idPessoa));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public IHttpActionResult Post([FromBody] HistoricoInvestido value)
        {
            try
            {
                HistoricoCarteiraCrud  historicoCarteiraCrud  = new HistoricoCarteiraCrud();
                HistoricoInvestidoCrud historicoInvestidoCrud = new HistoricoInvestidoCrud();
                CarteiraCrud           carteiraCrud           = new CarteiraCrud();
                value._carteira = carteiraCrud.ConsultarPorIdPessoaANDTMoeda(value._carteira);

                value.DtInicio = DateTime.Now;

                double valorEmReais = value.ValorInvestido;
                value.ValorInvestido  = new Negocio().ConverterRealParaCripto(value.ValorInvestido, value._carteira.TipoMoeda);
                value._carteira.Saldo = value._carteira.Saldo - value.ValorInvestido;
                if (value._carteira.Saldo < 0)
                {
                    value._carteira.Saldo = value._carteira.Saldo + value.ValorInvestido;
                    value._carteira.Saldo = new Negocio().ConverterCriptoParaReal(value._carteira.Saldo, value._carteira.TipoMoeda);
                    HttpResponseMessage response = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest,
                                                                                    "Saldo Insuficiente! Saldo atual desta moeda: R$" + value._carteira.Saldo.ToString("N2"));
                    throw new HttpResponseException(response);
                }

                HistoricoCarteira historicoCarteira = new HistoricoCarteira(value._carteira, value.DtInicio, valorEmReais, "Investimento");

                carteiraCrud.Alterar(value._carteira);
                historicoCarteiraCrud.InserirInvestimento(historicoCarteira);
                String retorno = historicoInvestidoCrud.Inserir(value);
                return(Ok(retorno));
            }
            catch (Exception)
            {
                throw;
            }
        }
        public string ResgatarInvestimento(HistoricoInvestido historicoInvestido)
        {
            try
            {
                acessoDados.LimparParametros();
                acessoDados.AdicionarParametros("@dtNow", historicoInvestido.DtFim);
                acessoDados.AdicionarParametros("@idCarteira", historicoInvestido._carteira.IdCarteira);
                string retornoHistorico = acessoDados.ExecutarManipulacao(CommandType.Text, "BEGIN " +
                                                                          "UPDATE HistoricoInvestido " +
                                                                          "SET DtFim=@dtNow " +
                                                                          "WHERE IdCarteira = @idCarteira " +
                                                                          "SELECT @idCarteira AS RETORNO END").ToString();

                return(retornoHistorico);
            }
            catch (Exception exception)
            {
                return(exception.Message);
            }
        }
        public List <HistoricoInvestido> ConsultarDisponivelOrRetido(Carteira carteiraEth, Carteira carteiraBtc, DateTime dtInicio, DateTime dtFim)
        {
            try
            {
                //Criar uma nova coleção de clientes
                List <HistoricoInvestido> ListInvestido = new List <HistoricoInvestido>();
                acessoDados.LimparParametros();
                acessoDados.AdicionarParametros("@IdCarteiraEth", carteiraEth.IdCarteira);
                acessoDados.AdicionarParametros("@IdCarteiraBtc", carteiraBtc.IdCarteira);
                acessoDados.AdicionarParametros("@dtInicio", dtInicio);
                acessoDados.AdicionarParametros("@dtFim", dtFim);
                //Retornará uma DataTable
                DataTable dataTable = acessoDados.ExecutarConsulta(CommandType.Text, "SELECT * " +
                                                                   "FROM HistoricoInvestido AS h INNER JOIN Carteira as c ON h.IdCarteira=c.IdCarteira " +
                                                                   "WHERE (h.IdCarteira IN (@IdCarteiraEth,@IdCarteiraBtc)) " +
                                                                   "AND (DtInicio BETWEEN @dtInicio AND @dtFim) AND (dtFim IS NULL) ORDER BY DtInicio DESC");

                foreach (DataRow linha in dataTable.Rows)
                {
                    HistoricoInvestido historicoInvestido = new HistoricoInvestido();
                    historicoInvestido.DtInicio = Convert.ToDateTime(linha["DtInicio"]);
                    historicoInvestido.IdHistoricoInvestimento = Convert.ToInt32(linha["IdHistoricoInvestimento"]);
                    historicoInvestido.ValorInvestido          = Convert.ToDouble(linha["ValorInvestido"]);
                    historicoInvestido._carteira            = new Carteira();
                    historicoInvestido._carteira.IdCarteira = Convert.ToInt32(linha["IdCarteira"]);
                    historicoInvestido._carteira.TipoMoeda  = Convert.ToInt32(linha["TipoMoeda"]);
                    historicoInvestido.ValorInvestido       = new Negocio().ConverterCriptoParaReal(historicoInvestido.ValorInvestido, historicoInvestido._carteira.TipoMoeda);

                    ListInvestido.Add(historicoInvestido);
                }

                return(ListInvestido);
            }
            catch (Exception exception)
            {
                throw new Exception("Erro no Banco. Detalhes: " + exception.Message);
            }
        }
        public string Inserir(HistoricoInvestido historicoInvestido)
        {
            try
            {
                acessoDados.LimparParametros();
                acessoDados.AdicionarParametros("@IdCarteira", historicoInvestido._carteira.IdCarteira);
                acessoDados.AdicionarParametros("@DtInicio", historicoInvestido.DtInicio);
                acessoDados.AdicionarParametros("@ValorInvestido", historicoInvestido.ValorInvestido);

                string retornoHistorico = acessoDados.ExecutarManipulacao(CommandType.Text, "BEGIN " +
                                                                          "INSERT INTO HistoricoInvestido " +
                                                                          "(IdCarteira,DtInicio,ValorInvestido) " +
                                                                          "VALUES (@IdCarteira,@DtInicio,@ValorInvestido) " +
                                                                          "SELECT @@IDENTITY as RETORNO " +
                                                                          "END").ToString();

                return(retornoHistorico);
            }
            catch (Exception exception)
            {
                return(exception.Message);
            }
        }