From 89709cb3a7b43e098e40084f02be3808d46cadfa Mon Sep 17 00:00:00 2001 From: Florian Vranckx Date: Thu, 12 Jan 2023 15:15:39 +0000 Subject: [PATCH] [FIX] website_event : check ticket id There was previously no check that the ticket id belong to the selected event. For better data integrity, this should be the case closes odoo/odoo#112147 X-original-commit: ea645c9c9f301c340d95bd30260b3aa0cd255920 Signed-off-by: Vranckx Florian (flvr) Signed-off-by: Thibault Delavallee (tde) --- addons/website_event/controllers/main.py | 5 ++++- addons/website_event/i18n/website_event.pot | 15 +++++++++++---- .../tests/test_event_internals.py | 18 ++++++++++++++---- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index dc77d5cfe6f..c0b33bcfa5d 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -20,7 +20,7 @@ from odoo.http import request from odoo.osv import expression from odoo.tools.misc import get_lang from odoo.tools import lazy - +from odoo.exceptions import UserError class WebsiteEventController(http.Controller): @@ -262,6 +262,9 @@ class WebsiteEventController(http.Controller): """ allowed_fields = request.env['event.registration']._get_website_registration_allowed_fields() registration_fields = {key: v for key, v in request.env['event.registration']._fields.items() if key in allowed_fields} + for ticket_id in list(filter(lambda x: x is not None, [form_details[field] if 'event_ticket_id' in field else None for field in form_details.keys()])): + if int(ticket_id) not in event.event_ticket_ids.ids and len(event.event_ticket_ids.ids) > 0: + raise UserError(_("This ticket is not available for sale for this event")) registrations = {} global_values = {} for key, value in form_details.items(): diff --git a/addons/website_event/i18n/website_event.pot b/addons/website_event/i18n/website_event.pot index 216f8d1cf5a..990486d14b0 100644 --- a/addons/website_event/i18n/website_event.pot +++ b/addons/website_event/i18n/website_event.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server saas~16.1\n" +"Project-Id-Version: Odoo Server saas~16.1+e\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-17 10:53+0000\n" -"PO-Revision-Date: 2023-01-17 10:53+0000\n" +"POT-Creation-Date: 2023-02-07 13:49+0000\n" +"PO-Revision-Date: 2023-02-07 13:49+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -849,8 +849,8 @@ msgid "Ref:" msgstr "" #. module: website_event -#. odoo-python #. odoo-javascript +#. odoo-python #: code:addons/website_event/models/event_event.py:0 #: code:addons/website_event/static/src/js/register_toaster_widget.js:0 #: model:ir.model.fields.selection,name:website_event.selection__website_event_menu__menu_type__register @@ -1049,6 +1049,13 @@ msgstr "" msgid "This technical menu displays all event sub-menu items." msgstr "" +#. module: website_event +#. odoo-python +#: code:addons/website_event/controllers/main.py:0 +#, python-format +msgid "This ticket is not available for sale for this event" +msgstr "" + #. module: website_event #: model_terms:ir.ui.view,arch_db:website_event.registration_attendee_details msgid "Ticket #" diff --git a/addons/website_event_questions/tests/test_event_internals.py b/addons/website_event_questions/tests/test_event_internals.py index a596f48f968..3b73b447164 100644 --- a/addons/website_event_questions/tests/test_event_internals.py +++ b/addons/website_event_questions/tests/test_event_internals.py @@ -44,16 +44,26 @@ class TestEventData(TestEventQuestionCommon): 'date_begin': FieldsDatetime.to_string(datetime.today() + timedelta(days=1)), 'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)), }) + ticket_id_1 = self.env['event.event.ticket'].create([{ + 'name': 'Regular', + 'event_id': event.id, + 'seats_max': 200, + }]) + ticket_id_2 = self.env['event.event.ticket'].create([{ + 'name': 'VIP', + 'event_id': event.id, + 'seats_max': 200, + }]) form_details = { '1-name': 'Pixis', '1-email': 'pixis@gmail.com', '1-phone': '+32444444444', - '1-event_ticket_id': '2', + '1-event_ticket_id': ticket_id_1.id, '2-name': 'Geluchat', '2-email': 'geluchat@gmail.com', '2-phone': '+32777777777', - '2-event_ticket_id': '3', + '2-event_ticket_id': ticket_id_2.id, 'question_answer-1-%s' % self.event_question_1.id: '5', 'question_answer-2-%s' % self.event_question_1.id: '9', 'question_answer-0-%s' % self.event_question_2.id: '7', @@ -64,12 +74,12 @@ class TestEventData(TestEventQuestionCommon): registrations = WebsiteEvent()._process_attendees_form(event, form_details) self.assertEqual(registrations, [ - {'name': 'Pixis', 'email': 'pixis@gmail.com', 'phone': '+32444444444', 'event_ticket_id': 2, + {'name': 'Pixis', 'email': 'pixis@gmail.com', 'phone': '+32444444444', 'event_ticket_id': ticket_id_1.id, 'registration_answer_ids': [ (0, 0, {'question_id': self.event_question_1.id, 'value_answer_id': 5}), (0, 0, {'question_id': self.event_question_2.id, 'value_answer_id': 7}), (0, 0, {'question_id': self.event_question_3.id, 'value_text_box': 'Free Text'})]}, - {'name': 'Geluchat', 'email': 'geluchat@gmail.com', 'phone': '+32777777777', 'event_ticket_id': 3, + {'name': 'Geluchat', 'email': 'geluchat@gmail.com', 'phone': '+32777777777', 'event_ticket_id': ticket_id_2.id, 'registration_answer_ids': [ (0, 0, {'question_id': self.event_question_1.id, 'value_answer_id': 9}), (0, 0, {'question_id': self.event_question_2.id, 'value_answer_id': 7}),