Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • a1f66f51335fe4983f8c0e5f1d7019caab21daae
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
  • 12.0-lm-00 protégée
5 résultats

res_partner_lists.py

Blame
  • 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