public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }
            BookingConstraints other = obj as BookingConstraints;

            return(other.StartDate.Equals(StartDate) && other.EndDate.Equals(EndDate) &&
                   other.MaxPricePerNight.Equals(MaxPricePerNight) && other.NbOfBeds == NbOfBeds &&
                   other.SmokingAllowed == SmokingAllowed);
        }
        /************
         * BOOKINGS *
         ************/

        public Booking CreateBooking(string hotelName, BookingConstraints constraints, string guestName)
        {
            var hotel = GetHotel(hotelName);
            if (hotel == null)
                throw new ArgumentException("There exists no hotel with the given name.");
            foreach (RoomDetails rd in hotel.GetFreeRooms(constraints.StartDate, constraints.EndDate))
            {
                if (rd.SmokingAllowed.Equals(constraints.SmokingAllowed)
                    && constraints.NbOfBeds <= rd.NbOfBeds
                    && constraints.MaxPricePerNight >= rd.PricePerNight)
                {
                    return new Booking
                    {
                        Guest = guestName,
                        StartDate = constraints.StartDate,
                        EndDate = constraints.EndDate,
                        RoomNb = rd.RoomNb,
                        HotelName = hotel.Name,
                        Price = calc.CalculatePrice(rd.PricePerNight, constraints.StartDate, constraints.EndDate)
                    };
                }
            }
            throw new BookingException("No room to satisfy the given booking constraints.");
        }
 public ActionResult CreateBooking(string hotelName, BookingConstraints constraints, string guest)
 {
     try
     {
         Booking b = bk.CreateBooking(hotelName, constraints, guest);
         PlannedTrip trip = Session["trip"] as PlannedTrip ?? new PlannedTrip();
         trip.TentativeBookings.Add(b);
         Session["trip"] = trip;
         return RedirectToAction("Index");
     }
     catch (Exception e)
     {
         ModelState.AddModelError(String.Empty, e.Message);
         return View();
     }
 }