unavailable dates
This commit is contained in:
@@ -144,19 +144,35 @@ def create_listing():
|
||||
def booking(listing_id):
|
||||
listing = Listing.query.get_or_404(listing_id)
|
||||
booked_dates = Booking.query.filter_by(listing_id=listing_id).all()
|
||||
unavailable_dates = [
|
||||
(booking.check_in.strftime('%Y-%m-%d'), booking.check_out.strftime('%Y-%m-%d'))
|
||||
for booking in booked_dates
|
||||
]
|
||||
unavailable_dates = [(booking.check_in.strftime('%Y-%m-%d'), booking.check_out.strftime('%Y-%m-%d')) for booking in booked_dates]
|
||||
|
||||
if request.method == 'POST':
|
||||
check_in = datetime.strptime(request.form['check_in'], '%Y-%m-%d')
|
||||
check_out = datetime.strptime(request.form['check_out'], '%Y-%m-%d')
|
||||
guests = request.form['guests']
|
||||
booking = Booking(user_id=current_user.id, listing_id=listing_id, check_in=check_in, check_out=check_out, guests=guests)
|
||||
db.session.add(booking)
|
||||
db.session.commit()
|
||||
return redirect(url_for('home'))
|
||||
|
||||
for start_date, end_date in unavailable_dates:
|
||||
if (check_in.strftime('%Y-%m-%d') >= start_date and check_in.strftime('%Y-%m-%d') <= end_date) or \
|
||||
(check_out.strftime('%Y-%m-%d') >= start_date and check_out.strftime('%Y-%m-%d') <= end_date):
|
||||
return render_template('booking.html', listing=listing, unavailable_dates=unavailable_dates, error="Selected dates are not available.")
|
||||
try:
|
||||
check_in = datetime.strptime(request.form['check_in'], '%Y-%m-%d')
|
||||
check_out = datetime.strptime(request.form['check_out'], '%Y-%m-%d')
|
||||
|
||||
if check_out <= check_in:
|
||||
return render_template('booking.html', listing=listing, unavailable_dates=unavailable_dates, error="Check-out date must be after check-in date.")
|
||||
|
||||
guests = int(request.form['guests'])
|
||||
if guests > listing.guests:
|
||||
return render_template('booking.html', listing=listing, unavailable_dates=unavailable_dates, error="Number of guests exceeds maximum allowed.")
|
||||
|
||||
booking = Booking(user_id=current_user.id, listing_id=listing_id, check_in=check_in, check_out=check_out, guests=guests)
|
||||
db.session.add(booking)
|
||||
db.session.commit()
|
||||
return redirect(url_for('home'))
|
||||
|
||||
except ValueError:
|
||||
return render_template('booking.html', listing=listing, unavailable_dates=unavailable_dates, error="Invalid date format.")
|
||||
|
||||
return render_template('booking.html', listing=listing, unavailable_dates=unavailable_dates)
|
||||
|
||||
@app.route('/view/<int:listing_id>', methods=['GET'])
|
||||
|
||||
Reference in New Issue
Block a user