// 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()
        {
            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"));
        }
Exemple #4
0
        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"));
        }
Exemple #6
0
        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"));
        }
Exemple #7
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"));
        }
Exemple #8
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["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());
        }