62 lines
2.5 KiB
Python

from odoo import http, _
from odoo.http import request
import datetime
import pytz
class TableReservationController(http.Controller):
@http.route(['/reservation'], type='http', auth="public", website=True)
def reservation_form(self, **post):
floors = request.env['restaurant.floor'].sudo().search([])
tables = request.env['restaurant.table'].sudo().search([])
return request.render("dine360_reservation.reservation_page_template", {
'floors': floors,
'tables': tables,
})
@http.route(['/reservation/submit'], type='http', auth="public", website=True, methods=['POST'], csrf=True)
def reservation_submit(self, **post):
# Extract data from post
customer_name = post.get('customer_name')
phone = post.get('phone')
email = post.get('email')
floor_id = int(post.get('floor_id'))
table_id = int(post.get('table_id'))
start_time_str = post.get('start_time') # Format: 2024-05-20T18:00
num_people = int(post.get('num_people', 1))
# Convert start_time to datetime object and localize to restaurant timezone (Brampton)
restaurant_tz = pytz.timezone('America/Toronto')
local_start = datetime.datetime.strptime(start_time_str, '%Y-%m-%dT%H:%M')
local_start = restaurant_tz.localize(local_start)
# Convert to UTC for Odoo
start_time = local_start.astimezone(pytz.utc).replace(tzinfo=None)
# Standard duration of 1 hour for now
end_time = start_time + datetime.timedelta(hours=1)
# Create reservation
try:
reservation = request.env['restaurant.reservation'].sudo().create({
'customer_name': customer_name,
'phone': phone,
'email': email,
'floor_id': floor_id,
'table_id': table_id,
'start_time': start_time,
'end_time': end_time,
'num_people': num_people,
'state': 'draft'
})
return request.render("dine360_reservation.reservation_success_template", {
'reservation': reservation,
})
except Exception as e:
return request.render("dine360_reservation.reservation_page_template", {
'error': str(e),
'floors': request.env['restaurant.floor'].sudo().search([]),
'tables': request.env['restaurant.table'].sudo().search([]),
'post': post,
})