// 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"));
        }
Exemple #2
0
        // 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"));
        }