public async Task <IActionResult> Alugar(AluguelViewModel aluguel) { if (ModelState.IsValid) { var usuario = await _usuarioRepositorio.PegarUsuarioLogado(User); var saldo = _contaRepositorio.PegarSaldoPeloId(usuario.Id); if (await _aluguelRepositorio.VerificarReserva(usuario.Id, aluguel.CarroId, aluguel.Inicio, aluguel.Fim)) { _logger.LogInformation("Usuário já possui essa reserva"); TempData["Aviso"] = "Você já possui essa reserva"; return(View(aluguel)); } else if (aluguel.PrecoTotal > saldo) { _logger.LogInformation("Saldo insuficiente"); TempData["Aviso"] = "Saldo insuficiente"; return(View(aluguel)); } else { Aluguel a = new Aluguel { UsuarioId = usuario.Id, CarroId = aluguel.CarroId, Inicio = aluguel.Inicio, Fim = aluguel.Fim, PrecoTotal = aluguel.PrecoTotal }; _logger.LogInformation("Enviando email com detalhes da reserva"); string assunto = "Reserva concluida com sucesso"; string mensagem = string.Format("seu veiculo já o aguarda. Você poderá pegá-lo dia {0}" + " e deverá devolve-lo dia {1}. O preço será R${2},00. Divirta-se !!! ", aluguel.Inicio, aluguel.Fim, aluguel.PrecoTotal); await _email.EnviarEmail(usuario.Email, assunto, mensagem); await _aluguelRepositorio.Inserir(a); _logger.LogInformation("Reserva feita"); _logger.LogInformation("Atualizando saldo do usuario"); var saldoUsuario = await _contaRepositorio.PegarSaldoPeloUsuarioId(usuario.Id); saldoUsuario.Saldo = saldoUsuario.Saldo - aluguel.PrecoTotal; await _contaRepositorio.Atualizar(saldoUsuario); _logger.LogInformation("Saldo atualizado"); return(RedirectToAction("Index", "Carros")); } } _logger.LogInformation("Informações inválidas"); return(View(aluguel)); }
public async Task <IActionResult> AluguelCarro(AluguelViewModel aluguelViewModel) { if (ModelState.IsValid) { var usuario = await _usuarioRepositorio.PegarUsuarioLogado(User); var saldo = _contaRepositorio.PegarSaldoPeloId(usuario.Id); if (await _aluguelRepositorio.VerificarReserva(usuario.Id, aluguelViewModel.CarroId, aluguelViewModel.Inicio, aluguelViewModel.Fim)) { TempData["Aviso"] = "Você já possui essa reserva"; return(View(aluguelViewModel)); } else if (aluguelViewModel.PrecoTotal > saldo) { TempData["Aviso"] = "Saldo Insuficiente"; return(View(aluguelViewModel)); } else { Aluguel aluguel = new Aluguel { UsuarioId = usuario.Id, CarroId = aluguelViewModel.CarroId, Inicio = aluguelViewModel.Inicio, Fim = aluguelViewModel.Fim, PrecoTotal = aluguelViewModel.PrecoTotal }; string assunto = "Reserva concluida com sucesso"; string mensagem = string.Format("Veiculo em aguardo. Voce pode pegá-lo dia {0}" + " e deverá devolver dia {1}. O preco será R${2},00. Divirta-se", aluguel.Inicio, aluguel.Fim, aluguel.PrecoTotal); await _emailInterface.EnviarEmail(usuario.Email, assunto, mensagem); await _aluguelRepositorio.Inserir(aluguel); var saldoUsuario = await _contaRepositorio.PegarSaldoPeloUsuarioId(usuario.Id); saldoUsuario.Saldo = saldoUsuario.Saldo - aluguelViewModel.PrecoTotal; await _contaRepositorio.Atualizar(saldoUsuario); return(RedirectToAction("Index", "Carro")); } } return(View(aluguelViewModel)); }
public async Task <IActionResult> Create([Bind("AluguelId,Valor,MesId,Ano")] Aluguel aluguel) { if (ModelState.IsValid) { if (!AluguelRepositorio.AluguelJaExiste(aluguel.MesId, aluguel.Ano)) { await AluguelRepositorio.Inserir(aluguel); var usuarios = await UsuariosRepositorio.PegarTodos(); Pagamento pagamento; var pagamentos = new List <Pagamento>(); foreach (var u in usuarios) { pagamento = new Pagamento { AluguelId = aluguel.AluguelId, UsuarioId = u.Id, DataPagamento = null, Status = StatusPagamento.Pendente }; pagamentos.Add(pagamento); } await PagamentoRepositorio.Inserir(pagamentos); TempData["NovoRegistro"] = $"Aluguel no valor de {aluguel.Valor} do mês {aluguel.MesId} do ano {aluguel.Ano} adicionado"; return(RedirectToAction(nameof(Index))); } else { ModelState.AddModelError("", "Aluguel já existe"); ViewData["MesId"] = new SelectList(await MesRepositorio.PegarTodos(), "MesId", "Nome"); return(View(aluguel)); } } ViewData["MesId"] = new SelectList(await MesRepositorio.PegarTodos(), "MesId", "Nome"); return(View(aluguel)); }