public async Task <IActionResult> Create(Reservation res)
        {
            if (ModelState.IsValid)
            {
                // Caso a data do check in seja depois do check out retorna para a pagina Create
                if (DateTime.Compare(res.CheckIn, res.CheckOut) > 0)
                {
                    return(RedirectToAction("Create"));
                }

                // Não se pode reservar o lugar por mais de 0.75 dias
                if ((res.CheckIn - res.CheckOut).TotalDays < -0.75)
                {
                    return(RedirectToAction("Create"));
                }

                // retorna uma lista com reservas que compara a data de checkout desse parque com a data de checkin inserida
                var ongoingRes = await db.Reservation
                                 .Include(r => r.park)
                                 .Where(r => DateTime.Compare(r.CheckOut, res.CheckIn) > 0 && r.ParkId == res.ParkId)
                                 .ToListAsync();

                // caso haja uma reserva nesse parque retorna para a pagina Create
                if (ongoingRes.Count() > 0)
                {
                    return(RedirectToAction("Create"));
                }

                // checks if car has allready a reserve on that time
                var isCarUsed = await db.Reservation
                                .Include(r => r.car)
                                .Where(r => DateTime.Compare(r.CheckOut, res.CheckIn) > 0 && r.car.username == User.Identity.Name)
                                .ToListAsync();

                //verifica se o carro está a ser utilizado noutra reserva
                if (isCarUsed.Count() > 0)
                {
                    return(RedirectToAction("Create"));
                }

                // encontra o carro com essa matricula
                Car car = await db.Car.FirstAsync(c => c.LicensePlate == res.LicensePlate);

                // encontra o parque com esse parque id
                Park park = await db.Park.FirstAsync(p => p.ParkId == res.ParkId);

                res.car  = car;
                res.park = park;

                var createReservation = db.Add(res);
                // guarda a reserva
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            // alguma coisa correu mal.
            // devolve-se o controlo da aplicação à View
            return(RedirectToAction("Create"));
        }
Пример #2
0
        public async Task <IActionResult> OnPostAddCarAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user);

                return(Page());
            }

            var cars = await _context.Car.Where(c => c.username == User.Identity.Name).ToListAsync();

            foreach (Car car in cars)
            {
                if (car.LicensePlate == Input.NewLicensePlate)
                {
                    StatusMessage = "Error, plate allready registered.";
                    return(RedirectToPage());
                }
            }

            int year;

            if (!Int32.TryParse(Input.NewYear, out year))
            {
                StatusMessage = "Error, wrong year.";
                return(RedirectToPage());
            }

            Utilizador curuser = await _context.User.FirstAsync(u => u.username == User.Identity.Name);

            Car newcar = new Car
            {
                LicensePlate = Input.NewLicensePlate,
                Color        = Input.NewColor,
                Manufacturer = Input.NewManufacturer,
                Model        = Input.NewModel,
                Year         = year,
                username     = curuser.username,
                utilizador   = curuser
            };

            try
            {
                _context.Car.Add(newcar);
                await _context.SaveChangesAsync();

                StatusMessage = "New car added.";
                return(RedirectToPage());
            } catch (Exception)
            {
                StatusMessage = "Error adding new car.";
                return(RedirectToPage());
            }
        }
Пример #3
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl ??= Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                int checkYearInt;
                try
                {
                    // verifica se o ano está correto
                    checkYearInt = Int32.Parse(Input.Year);
                }
                catch (Exception)
                {
                    // caso nao recarrega a pagina
                    return(Page());
                }
                // cria o objeto utilizador
                var newutilizador = new Utilizador
                {
                    username = Input.Name,
                    email    = Input.Email
                };
                // cria o objeto carro
                var newcar = new Car
                {
                    LicensePlate = Input.LicensePlate,
                    Color        = Input.Color,
                    Manufacturer = Input.Manufacturer,
                    Model        = Input.Model,
                    Year         = Int32.Parse(Input.Year),
                    utilizador   = newutilizador,
                    username     = Input.Name
                };
                // cria o utilizador do tipo IdentityUser
                var user = new IdentityUser {
                    UserName = Input.Name, Email = Input.Email
                };
                // é guardado no objeto resultado se o utilizador foi criado com sucesso
                try
                {
                    var result_uti = await _context.AddAsync(newutilizador);

                    var result_car = await _context.AddAsync(newcar);

                    var finalresult = await _context.SaveChangesAsync();
                }
                catch (Exception)
                {
                    return(Page());
                }

                var result = await _userManager.CreateAsync(user, Input.Password);

                // Caso seja sucedido
                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

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

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                      $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");



                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, 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());
        }