public async Task <IActionResult> Create([Bind("Id,CinemaFK,MovieFK,Start,End,Occupated_seats")] Sessions session)
        {
            if (ModelState.IsValid)
            {
                //verifica se existe alguma sessao no mesmo cinema entre a data da nova sessao
                if (await _context.Sessions.Where(s => session.Start >= s.Start && session.Start <= s.End && s.Cinema.Id == session.CinemaFK).AnyAsync())
                {
                    ViewData["message"]  = "Já existe uma sessão neste cinema entre esta data.";
                    ViewData["CinemaFK"] = new SelectList(_context.Cinemas, "Id", "Name", session.CinemaFK);
                    ViewData["MovieFK"]  = new SelectList(_context.Movies, "Id", "Name", session.MovieFK);
                    return(View());
                }

                session.End = session.Start;                                                          //fim=inicio
                session.End = session.End.AddMinutes(_context.Movies.Find(session.MovieFK).Duration); //fim+duração do filme

                _context.Add(session);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CinemaFK"] = new SelectList(_context.Cinemas, "Id", "Name", session.CinemaFK);
            ViewData["MovieFK"]  = new SelectList(_context.Movies, "Id", "Name", session.MovieFK);
            return(View(session));
        }
Beispiel #2
0
        public async Task <IActionResult> Create([Bind("Name,Capacity,City,Location")] Cinemas cinema)
        {
            if (ModelState.IsValid)
            {
                if (_context.Cinemas.Where(c => c.Name == cinema.Name).Any())//verifica se existe algum cinema com o mesmo nome
                {
                    ViewData["message"] = "Já existe um cinema com o mesmo nome.";
                    return(View(cinema));
                }
                //adiciona o utilizador
                _context.Add(cinema);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(cinema));
        }
        public async Task <IActionResult> Create([Bind("Id,Name,Description,Genres,Duration,Min_age,Highlighted")] Movies movie, IFormFile Poster)
        {
            if (ModelState.IsValid)
            {
                if (_context.Movies.Where(m => m.Name == movie.Name).Any())//verifica se existe algum filme com o mesmo nome
                {
                    ViewData["message"] = "Já existe um filme com o mesmo nome.";
                    return(View(movie));
                }
                //se o poster não fôr imagem usa-se a imagem default
                if (Poster == null || !Poster.ContentType.Contains("image"))
                {
                    movie.Poster = "default.png";
                }
                else
                { //usa a imagem recebida
                    Guid g;
                    g = Guid.NewGuid();

                    string extensao = Path.GetExtension(Poster.FileName).ToLower();

                    // caminho do ficheiro
                    movie.Poster = g.ToString() + extensao;

                    //guarda a imagem
                    using var fileStream = new FileStream(_environment.WebRootPath + "/images/movies/" + g.ToString() + extensao, FileMode.Create);
                    await Poster.CopyToAsync(fileStream);
                }
                //adiciona o filme ----------------------
                _context.Add(movie);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(movie));
        }
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            //verifica se o email ja esta a ser utilizado
            if (_context.User.Where(u => u.Email == Input.Email).Any())
            {
                ModelState.AddModelError(string.Empty, "Este Email já está a ser utilizado.");
            }

            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                Users user = new Users //cria o utilizador usado nas relações
                {
                    Name   = Input.Nome,
                    Email  = Input.Email,
                    DoB    = Input.DoB,
                    Role   = "User",
                    Avatar = "default.png",
                };
                _context.Add(user);
                await _context.SaveChangesAsync();

                var applicationUser = new ApplicationUser //cria application User
                {
                    UserName  = Input.Email,
                    Email     = Input.Email,
                    Nome      = Input.Nome,
                    Timestamp = DateTime.Now,
                    User      = user.Id //id do utilizador
                };

                var result = await _userManager.CreateAsync(applicationUser, Input.Password); //adiciona o application user

                if (result.Succeeded)
                {
                    //dar permissão ao Application User com a permissão base: User
                    await _userManager.AddToRoleAsync(applicationUser, "User");

                    _logger.LogInformation("Utilizador criado.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(applicationUser);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = applicationUser.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirme o seu email",
                                                      $"Por favor confirme o seu email ao <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicar aqui</a>.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(applicationUser, isPersistent : false);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Beispiel #5
0
        public async Task <IActionResult> Create(int SessionFK)
        {
            var session = _context.Sessions.Find(SessionFK);

            if (session == null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            //obtem o application user atual
            var applicationUser = await _userManager.GetUserAsync(User);

            //obtem o utilizador associado ao application user atual
            var user = _context.User.Where(u => u.Id == applicationUser.User).FirstOrDefault();

            ViewData["User"] = user.Id;//envia para a view o id do user

            //filme da sessao escolhida pelo utilizador
            var movie = await _context.Movies.Where(m => m.Id == session.MovieFK).FirstOrDefaultAsync();

            //a sessão já começou
            var now = new DateTime().Ticks;

            if (now >= session.Start.Ticks && now <= session.End.Ticks)
            {
                TempData["Message"] = "Esta sessão já está a decorrer.";
                return(Redirect("~/Movies/Details/" + movie.Id));
            }

            //o utilizador já tem o bilhete
            if (_context.Tickets.Where(t => t.Session == session && t.Id == applicationUser.User).Any())
            {
                TempData["Message"] = "Já possui o bilhete para esta sessão.";
                return(Redirect("~/Movies/Details/" + movie.Id));
            }

            //capacidade cheia
            if (session.Occupated_seats >= _context.Cinemas.Find(session.CinemaFK).Capacity)
            {
                TempData["Message"] = "Filme com capacidade esgotada. Atualize a página.";
                return(Redirect("~/Movies/Details/" + movie.Id));
            }

            //sem idade para comprar o bilhete
            if (DateTime.Now.Ticks < user.DoB.AddYears(session.Movie.Min_age).Ticks)
            {
                TempData["Message"] = "Não tem idade para comprar o bilhete para este filme.";
                return(Redirect("~/Movies/Details/" + movie.Id));
            }

            try
            {//compra o bilhete
                Tickets ticket = new Tickets
                {
                    SessionFK = SessionFK,
                    UserFK    = _context.User.Where(u => u.Id == applicationUser.User).Select(u => u.Id).FirstOrDefault(),
                    Seat      = session.Occupated_seats + 1
                };

                session.Occupated_seats += 1;//incrementa o numero de lugares ocupados na sessao

                _context.Add(ticket);
                await _context.SaveChangesAsync();

                return(Redirect("~/Movies/Details/" + movie.Id));
            }
            catch (Exception)
            {
                TempData["Message"] = "Erro inesperado.";
                return(Redirect("~/Movies/Details/" + movie.Id));
            }
        }