Sélectionner une révision Git
website_event.py 2,58 Kio
# Copyright 2024 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import _
from odoo.exceptions import ValidationError
from odoo.http import request
from odoo.tools import str2bool
from odoo.addons.website_event_questions.controllers.main import WebsiteEvent
class WebsiteEventPartnerQuestion(WebsiteEvent):
def _process_attendees_form(self, event, form_details):
"""Process data posted from the attendee details form."""
registrations = super()._process_attendees_form(event, form_details)
fields_to_update = {}
for key, value in form_details.items():
if key.startswith("question_contact-"):
_dummy, question = key.split("-")
# ruff: noqa: B023
question_id = event.sudo().partner_question_ids.filtered(
lambda q: q.id == int(question)
)
if not question_id:
raise ValidationError(_("Answer not in event."))
ir_field_id = question_id.field_id.ir_field_id
if ir_field_id.ttype == "integer":
fields_to_update[ir_field_id.name] = int(value) if value else False
if ir_field_id.ttype == "many2one":
fields_to_update[ir_field_id.name] = int(value) if value else False
elif ir_field_id.ttype == "float":
fields_to_update[ir_field_id.name] = (
float(value) if value else False
)
elif ir_field_id.ttype == "boolean":
fields_to_update[ir_field_id.name] = (
str2bool(value) if value else False
)
else:
fields_to_update[ir_field_id.name] = value
if key.startswith("question_contact_multi-"):
_dummy, question, _answer = key.split("-")
# ruff: noqa: B023
question_id = event.sudo().partner_question_ids.filtered(
lambda q: q.id == int(question)
)
if not question_id:
raise ValidationError(_("Answer not in event."))
field_name = question_id.field_id.ir_field_id.name
if fields_to_update.get(field_name):
fields_to_update[field_name][0][2].append(int(value))
else:
fields_to_update[field_name] = [(6, 0, [int(value)])]
request.env.user.partner_id.update(fields_to_update)
return registrations