// To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://aka.ms/RazorPagesCRUD. public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } _context.Attach(Room).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!RoomExists(Room.ID)) { return(NotFound()); } else { throw; } } return(RedirectToPage("./Index")); }
// To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://aka.ms/RazorPagesCRUD. public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } _context.Room.Add(Room); await _context.SaveChangesAsync(); return(RedirectToPage("./Index")); }
// To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://aka.ms/RazorPagesCRUD. public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } //TODO ADD SQL VALIDATION //check dates are availablew //raw sql var roomID = new SqliteParameter("roomID", Booking.RoomID); var checkIn = new SqliteParameter("checkIn", Booking.CheckIn); var checkOut = new SqliteParameter("checkOut", Booking.CheckOut); String query = "SELECT [Room].* FROM Room " + "WHERE [Room].ID = @roomID "; String subQuery = "(SELECT [Room].ID " + "FROM [Room] " + "INNER JOIN [Booking] " + "ON [Room].ID = [Booking].RoomId " + "WHERE @checkIn < Booking.Checkout " + "AND Booking.CheckIn < @checkOut ) "; String notQuery = query + " AND [Room].ID NOT IN " + subQuery; var searchQuery = _context.Room.FromSqlRaw(notQuery, roomID, checkIn, checkOut); var thing = await searchQuery.ToListAsync(); //TODO FIX BULLSHIT OUTPUT if (thing.Count == 1) { _context.Booking.Add(Booking); await _context.SaveChangesAsync(); ViewData["SuccessDB"] = $"Booked, {Booking.RoomID} on level {Booking.TheRoom.Level}" + $"from {Booking.CheckIn:d} to {Booking.CheckOut:d} for {Booking.Cost:C2} "; } else { ViewData["SuccessDB"] = "Booking not available"; return(Page()); } return(RedirectToPage("./Index")); }
public async Task <IActionResult> OnPostAsync(int?id) { if (id == null) { return(NotFound()); } Room = await _context.Room.FindAsync(id); if (Room != null) { _context.Room.Remove(Room); await _context.SaveChangesAsync(); } return(RedirectToPage("./Index")); }
public async Task <IActionResult> OnPostAsync(string id) { if (id == null) { return(NotFound()); } Customer = await _context.Customer.FindAsync(id); if (Customer != null) { _context.Customer.Remove(Customer); await _context.SaveChangesAsync(); } return(RedirectToPage("./Index")); }
public async Task <IActionResult> OnPostAsync(int?id) { if (id == null) { return(NotFound()); } Booking = await _context.Booking.FindAsync(id); if (Booking != null) { _context.Booking.Remove(Booking); await _context.SaveChangesAsync(); } return(RedirectToPage("./Index")); }
// To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://aka.ms/RazorPagesCRUD. public async Task <IActionResult> OnPostAsync() { ViewData["CustomerEmail"] = new SelectList(_context.Customer, "Email", "FullName"); ViewData["RoomID"] = new SelectList(_context.Room, "ID", "ID"); if (!ModelState.IsValid) { return(Page()); } _context.Attach(Booking).State = EntityState.Modified; //TODO SQL VALIDATIION //Check new dates are aviable //dont include current booking in sub query //raw sql var roomID = new SqliteParameter("roomID", Booking.RoomID); var checkIn = new SqliteParameter("checkIn", Booking.CheckIn); var checkOut = new SqliteParameter("checkOut", Booking.CheckOut); var bookingID = new SqliteParameter("bookingID", Booking.ID); String query = "SELECT [Room].* FROM Room " + "WHERE [Room].ID = @roomID "; String subQuery = "(SELECT [Room].ID " + "FROM [Room] " + "INNER JOIN [Booking] " + "ON [Room].ID = [Booking].RoomId " + "WHERE @checkIn < Booking.Checkout " + "AND Booking.CheckIn < @checkOut " + "AND Booking.ID != @bookingID ) "; String notQuery = query + " AND [Room].ID NOT IN " + subQuery; var searchQuery = _context.Room.FromSqlRaw(notQuery, roomID, checkIn, checkOut, bookingID); var thing = await searchQuery.ToListAsync(); //TODO FIX BULLSHIT OUTPUT if (thing.Count == 1) { try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!BookingExists(Booking.ID)) { return(NotFound()); } else { throw; } } } else { ViewData["SuccessDB"] = "Booking not available"; return(Page()); } return(RedirectToPage("./Index")); }
// To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://aka.ms/RazorPagesCRUD. public async Task <IActionResult> OnPostAsync() { ViewData["RoomID"] = new SelectList(_context.Room, "ID", "ID"); if (!ModelState.IsValid) { return(Page()); } else if (RoomBooking.CheckIn < DateTime.Today) { ModelState.AddModelError("Booking.CheckIn", "Check in Date Must be in the future"); return(Page()); } else if (RoomBooking.CheckIn > RoomBooking.CheckOut) { ModelState.AddModelError("Booking.CheckOut", "Check Out Date Must after Check In Date"); return(Page()); } string _email = User.FindFirst(ClaimTypes.Name).Value; Booking Booking = new Booking { TheCustomer = await _context.Customer.FirstOrDefaultAsync(m => m.Email == _email), TheRoom = await _context.Room.FirstOrDefaultAsync(m => m.ID == RoomBooking.RoomID), RoomID = RoomBooking.RoomID, CustomerEmail = _email, CheckIn = RoomBooking.CheckIn, CheckOut = RoomBooking.CheckOut }; int days = (int)(Booking.CheckOut - Booking.CheckIn).TotalDays; Booking.Cost = days * Booking.TheRoom.Price; //raw sql var roomID = new SqliteParameter("roomID", RoomBooking.RoomID); var checkIn = new SqliteParameter("checkIn", RoomBooking.CheckIn); var checkOut = new SqliteParameter("checkOut", RoomBooking.CheckOut); String query = "SELECT [Room].* FROM Room " + "WHERE [Room].ID = @roomID "; String subQuery = "(SELECT [Room].ID " + "FROM [Room] " + "INNER JOIN [Booking] " + "ON [Room].ID = [Booking].RoomId " + "WHERE @checkIn < Booking.Checkout " + "AND Booking.CheckIn < @checkOut ) "; String notQuery = query + " AND [Room].ID NOT IN " + subQuery; var searchQuery = _context.Room.FromSqlRaw(notQuery, roomID, checkIn, checkOut); var thing = await searchQuery.ToListAsync(); //TODO FIX BULLSHIT OUTPUT if (thing.Count == 1) { _context.Booking.Add(Booking); await _context.SaveChangesAsync(); ViewData["SuccessDB"] = $"Booked, {Booking.RoomID} on level {Booking.TheRoom.Level}" + $"from {Booking.CheckIn:d} to {Booking.CheckOut:d} for {Booking.Cost:C2} "; } else { ViewData["SuccessDB"] = "Booking not available"; } return(Page()); }