Exemplo 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));
        }
Exemplo 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));
        }
Exemplo n.º 3
0
        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));
        }