public IActionResult InserirTransacao([Bind("IdConta,Valor,IdTipoTransacao")] InserirTransacaoViewModel transacaoParam)
        {
            if (!ModelState.IsValid)
            {
                return(View(transacaoParam));
            }

            try
            {
                var transacao = new TransacaoDTO()
                {
                    IdConta         = transacaoParam.IdConta,
                    IdTipoTransacao = transacaoParam.IdTipoTransacao,
                    Valor           = transacaoParam.Valor,
                    DataHora        = DateTime.Now,
                };

                _transacaoDominio.Inserir(transacao);

                return(Ok(MensagemResposta.TransacaoInseridaSucesso));
            }
            catch (ArgumentException argumentEx)
            {
                return(BadRequest(argumentEx.Message));
            }
        }
Beispiel #2
0
        public ActionResult <RetornoTransacaoDTO> Post(TransacaoDTO transacao)
        {
            RetornoTransacao retorno = new TransactionService().RealizarTransacao(transacao.cartao, transacao.valor, transacao.tipo, transacao.parcelas, transacao.guid);

            return(new RetornoTransacaoDTO {
                Codigo = (int)retorno, Descricao = GetEnumDescription(retorno)
            });
        }
Beispiel #3
0
        /// <summary>
        /// Realizar transação
        /// </summary>
        /// <param name="transacao"></param>
        /// <returns></returns>
        public Task <bool> RealizarTransacaoAsync(TransacaoDTO transacao)
        {
            transacao.ContaOrigem.Saldo  = contaRepository.VerificarSaldoAsync(transacao.ContaOrigem).Result - transacao.Valor;
            transacao.ContaDestino.Saldo = contaRepository.VerificarSaldoAsync(transacao.ContaDestino).Result + transacao.Valor;
            transacao.Data = DateTime.Now;

            listaTransacoes.Add(transacao);
            return(Task.FromResult(true));
        }
        public async Task <IActionResult> CriarTransacaoAsync([FromBody] TransacaoDTO transacao)
        {
            if (transacao == null)
            {
                return(BadRequest("Transação nula"));
            }
            if (transacao.ContaDestino == null)
            {
                return(BadRequest("Conta destino nula"));
            }
            if (transacao.ContaOrigem == null)
            {
                return(BadRequest("Conta origem nula"));
            }
            if (transacao.Valor <= 0)
            {
                return(BadRequest("Valor da transação inválido"));
            }

            var contaOrigem = await contaRepository.VerificarContaExisteAtivaAsync(transacao.ContaOrigem);

            var contaDestino = await contaRepository.VerificarContaExisteAtivaAsync(transacao.ContaDestino);

            if (contaOrigem.Id == 0 || contaDestino.Id == 0)
            {
                return(BadRequest("Conta inválida"));
            }

            var saldoContaOrigem = await contaRepository.VerificarSaldoAsync(contaOrigem);

            if (contaOrigem.Numero == transacao.ContaDestino.Numero)
            {
                return(BadRequest("Conta destino deve ser diferente da origem"));
            }

            if (transacao.Valor > saldoContaOrigem)
            {
                return(BadRequest("Valor excede o total da conta"));
            }

            var realizouTransacao = await transacaoRepository.RealizarTransacaoAsync(transacao);

            if (realizouTransacao)
            {
                await contaRepository.DebitarValorAsync(contaOrigem, transacao.Valor);

                await contaRepository.CreditarValorAsync(contaDestino, transacao.Valor);

                return(Ok("Transação realizada com sucesso"));
            }

            return(BadRequest("Não foi possível realizar transação, verifique se as contas estão corretas!"));
        }
        /// <summary>
        /// Realiza a validacao basica do Saldo da conta para o lancamento da transacao
        /// </summary>
        /// <param name="conta"></param>
        /// <param name="transacaoParam"></param>
        /// <param name="tipoTransacao"></param>
        public void ValidarSaldo(Conta conta, TransacaoDTO transacaoParam, TipoTransacao tipoTransacao)
        {
            decimal valorSaldoAtual = transacaoParam.Valor * tipoTransacao.FlagSaldoAtual;

            if (transacaoParam.Valor <= 0)
            {
                throw new ArgumentException(MensagemResposta.ValorTransacaoInvalido);
            }

            if (conta.SaldoAtual + valorSaldoAtual < 0)
            {
                throw new ArgumentException(MensagemResposta.ContaSemSaldoParaOperacao);
            }
        }
        public ActionResult <TransacaoDTO> Post(TransacaoDTO transacao)
        {
            try
            {
                transacao.DataHora = DateTime.Now;

                _transacaoDominio.Inserir(transacao);

                return(transacao);
            }
            catch (ArgumentException argumentEx)
            {
                return(BadRequest(argumentEx.Message));
            }
        }
        /// <summary>
        /// Insere uma transacao nova na conta.
        /// </summary>
        /// <param name="transacaoParam"></param>
        public void Inserir(TransacaoDTO transacaoParam)
        {
            var tipoTransacao = _tipoTransacaoRepositorio.BuscarTiposTransacoesPorId(transacaoParam.IdTipoTransacao);

            ValidarTipoTransacao(tipoTransacao);

            var conta = _contaDominio.BuscarPorId(transacaoParam.IdConta);

            _contaDominio.ValidarConta(conta);

            ValidarSaldo(conta, transacaoParam, tipoTransacao);

            conta = AdicionarTransacao(conta, transacaoParam, tipoTransacao);

            _transacaoRepositorio.InserirTransacao(conta);
        }
        /// <summary>
        /// Realiza o calculo de rendimento e retorna a transacao que devera ser incluida.
        /// </summary>
        /// <param name="idConta"></param>
        /// <param name="saldoAtual"></param>
        /// <param name="idTipoTransacao"></param>
        /// <param name="proximoRendimento"></param>
        /// <returns></returns>
        public TransacaoDTO CalcularRendimento(int idConta, decimal saldoAtual, int idTipoTransacao, TaxaCdi proximoRendimento)
        {
            var transacao = new TransacaoDTO()
            {
                IdConta         = idConta,
                IdTipoTransacao = idTipoTransacao,
                Historico       = proximoRendimento.Data.ToString("dd/MM/yyyy"),
                DataHora        = DateTime.Now,
            };

            decimal rendimento = saldoAtual * (proximoRendimento.Percentual * proximoRendimento.TaxaDia);

            transacao.Valor = Math.Round(rendimento, 2);

            return(transacao);
        }
Beispiel #9
0
        public async Task <int> RegistrarTransacao(TransacaoDTO transacao)
        {
            StringBuilder queryRegistraTransacao = new StringBuilder();

            queryRegistraTransacao.AppendLine("insert into transacao (ID_Curso,Valor,Data,Email_Usuario) values ");
            queryRegistraTransacao.AppendFormat("{0},{1},'{2}','{3}'", transacao.ID_Curso, transacao.Valor, transacao.DataTransacao.ToString(), transacao.Email_Usuario);
            try
            {
                await UtilitarioDatabase.ExecutarComando(queryRegistraTransacao.ToString());

                return(200);
            }
            catch
            {
                return(500);
            }
        }
        /// <summary>
        /// Realiza os procedimentos necessarios para inclusao de uma nova transacao na conta.
        /// </summary>
        /// <param name="conta"></param>
        /// <param name="transacaoParam"></param>
        /// <param name="tipoTransacao"></param>
        /// <returns></returns>
        public Conta AdicionarTransacao(Conta conta, TransacaoDTO transacaoParam, TipoTransacao tipoTransacao)
        {
            decimal valorSaldoAtual = transacaoParam.Valor * tipoTransacao.FlagSaldoAtual;

            conta.SaldoAtual = conta.SaldoAtual + valorSaldoAtual;

            conta.Transacao.Add(new Transacao
            {
                IdConta         = transacaoParam.IdConta,
                DataHora        = transacaoParam.DataHora,
                IdTipoTransacao = transacaoParam.IdTipoTransacao,
                Valor           = Math.Round(transacaoParam.Valor, 2),
                Historico       = transacaoParam.Historico,
            });

            return(conta);
        }
Beispiel #11
0
        public IActionResult Pagar(int id, TransacaoDTO dto)
        {
            dto.ContaCorrenteId = id;
            try
            {
                var resultadoValidacao = _serviceContaCorrente.Pagar(dto);

                return(Ok(new ResponseDTO
                {
                    Success = resultadoValidacao.Valido,
                    Message = resultadoValidacao.Erros
                }));
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
        }
        public async Task <IActionResult> Post([FromBody] TransacaoDTO transacaoDTO)
        {
            try
            {
                if (transacaoDTO == null)
                {
                    return(NotFound());
                }

                await _transacaoCommand.AddReal(transacaoDTO);

                return(Ok("Ação enviada para armazenamento do DB efetuada com sucesso!"));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <IActionResult> PostProducer([FromBody] TransacaoDTO transacaoDTO)
        {
            try
            {
                if (transacaoDTO == null)
                {
                    return(NotFound());
                }

                await _transacaoCommand.AddProducer(transacaoDTO);

                return(Ok("Ação enviada para produção do Kafk efetuada com sucesso!"));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #14
0
        public async Task AddReal(TransacaoDTO transacao)
        {
            var model = transacao.ConvertTo <Transacao>();

            await _transacaoService.EfetuarAcao(model);
        }
 private ValidacaoDTO RegistrarTransacao(TransacaoDTO transacao)
 {
     return(UtilitarioHTTP.InterpretarStatusCode(this.cursoRepositorio.RegistrarTransacao(transacao).Result));
 }
Beispiel #16
0
 public async Task AddProducer(TransacaoDTO transacao)
 {
     var output = JsonConvert.SerializeObject(transacao);
     await _producer.SendDataAsync(ProjectConsts.TOPIC_NAME, output);
 }
Beispiel #17
0
 public ResultadoValidacao Resgatar(TransacaoDTO dto)
 {
     return(_serviceContaCorrente.Resgatar(dto.ContaCorrenteId, dto.Valor));
 }
Beispiel #18
0
 public Task <bool> RealizarTransacaoAsync(TransacaoDTO transacao)
 {
     listaTransacoes.Add(transacao);
     return(Task.FromResult(true));
 }