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