Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }