public async Task <IActionResult> Close(int?id) { if (id == null) { return(NotFound()); } Conta conta = await _context.Conta .Where(c => c.Id == id).Include(c => c.Reserva.Quarto).FirstOrDefaultAsync(); if (conta == null) { return(NotFound()); } var relatoriosConta = await _context.RelatorioDiario .Where(r => r.ContaId == id).ToListAsync(); int relatorios = relatoriosConta.Count; int dias = (conta.Reserva.DataSaida.Subtract(conta.Reserva.DataEntrada)).Days; if (relatorios != dias) { return(RedirectToAction(nameof(Index), "RelatorioDiario", new { id = conta.Id })); } try { double taxa = conta.ValorTotal * 0.05; conta.ValorTotal = conta.ValorTotal + taxa; Dinheiro dinheiro = new Dinheiro(); IPagamento cartao = new Cartao(dinheiro); if (conta.FormaPagamento == "Cartão") { conta.StatusPagamento = cartao.RealizarPagamento(); } else { conta.StatusPagamento = dinheiro.RealizarPagamento(); } if (conta.StatusPagamento == "Aprovado") { conta.Reserva.Quarto.Disponivel = true; } else { conta.ValorTotal = conta.ValorTotal - taxa; } _context.Update(conta); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ContaExists(conta.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Details), new { id = conta.ReservaId })); }