diff --git a/addons/event_sale/views/event_registration_views.xml b/addons/event_sale/views/event_registration_views.xml
index a2dd5a21633..ba6350860af 100644
--- a/addons/event_sale/views/event_registration_views.xml
+++ b/addons/event_sale/views/event_registration_views.xml
@@ -8,7 +8,11 @@
-
+
+
+
@@ -31,6 +35,17 @@
+
+ event.registration.graph.inherit.event.sale
+ event.registration
+
+
+
+
+
+
+
+
event.registration.form.inherit
event.registration
@@ -49,7 +64,10 @@
-
+
+
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index 70f58f17930..64e23e70828 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -185,6 +185,7 @@ class WebsiteEventController(http.Controller):
'range': range,
'google_url': lazy(lambda: urls.get('google_url')),
'iCal_url': lazy(lambda: urls.get('iCal_url')),
+ 'registration_error_code': post.get('registration_error_code'),
}
def _process_tickets_form(self, event, form_details):
@@ -240,7 +241,7 @@ class WebsiteEventController(http.Controller):
visitor = request.env['website.visitor']._get_visitor_from_request()
if visitor.email:
default_first_attendee = {
- "name": visitor.name,
+ "name": visitor.display_name,
"email": visitor.email,
"phone": visitor.mobile,
}
@@ -352,8 +353,16 @@ class WebsiteEventController(http.Controller):
@http.route(['''/event//registration/confirm'''], type='http', auth="public", methods=['POST'], website=True)
def registration_confirm(self, event, **post):
- registrations = self._process_attendees_form(event, post)
- attendees_sudo = self._create_attendees_from_registration_post(event, registrations)
+ """ Check before creating and finalize the creation of the registrations
+ that we have enough seats for all selected tickets.
+ If we don't, the user is instead redirected to page to register with a
+ formatted error message. """
+ registrations_data = self._process_attendees_form(event, post)
+ event_ticket_ids = {registration['event_ticket_id'] for registration in registrations_data}
+ event_tickets = request.env['event.event.ticket'].browse(event_ticket_ids)
+ if any(event_ticket.seats_limited and event_ticket.seats_available < len(registrations_data) for event_ticket in event_tickets):
+ return request.redirect('/event/%s/register?registration_error_code=insufficient_seats' % event.id)
+ attendees_sudo = self._create_attendees_from_registration_post(event, registrations_data)
return request.redirect(('/event/%s/registration/success?' % event.id) + werkzeug.urls.url_encode({'registration_ids': ",".join([str(id) for id in attendees_sudo.ids])}))
diff --git a/addons/website_event/views/event_templates_page_registration.xml b/addons/website_event/views/event_templates_page_registration.xml
index fb95f566cf6..1294cff84c5 100644
--- a/addons/website_event/views/event_templates_page_registration.xml
+++ b/addons/website_event/views/event_templates_page_registration.xml
@@ -148,6 +148,11 @@
itemscope="itemscope" itemprop="offers" itemtype="http://schema.org/AggregateOffer">
+
+
+ Registration failed! These tickets are not available anymore.
+
+
diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py
index 818e8751e08..fcfd87730c5 100644
--- a/addons/website_event_sale/controllers/main.py
+++ b/addons/website_event_sale/controllers/main.py
@@ -2,7 +2,6 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from collections import defaultdict
-from odoo import _
from odoo.http import request, route
from odoo.addons.website_event.controllers.main import WebsiteEventController
diff --git a/addons/website_event_sale/views/website_sale_templates.xml b/addons/website_event_sale/views/website_sale_templates.xml
index d27c37c4cc2..ef120adc0a8 100644
--- a/addons/website_event_sale/views/website_sale_templates.xml
+++ b/addons/website_event_sale/views/website_sale_templates.xml
@@ -61,7 +61,7 @@
-
+
Registered