Esempio n. 1
0
        public async Task <IActionResult> TransferirToConta([FromRoute] int contaId, [FromRoute] int objetivoId, [FromBody] decimal valor)
        {
            try
            {
                var contaController = new ContasContabeisController(context);
                var movController   = new MovimentacoesController(context);

                var aux = await contaController.Get(contaId);

                if (!(aux is OkObjectResult contaObject))
                {
                    return(aux);
                }
                var conta = contaObject.Value as ContaContabil;

                aux = await Get(objetivoId);

                if (!(aux is OkObjectResult objetivoObject))
                {
                    return(aux);
                }
                var objetivo = objetivoObject.Value as Objetivo;

                if (!VerificarSaldo(objetivo, valor))
                {
                    ModelState.AddModelError("Objetivo", "Saldo insuficiente.");
                    return(BadRequest(ModelState.Values.SelectMany(e => e.Errors)));
                }

                conta.Saldo += valor;

                var valorAux = objetivo.HistoricoObjetivo.Last().ValorFinal - valor;


                var historico = new HistoricoObjetivo
                {
                    DataFinal  = DateTime.Now,
                    ValorFinal = valorAux,
                    ObjetivoId = objetivo.Id
                };

                context.ContaContabil.Update(conta);
                context.HistoricoObjetivo.Add(historico);
                context.Objetivo.Update(objetivo);
                await context.SaveChangesAsync();

                objetivo = await context.Objetivo
                           .Include(o => o.HistoricoObjetivo)
                           .Include(o => o.Moeda)
                           .FirstOrDefaultAsync(o => o.Id == objetivoId);

                return(Ok(new { objetivo, conta }));
            }
            catch (Exception e)
            {
                return(BadRequest(e.StackTrace));
            }
        }
Esempio n. 2
0
        public async Task <IActionResult> TransferirToConta([FromRoute] int contaId, [FromRoute] int investimentoId, [FromBody] decimal valor)
        {
            try
            {
                var contaController = new ContasContabeisController(context);
                var movController   = new MovimentacoesController(context);

                var aux = await contaController.Get(contaId);

                if (!(aux is OkObjectResult contaObject))
                {
                    return(aux);
                }
                var conta = contaObject.Value as ContaContabil;

                aux = await Get(investimentoId);

                if (!(aux is OkObjectResult investimentoObject))
                {
                    return(aux);
                }
                var investimento = investimentoObject.Value as Investimento;

                if (!VerificarSaldo(investimento, valor))
                {
                    ModelState.AddModelError("Conta", "Saldo insuficiente.");
                    return(BadRequest(ModelState.Values.SelectMany(e => e.Errors)));
                }

                conta.Saldo             += valor;
                investimento.ValorAtual -= valor;

                context.ContaContabil.Update(conta);
                context.Investimento.Update(investimento);
                await context.SaveChangesAsync();

                return(Ok(new { Investimento = investimento, Conta = conta }));
            }
            catch (Exception e)
            {
                return(BadRequest(e.StackTrace));
            }
        }