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