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")); }
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()); } }
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()); }