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> InserirDinheiro([FromRoute] int id, [FromBody] Decimal valor) { try { var objetivo = await context.Objetivo .Include(o => o.HistoricoObjetivo) .FirstOrDefaultAsync(o => o.Id == id); if (objetivo == null) { ModelState.AddModelError("Objetivo", "Objetivo não encontrado"); return(NotFound(ModelState.Values.SelectMany(v => v.Errors))); } var lastValor = objetivo.HistoricoObjetivo.Last <HistoricoObjetivo>().ValorFinal; var historico = new HistoricoObjetivo { DataFinal = DateTime.Now, ValorFinal = lastValor + valor, ObjetivoId = objetivo.Id }; 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 == id); return(Ok(objetivo)); } catch (Exception e) { return(BadRequest(e.StackTrace)); } }