// 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.Customer.Add(Customer);
            await _context.SaveChangesAsync();

            return(RedirectToPage("./Index"));
        }
Esempio n. 3
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());
            }
            else if (Booking.CheckIn < DateTime.Today)
            {
                ViewData["CheckInerr"] = "Check in Date Must be in the future";
                return(Page());
            }
            else if (Booking.CheckIn > Booking.CheckOut)
            {
                ViewData["CheckOuterr"] = "Check Out Date Must be in the future";
                return(Page());
            }

            var roomID   = new SqliteParameter("roomID", Booking.RoomID);
            var cInDate  = new SqliteParameter("cInDate", Booking.CheckIn);
            var cOutDate = new SqliteParameter("cOutDate", Booking.CheckOut);

            var Query = _context.Room.FromSqlRaw("SELECT [Room].* FROM Room " +
                                                 "WHERE [Room].ID = @roomID " +
                                                 " AND [Room].ID NOT IN " +
                                                 "(SELECT [Room].ID " +
                                                 "FROM [Room] " +
                                                 "INNER JOIN [Booking] " +
                                                 "ON [Room].ID = [Booking].RoomId " +
                                                 "WHERE @cInDate < Booking.Checkout " +
                                                 "AND Booking.CheckIn < @cOutDate ) ", roomID, cInDate, cOutDate);


            var succesQuerys = await Query.ToListAsync();

            if (succesQuerys.Count == 1)
            {
                _context.Booking.Add(Booking);
                await _context.SaveChangesAsync();

                ViewData["SuccessDB"] = "success";
            }
            else
            {
                ViewData["Fail"] = "During your period, Booking not available, This room is this period already taken";
                return(Page());
            }
            return(RedirectToPage("./BookingManagement"));
        }
        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"));
        }
Esempio n. 5
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"));
        }
Esempio n. 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("./BookingManagement"));
        }
        // 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("./BookingManagement"));
        }
Esempio n. 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");

            // Validation, when user tried to book invalid data, will return error message instead of success message.
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            else if (BookingRoom.CheckIn < DateTime.Today)
            {
                ViewData["CheckInerr"] = "Check in Date Must be in the future";
                return(Page());
            }
            else if (BookingRoom.CheckIn > BookingRoom.CheckOut)
            {
                ViewData["CheckOuterr"] = "Check Out Date Must be in the future";
                return(Page());
            }

            // Current logged in User, Customer, will only book.
            // So, can meet the requirmenet of "1 customer books 1 room"
            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 == BookingRoom.RoomID),
                RoomID        = BookingRoom.RoomID,
                CustomerEmail = _email,
                CheckIn       = BookingRoom.CheckIn,
                CheckOut      = BookingRoom.CheckOut
            };

            // Caculate Data of night.
            var lengthOfStay = (int)(Booking.CheckOut - Booking.CheckIn).TotalDays;

            BookingRoom.TotalCost = lengthOfStay * Booking.TheRoom.Price;
            Booking.Cost          = BookingRoom.TotalCost;

            //Level requirement,
            var theLevel = await _context.Room.FirstOrDefaultAsync(m => m.ID == BookingRoom.RoomID);

            BookingRoom.Level = theLevel.Level;

            var roomID   = new SqliteParameter("roomID", BookingRoom.RoomID);
            var cInDate  = new SqliteParameter("cInDate", BookingRoom.CheckIn);
            var cOutDate = new SqliteParameter("cOutDate", BookingRoom.CheckOut);

            var Query = _context.Room.FromSqlRaw("SELECT [Room].* FROM Room " +
                                                 "WHERE [Room].ID = @roomID " +
                                                 " AND [Room].ID NOT IN " +
                                                 "(SELECT [Room].ID " +
                                                 "FROM [Room] " +
                                                 "INNER JOIN [Booking] " +
                                                 "ON [Room].ID = [Booking].RoomId " +
                                                 "WHERE @cInDate < Booking.Checkout " +
                                                 "AND Booking.CheckIn < @cOutDate ) ", roomID, cInDate, cOutDate);


            var succesQuerys = await Query.ToListAsync();

            // The result is only 1, store into DB,
            // If the result came out more than one, which means bookings are duplicated, means, someone already book,
            // so, use else state to display error message.
            if (succesQuerys.Count == 1)
            {
                _context.Booking.Add(Booking);
                await _context.SaveChangesAsync();

                ViewData["SuccessDB"] = "success";
            }
            else
            //If query result is more than one, (which means my query could be wrong or ..something worng), error mes display
            {
                ViewData["Fail"] = "During your period, Booking not available, This room is this period already taken";
            }
            return(Page());
        }