diff --git a/partner_event/README.rst b/partner_event/README.rst new file mode 100644 index 000000000..7eb86677d --- /dev/null +++ b/partner_event/README.rst @@ -0,0 +1,129 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +====================== +Link partner to events +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:23c386ee6a1368b2996b3a08ee30b9f0bd78971c8b980dfa889c4635a2db9b86 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github + :target: https://github.com/OCA/event/tree/19.0/partner_event + :alt: OCA/event +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/event-19-0/event-19-0-partner_event + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/event&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module links partners with the events they are registered through a +smart button. + +It also includes: + +- Search partners by their event attendees. +- Search partners by number of events attendees. +- Search partners by number of events attended. +- Partner column is visible on registration one2many list inside the + event. +- Action in partner tree view 'More' button, to register several + partners to an event +- Restricts partner deletion when event attendees are linked to it. +- Onchange for partner_id removed in v16 core in Event Registration- + including functionality here + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +There is a new option in event form view, "Create Partners in +registration". If this option is checked, when you add registrations to +this event, partners will be created automatically with name, email, +phone and mobile fields. + +If partner already exists and user only fills email, name, phone and +mobile fields will be filled with partner's data. + +The event registration values email, name, phone and mobile will be +changed if the related partner values are changed and the event end date +hasn't passed yet. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa + +Contributors +------------ + +- `Tecnativa `__: + + - Pedro M. Baeza + - Antonio Espinosa + - Jairo Llopis + - Vicent Cubells + - David Vidal + - Rafael Blasco + - Víctor Martínez + - Stefan Ungureanu + - Carolina Fernandez + - Pilar Vargas + +- `Antiun `__: + + - Javier Iniesta + +- Anil Kesariya +- `Heliconia Solutions Pvt. Ltd. `__ + + - Bhavesh Heliconia + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/event `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_event/__init__.py b/partner_event/__init__.py new file mode 100644 index 000000000..700d6ab98 --- /dev/null +++ b/partner_event/__init__.py @@ -0,0 +1,3 @@ +from . import models +from . import wizard +from .hooks import post_init_hook diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py new file mode 100644 index 000000000..e27658fb9 --- /dev/null +++ b/partner_event/__manifest__.py @@ -0,0 +1,30 @@ +# Copyright 2014 Tecnativa S.L. - Pedro M. Baeza +# Copyright 2015 Tecnativa S.L. - Javier Iniesta +# Copyright 2016 Tecnativa S.L. - Antonio Espinosa +# Copyright 2016 Tecnativa S.L. - Vicent Cubells +# Copyright 2017 Tecnativa S.L. - David Vidal +# Copyright 2018 Jupical Technologies Pvt. Ltd. - Anil Kesariya +# Copyright 2020 Tecnativa S.L. - Víctor Martínez +# Copyright 2023 Tecnativa S.L. - Carolina Fernandez +# Copyright 2024 Tecnativa S.L. - Juan José Seguí +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Link partner to events", + "version": "19.0.1.0.0", + "category": "Marketing", + "author": "Tecnativa,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/event", + "development_status": "Production/Stable", + "license": "AGPL-3", + "depends": ["event"], + "data": [ + "security/ir.model.access.csv", + "views/res_partner_view.xml", + "views/event_event_view.xml", + "views/event_registration_view.xml", + "wizard/res_partner_register_event_view.xml", + ], + "post_init_hook": "post_init_hook", + "installable": True, +} diff --git a/partner_event/hooks.py b/partner_event/hooks.py new file mode 100644 index 000000000..8d5d5f4ae --- /dev/null +++ b/partner_event/hooks.py @@ -0,0 +1,18 @@ +# Copyright 2019 David Vidal +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html + + +def post_init_hook(env): + """Preload proper attendee partner for existing registrations using + the same rules the module does""" + attendees_emails = env["event.registration"].formatted_read_group( + domain=[("email", "!=", False)], groupby=["email"] + ) + for email in attendees_emails: + # Order was done for avoiding extra queries for sorting the results + attendee_partner = env["res.partner"].search( + [("email", "=ilike", email["email"])], limit=1, order="id" + ) + if attendee_partner: + attendees = env["event.registration"].search(email["__extra_domain"]) + attendees.write({"attendee_partner_id": attendee_partner.id}) diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po new file mode 100644 index 000000000..bea4d3ce9 --- /dev/null +++ b/partner_event/i18n/es.po @@ -0,0 +1,142 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-11-03 16:30+0000\n" +"PO-Revision-Date: 2024-01-13 16:36+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count +#: model:ir.model.fields,field_description:partner_event.field_res_users__registration_count +msgid "Attendances" +msgstr "Asistencias" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_registration_search +msgid "Attended" +msgstr "Asistido" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id +msgid "Attendee Partner" +msgstr "Empresa asistente" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +msgid "Booked by" +msgstr "Reservado por" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_partner_form_registrations +msgid "Count of events with confirmed registrations." +msgstr "Cantidad de eventos con asistencia confirmada." + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__create_partner +#: model:ir.model.fields,field_description:partner_event.field_event_session__create_partner +msgid "Create Partners in registration" +msgstr "Crear empresas en el registro" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Create registrations" +msgstr "Crear registros" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__event +msgid "Event" +msgstr "Evento" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_registration +msgid "Event Registration" +msgstr "Registro a evento" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__event_registration_ids +#: model:ir.model.fields,field_description:partner_event.field_res_users__event_registration_ids +msgid "Event registrations" +msgstr "Registros a eventos" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id +msgid "ID" +msgstr "ID" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_res_partner_filter +msgid "Linked events" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_base_partner_merge_automatic_wizard +msgid "Merge Partner Wizard" +msgstr "Asistente para la Fusión de Socios" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +msgid "Register in an event" +msgstr "Registrar en un evento" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner_register_event +msgid "Register partner for event" +msgstr "Registrar empresa al evento" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +msgid "Registrations" +msgstr "Registros" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "Selecciona el evento para registrar" diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po new file mode 100644 index 000000000..9614efa9d --- /dev/null +++ b/partner_event/i18n/it.po @@ -0,0 +1,141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-06-25 09:25+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count +#: model:ir.model.fields,field_description:partner_event.field_res_users__registration_count +msgid "Attendances" +msgstr "Presenze" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_registration_search +msgid "Attended" +msgstr "Presente" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id +msgid "Attendee Partner" +msgstr "Partner partecipante" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +msgid "Booked by" +msgstr "Prenotato da" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "Annulla" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Contact" +msgstr "Contatto" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_partner_form_registrations +msgid "Count of events with confirmed registrations." +msgstr "Numero di eventi con registrazioni confermate." + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__create_partner +#: model:ir.model.fields,field_description:partner_event.field_event_session__create_partner +msgid "Create Partners in registration" +msgstr "Crea partner alla registrazione" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Create registrations" +msgstr "Crea registrazioni" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__event +msgid "Event" +msgstr "Evento" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_registration +msgid "Event Registration" +msgstr "Registrazione evento" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__event_registration_ids +#: model:ir.model.fields,field_description:partner_event.field_res_users__event_registration_ids +msgid "Event registrations" +msgstr "Registrazioni evento" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id +msgid "ID" +msgstr "ID" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_res_partner_filter +msgid "Linked events" +msgstr "Eventi collegati" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_base_partner_merge_automatic_wizard +msgid "Merge Partner Wizard" +msgstr "Procedura guidata unione partner" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +msgid "Register in an event" +msgstr "Registrare in un evento" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner_register_event +msgid "Register partner for event" +msgstr "Registrare partner per l'evento" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +msgid "Registrations" +msgstr "Registrazioni" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "Selezionare evento da registrare" diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot new file mode 100644 index 000000000..9cf44a469 --- /dev/null +++ b/partner_event/i18n/partner_event.pot @@ -0,0 +1,138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count +#: model:ir.model.fields,field_description:partner_event.field_res_users__registration_count +msgid "Attendances" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_registration_search +msgid "Attended" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id +msgid "Attendee Partner" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +msgid "Booked by" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Contact" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_partner_form_registrations +msgid "Count of events with confirmed registrations." +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__create_partner +#: model:ir.model.fields,field_description:partner_event.field_event_session__create_partner +msgid "Create Partners in registration" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Create registrations" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_uid +msgid "Created by" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date +msgid "Created on" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name +msgid "Display Name" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__event +msgid "Event" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_registration +msgid "Event Registration" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__event_registration_ids +#: model:ir.model.fields,field_description:partner_event.field_res_users__event_registration_ids +msgid "Event registrations" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id +msgid "ID" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_date +msgid "Last Updated on" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_res_partner_filter +msgid "Linked events" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_base_partner_merge_automatic_wizard +msgid "Merge Partner Wizard" +msgstr "" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +msgid "Register in an event" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner_register_event +msgid "Register partner for event" +msgstr "" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +msgid "Registrations" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "" diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po new file mode 100644 index 000000000..ceb02c9ad --- /dev/null +++ b/partner_event/i18n/sl.po @@ -0,0 +1,148 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-27 09:20+0000\n" +"PO-Revision-Date: 2015-08-30 07:43+0200\n" +"Last-Translator: Matjaz Mozetic \n" +"Language-Team: \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.8.4\n" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count +#: model:ir.model.fields,field_description:partner_event.field_res_users__registration_count +msgid "Attendances" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_registration_search +msgid "Attended" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id +#, fuzzy +msgid "Attendee Partner" +msgstr "Partner" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +msgid "Booked by" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Contact" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_partner_form_registrations +msgid "Count of events with confirmed registrations." +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__create_partner +#: model:ir.model.fields,field_description:partner_event.field_event_session__create_partner +#, fuzzy +msgid "Create Partners in registration" +msgstr "Prijave na dogodek" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +#, fuzzy +msgid "Create registrations" +msgstr "Prijave na dogodek" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_uid +msgid "Created by" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date +msgid "Created on" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name +msgid "Display Name" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__event +#, fuzzy +msgid "Event" +msgstr "Dogodki" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_registration +#, fuzzy +msgid "Event Registration" +msgstr "Prijave na dogodek" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__event_registration_ids +#: model:ir.model.fields,field_description:partner_event.field_res_users__event_registration_ids +msgid "Event registrations" +msgstr "Prijave na dogodek" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id +msgid "ID" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_date +msgid "Last Updated on" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_res_partner_filter +msgid "Linked events" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_base_partner_merge_automatic_wizard +msgid "Merge Partner Wizard" +msgstr "" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +#, fuzzy +msgid "Register in an event" +msgstr "Registracijska številka" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner_register_event +msgid "Register partner for event" +msgstr "" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +msgid "Registrations" +msgstr "Prijave" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "" diff --git a/partner_event/i18n/sv.po b/partner_event/i18n/sv.po new file mode 100644 index 000000000..27561bc48 --- /dev/null +++ b/partner_event/i18n/sv.po @@ -0,0 +1,141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-19 14:36+0000\n" +"Last-Translator: jakobkrabbe \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count +#: model:ir.model.fields,field_description:partner_event.field_res_users__registration_count +msgid "Attendances" +msgstr "Deltaganden" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_registration_search +msgid "Attended" +msgstr "Deltog" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id +msgid "Attendee Partner" +msgstr "Partner till deltagare" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +msgid "Booked by" +msgstr "Bokad av" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "Avbryt" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_partner_form_registrations +msgid "Count of events with confirmed registrations." +msgstr "Antal evenemang med bekräftade anmälningar." + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__create_partner +#: model:ir.model.fields,field_description:partner_event.field_event_session__create_partner +msgid "Create Partners in registration" +msgstr "Skapa partners vid anmälning" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Create registrations" +msgstr "Skapa anmälningar" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__event +msgid "Event" +msgstr "Evenemang" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_registration +msgid "Event Registration" +msgstr "Evenemangsanmälning" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner__event_registration_ids +#: model:ir.model.fields,field_description:partner_event.field_res_users__event_registration_ids +msgid "Event registrations" +msgstr "Evenemangsanmälningar" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id +msgid "ID" +msgstr "ID" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.view_res_partner_filter +msgid "Linked events" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_base_partner_merge_automatic_wizard +msgid "Merge Partner Wizard" +msgstr "Slå samman kontakter guide" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +msgid "Register in an event" +msgstr "Anmäl dig till ett evenemang" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner_register_event +msgid "Register partner for event" +msgstr "Anmäl partner till evenemanget" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +msgid "Registrations" +msgstr "Anmälningar" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "Välj evenemang att anmäla" diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py new file mode 100644 index 000000000..9a9260bff --- /dev/null +++ b/partner_event/models/__init__.py @@ -0,0 +1,3 @@ +from . import event_event +from . import event_registration +from . import res_partner diff --git a/partner_event/models/event_event.py b/partner_event/models/event_event.py new file mode 100644 index 000000000..2dd68d21b --- /dev/null +++ b/partner_event/models/event_event.py @@ -0,0 +1,15 @@ +# Copyright 2014 Tecnativa S.L. - Pedro M. Baeza +# Copyright 2015 Tecnativa S.L. - Javier Iniesta +# Copyright 2016 Tecnativa S.L. - Antonio Espinosa +# Copyright 2016 Tecnativa S.L. - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class EventEvent(models.Model): + _inherit = "event.event" + + create_partner = fields.Boolean( + string="Create Partners in registration", default=False + ) diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py new file mode 100644 index 000000000..1dfb3e0fa --- /dev/null +++ b/partner_event/models/event_registration.py @@ -0,0 +1,93 @@ +# Copyright 2015 Tecnativa - Javier Iniesta +# Copyright 2016 Tecnativa - Antonio Espinosa +# Copyright 2016 Tecnativa - Vicent Cubells +# Copyright 2018 Jupical Technologies Pvt. Ltd. - Anil Kesariya +# Copyright 2020 Tecnativa - Víctor Martínez +# Copyright 2014-2023 Tecnativa - Pedro M. Baeza +# Copyright 2023 Tecnativa - Carolina Fernandez +# Copyright 2024 Tecnativa - Juan José Seguí +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models + + +class EventRegistration(models.Model): + _inherit = "event.registration" + + partner_id = fields.Many2one(ondelete="restrict") + attendee_partner_id = fields.Many2one( + comodel_name="res.partner", + string="Attendee Partner", + ondelete="restrict", + copy=False, + index=True, + ) + + def _prepare_partner(self, vals): + return { + "name": vals.get("name") or vals.get("email"), + "email": vals.get("email", False), + "phone": vals.get("phone", False), + } + + def _update_attendee_partner_id(self, vals): + # Don't update if doing a partner merging + if ( + not vals.get("attendee_partner_id") + and vals.get("email") + and not self.env.context.get("partner_event_merging") + ): + Partner = self.env["res.partner"] + Event = self.env["event.event"] + # Look for a partner with that email + email = vals.get("email").replace("%", "").replace("_", "\\_") + # Order was done for avoiding extra queries for sorting the results + attendee_partner = Partner.search( + [("email", "=ilike", email)], limit=1, order="id" + ) + event = Event.browse() + if vals.get("event_id"): + event = Event.browse(vals["event_id"]) + if attendee_partner: + for field in {"name", "phone"}: + vals[field] = vals.get(field) or attendee_partner[field] + elif event and event.create_partner: + # Create partner + attendee_partner = Partner.sudo().create(self._prepare_partner(vals)) + vals["attendee_partner_id"] = attendee_partner.id + return vals + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + self._update_attendee_partner_id(vals) + return super().create(vals_list) + + def write(self, vals): + self._update_attendee_partner_id(vals) + return super().write(vals) + + def partner_data_update(self, data): + reg_data = {k: v for k, v in data.items() if k in ["name", "email", "phone"]} + if reg_data: + # Only update registration data if this event is not old + registrations = self.filtered( + lambda x: x.event_id.date_end >= fields.Datetime.now() + ) + registrations.write(reg_data) + + @api.onchange("attendee_partner_id", "partner_id") + def _onchange_partner_id(self): + if self.attendee_partner_id: + if not self.partner_id: + self.partner_id = self.attendee_partner_id + get_attendee_partner_address = { + "get_attendee_partner_address": self.attendee_partner_id, + } + self = self.with_context(**get_attendee_partner_address) + for registration in self: + if registration.partner_id: + vals = registration._synchronize_partner_values( + registration.partner_id + ) + registration.update(vals) + return {} diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py new file mode 100644 index 000000000..22fc1cee6 --- /dev/null +++ b/partner_event/models/res_partner.py @@ -0,0 +1,42 @@ +# Copyright 2014 Tecnativa S.L. - Pedro M. Baeza +# Copyright 2015 Tecnativa S.L. - Javier Iniesta +# Copyright 2016 Tecnativa S.L. - Antonio Espinosa +# Copyright 2016 Tecnativa S.L. - Vicent Cubells +# Copyright 2020 Tecnativa S.L. - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + event_registration_ids = fields.One2many( + string="Event registrations", + comodel_name="event.registration", + inverse_name="attendee_partner_id", + ) + registration_count = fields.Integer( + string="Attendances", compute="_compute_registration_count", store=False + ) + + @api.depends("event_registration_ids", "event_registration_ids.state") + def _compute_registration_count(self): + for partner in self: + partner.registration_count = self.env["event.registration"].search_count( + [ + ("attendee_partner_id", "child_of", partner.id), + ("state", "not in", ("cancel", "draft")), + ] + ) + + def write(self, data): + res = super().write(data) + self.mapped("event_registration_ids").partner_data_update(data) + return res + + def address_get(self, adr_pref=None): + attendee_partner = self.env.context.get("get_attendee_partner_address", False) + if attendee_partner: + return super(ResPartner, attendee_partner).address_get(adr_pref) + return super().address_get(adr_pref) diff --git a/partner_event/pyproject.toml b/partner_event/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/partner_event/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/partner_event/readme/CONFIGURE.md b/partner_event/readme/CONFIGURE.md new file mode 100644 index 000000000..7c0dc6e13 --- /dev/null +++ b/partner_event/readme/CONFIGURE.md @@ -0,0 +1,11 @@ +There is a new option in event form view, "Create Partners in +registration". If this option is checked, when you add registrations to +this event, partners will be created automatically with name, email, +phone and mobile fields. + +If partner already exists and user only fills email, name, phone and +mobile fields will be filled with partner's data. + +The event registration values email, name, phone and mobile will be +changed if the related partner values are changed and the event end date +hasn't passed yet. diff --git a/partner_event/readme/CONTRIBUTORS.md b/partner_event/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..2f363146c --- /dev/null +++ b/partner_event/readme/CONTRIBUTORS.md @@ -0,0 +1,16 @@ +- [Tecnativa](https://www.tecnativa.com): + - Pedro M. Baeza + - Antonio Espinosa + - Jairo Llopis + - Vicent Cubells + - David Vidal + - Rafael Blasco + - Víctor Martínez + - Stefan Ungureanu + - Carolina Fernandez + - Pilar Vargas +- [Antiun](https://antiun.com/): + - Javier Iniesta +- Anil Kesariya +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/partner_event/readme/DESCRIPTION.md b/partner_event/readme/DESCRIPTION.md new file mode 100644 index 000000000..568d6afd8 --- /dev/null +++ b/partner_event/readme/DESCRIPTION.md @@ -0,0 +1,15 @@ +This module links partners with the events they are registered through a +smart button. + +It also includes: + +- Search partners by their event attendees. +- Search partners by number of events attendees. +- Search partners by number of events attended. +- Partner column is visible on registration one2many list inside the + event. +- Action in partner tree view 'More' button, to register several + partners to an event +- Restricts partner deletion when event attendees are linked to it. +- Onchange for partner_id removed in v16 core in Event Registration- + including functionality here diff --git a/partner_event/security/ir.model.access.csv b/partner_event/security/ir.model.access.csv new file mode 100644 index 000000000..502be1b2f --- /dev/null +++ b/partner_event/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_res_partner_register_event,access_res_partner_register_event,model_res_partner_register_event,base.group_user,1,1,1,0 diff --git a/partner_event/static/description/icon.png b/partner_event/static/description/icon.png new file mode 100644 index 000000000..32fb8193e Binary files /dev/null and b/partner_event/static/description/icon.png differ diff --git a/partner_event/static/description/icon.svg b/partner_event/static/description/icon.svg new file mode 100644 index 000000000..db3d2a7e6 --- /dev/null +++ b/partner_event/static/description/icon.svg @@ -0,0 +1 @@ + diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html new file mode 100644 index 000000000..4cb826bbe --- /dev/null +++ b/partner_event/static/description/index.html @@ -0,0 +1,477 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + + +
+ + diff --git a/partner_event/tests/__init__.py b/partner_event/tests/__init__.py new file mode 100644 index 000000000..22c3ab146 --- /dev/null +++ b/partner_event/tests/__init__.py @@ -0,0 +1 @@ +from . import test_event_registration diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py new file mode 100644 index 000000000..59ce3e037 --- /dev/null +++ b/partner_event/tests/test_event_registration.py @@ -0,0 +1,113 @@ +# Copyright 2014 Tecnativa S.L. - Pedro M. Baeza +# Copyright 2015 Tecnativa S.L. - Javier Iniesta +# Copyright 2016 Tecnativa S.L. - Antonio Espinosa +# Copyright 2016 Tecnativa S.L. - Vicent Cubells +# Copyright 2017 Tecnativa - David Vidal +# Copyright 2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from datetime import datetime, timedelta + +from psycopg2 import IntegrityError + +from odoo import fields +from odoo.tools import mute_logger + +from odoo.addons.base.tests.common import BaseCommon + + +class TestEventRegistration(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.event_0 = cls.env["event.event"].create( + { + "name": "Test event", + "date_begin": fields.Datetime.now(), + "date_end": fields.Datetime.now(), + "seats_limited": True, + "seats_max": "5", + } + ) + cls.event_0.create_partner = True + registration_model = cls.env["event.registration"].with_context( + registration_force_draft=True + ) + partner_model = cls.env["res.partner"] + cls.partner_01 = partner_model.create( + { + "name": "Test Partner 01", + "email": "email01@test.com", + "phone": "254728911", + } + ) + cls.registration_01 = registration_model.create( + {"email": "email01@test.com", "event_id": cls.event_0.id} + ) + cls.registration_02 = registration_model.create( + { + "email": "email02@test.com", + "event_id": cls.event_0.id, + "name": "Test Registration 02", + "phone": "254728911", + } + ) + + def test_create(self): + self.assertEqual(self.partner_01.name, self.registration_01.name) + self.assertEqual(self.partner_01.email, self.registration_01.email) + self.assertEqual(self.partner_01.phone, self.registration_01.phone) + partner_02 = self.registration_02.attendee_partner_id + self.assertEqual(partner_02.name, self.registration_02.name) + self.assertEqual(partner_02.email, self.registration_02.email) + self.assertEqual(partner_02.phone, self.registration_02.phone) + + def test_count_registrations(self): + event_1 = self.event_0.copy() + self.registration_01.state = "draft" + self.registration_02.state = "draft" + self.assertEqual(self.partner_01.registration_count, 0) + self.registration_01.state = "open" + self.assertEqual(self.partner_01.registration_count, 1) + self.registration_02.state = "open" + self.registration_02.attendee_partner_id = self.partner_01 + self.registration_02.event_id = event_1 + self.assertEqual(self.partner_01.registration_count, 2) + self.registration_01.state = "cancel" + self.assertEqual(self.partner_01.registration_count, 1) + self.registration_02.state = "done" + self.assertEqual(self.partner_01.registration_count, 1) + + def test_button_register(self): + event_1 = self.event_0.copy() + wizard = self.env["res.partner.register.event"].create({"event": event_1.id}) + active_ids = [self.partner_01.id, self.registration_02.attendee_partner_id.id] + wizard.with_context(active_ids=active_ids).button_register() + + def test_data_update(self): + event_2 = self.event_0.copy() + self.yesterday = datetime.now() - timedelta(days=1) + self.tomorrow = datetime.now() + timedelta(days=1) + self.last_month = datetime.now() - timedelta(days=30) + # Set an old event + event_2.write({"date_begin": self.last_month}) + event_2.write({"date_end": self.yesterday}) + self.registration_02.event_id = event_2 + self.registration_02.attendee_partner_id = self.partner_01 + # Update partner for an old event + self.partner_01.write({"email": "new@test.com"}) + self.assertNotEqual(event_2.registration_ids.email, "new@test.com") + # Update partner for a current event + event_2.write({"date_end": self.tomorrow}) + self.partner_01.write({"email": "new@test.com"}) + self.assertEqual(event_2.registration_ids.email, "new@test.com") + + @mute_logger("odoo.sql_db", "odoo.models.unlink") + def test_delete_registered_partner(self): + # We can't delete a partner with registrations + with self.assertRaises(IntegrityError): + self.partner_01.unlink() + # Create a brand new partner and delete it + partner3 = self.env["res.partner"].create({"name": "unregistered partner"}) + partner3.unlink() + self.assertFalse(partner3.exists()) diff --git a/partner_event/views/event_event_view.xml b/partner_event/views/event_event_view.xml new file mode 100644 index 000000000..59f906148 --- /dev/null +++ b/partner_event/views/event_event_view.xml @@ -0,0 +1,16 @@ + + + + + Events (with partner) + event.event + + + + + + + + + diff --git a/partner_event/views/event_registration_view.xml b/partner_event/views/event_registration_view.xml new file mode 100644 index 000000000..80fb9accf --- /dev/null +++ b/partner_event/views/event_registration_view.xml @@ -0,0 +1,38 @@ + + + + + event.registration + + + + + + + + + event.registration + + + + + + + + + Search attended registrations + event.registration + + + + + + + + diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml new file mode 100644 index 000000000..dd0258d27 --- /dev/null +++ b/partner_event/views/res_partner_view.xml @@ -0,0 +1,47 @@ + + + + + event.registration + Registrations + list,form,calendar,graph + [("attendee_partner_id", "child_of", active_ids)] + {'search_default_attendee_partner_id': active_id, 'default_attendee_partner_id': active_id, 'search_default_expected': True} + + + Partner Form with registrations + res.partner + + +
+ +
+
+
+ + res.partner.select + res.partner + + + + + + + +
diff --git a/partner_event/wizard/__init__.py b/partner_event/wizard/__init__.py new file mode 100644 index 000000000..c42ae9d6e --- /dev/null +++ b/partner_event/wizard/__init__.py @@ -0,0 +1,2 @@ +from . import base_partner_merge_automatic_wizard +from . import res_partner_register_event diff --git a/partner_event/wizard/base_partner_merge_automatic_wizard.py b/partner_event/wizard/base_partner_merge_automatic_wizard.py new file mode 100644 index 000000000..49708dafd --- /dev/null +++ b/partner_event/wizard/base_partner_merge_automatic_wizard.py @@ -0,0 +1,14 @@ +# Copyright 2023 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import models + + +class BasePartnerMergeAutomaticWizard(models.TransientModel): + _inherit = "base.partner.merge.automatic.wizard" + + def action_merge(self): + """Inject context for later intercept it when the merge process does a flush, + and an update is launched on the partner that recomputes attendee_partner_id. + """ + self = self.with_context(partner_event_merging=True) + return super().action_merge() diff --git a/partner_event/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py new file mode 100644 index 000000000..951513f23 --- /dev/null +++ b/partner_event/wizard/res_partner_register_event.py @@ -0,0 +1,43 @@ +# Copyright 2015 Tecnativa - Javier Iniesta +# Copyright 2016 Tecnativa - Antonio Espinosa +# Copyright 2016 Tecnativa - Vicent Cubells +# Copyright 2018 Jupical Technologies Pvt. Ltd. - Anil Kesariya +# Copyright 2020 Tecnativa - Víctor Martínez +# Copyright 2014-2023 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResPartnerRegisterEvent(models.TransientModel): + _name = "res.partner.register.event" + _description = "Register partner for event" + + event = fields.Many2one( + comodel_name="event.event", required=True, ondelete="cascade" + ) + + def _prepare_registration(self, partner): + return { + "event_id": self.event.id, + "partner_id": partner.id, + "attendee_partner_id": partner.id, + "name": partner.name, + "email": partner.email, + "phone": partner.phone, + } + + def button_register(self): + vals_list = [] + Registration = self.env["event.registration"] + for partner in self.env["res.partner"].browse( + self.env.context.get("active_ids", []) + ): + if not Registration.search( + [ + ("event_id", "=", self.event.id), + ("attendee_partner_id", "=", partner.id), + ] + ): + vals_list.append(self._prepare_registration(partner)) + self.env["event.registration"].create(vals_list) diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml new file mode 100644 index 000000000..c1846c61f --- /dev/null +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -0,0 +1,40 @@ + + + + + Register in an event + res.partner.register.event + +
+ + + +
+
+
+
+
+
+
+ + Register in an event + res.partner.register.event + form + + + new + +