diff --git a/partner_event/README.rst b/partner_event/README.rst new file mode 100644 index 000000000..cef58987d --- /dev/null +++ b/partner_event/README.rst @@ -0,0 +1,112 @@ +====================== +Link partner to events +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/licence-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/15.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-15-0/event-15-0-partner_event + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/199/15.0 + :alt: Try me on Runbot + +|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. + +**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 smashing 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 + +* `Antiun `__: + + * Javier Iniesta + +* `Anil Kesariya` + +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..312807ddb --- /dev/null +++ b/partner_event/__manifest__.py @@ -0,0 +1,29 @@ +# 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 +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Link partner to events", + "version": "16.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..d9b04a543 --- /dev/null +++ b/partner_event/hooks.py @@ -0,0 +1,19 @@ +# Copyright 2019 David Vidal +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import SUPERUSER_ID, api + + +def post_init_hook(cr, registry): + """Preload proper attendee partner for existing registrations using + the same rules the module does""" + env = api.Environment(cr, SUPERUSER_ID, {}) + attendees_emails = env["event.registration"].read_group( + [("email", "!=", False)], ["email"], groupby="email" + ) + for email in attendees_emails: + attendee_partner = env["res.partner"].search( + [("email", "=ilike", email["email"])], limit=1 + ) + if attendee_partner: + attendees = env["event.registration"].search(email["__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..dabb15918 --- /dev/null +++ b/partner_event/i18n/es.po @@ -0,0 +1,166 @@ +# 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: 2019-08-20 14:44+0000\n" +"Last-Translator: Jairo Llopis \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 3.7.1\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 "" + +#. 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.fields,field_description:partner_event.field_res_partner_register_event__errors +msgid "Errors" +msgstr "Errores" + +#. 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____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. 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: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" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "" +"These partners haven't been registered because they\\'re " +"already registered or other error occurred" +msgstr "" +"Estas empresas no se han registrado porque ya estaban " +"registradas u otro error ocurrió" + +#~ msgid "Event attended registrations number" +#~ msgstr "Nº de registrados que han asistido al evento" + +#~ msgid "Event registrations number" +#~ msgstr "Nº Registros a eventos" + +#~ msgid "Events" +#~ msgstr "Eventos" + +#~ msgid "Partner" +#~ msgstr "Empresa" + +#~ msgid "or" +#~ msgstr "o" diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po new file mode 100644 index 000000000..041fbb9d7 --- /dev/null +++ b/partner_event/i18n/it.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 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-01-02 11:45+0000\n" +"Last-Translator: Francesco Foresti \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 4.14.1\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 "" + +#. 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 "" + +#. 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 "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.fields,field_description:partner_event.field_res_partner_register_event__errors +msgid "Errors" +msgstr "Errori" + +#. 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____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. 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: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 "Registrazioni" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "" +"These partners haven't been registered because they\\'re " +"already registered or other error occurred" +msgstr "" diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot new file mode 100644 index 000000000..27473ddd0 --- /dev/null +++ b/partner_event/i18n/partner_event.pot @@ -0,0 +1,145 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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.fields,field_description:partner_event.field_res_partner_register_event__errors +msgid "Errors" +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____last_update +msgid "Last Modified on" +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: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 "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "" +"These partners haven't been registered because they\\'re already" +" registered or other error occurred" +msgstr "" diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po new file mode 100644 index 000000000..eee1e7fdd --- /dev/null +++ b/partner_event/i18n/sl.po @@ -0,0 +1,158 @@ +# 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.fields,field_description:partner_event.field_res_partner_register_event__errors +msgid "Errors" +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____last_update +msgid "Last Modified on" +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: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 "" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "" +"These partners haven't been registered because they\\'re " +"already registered or other error occurred" +msgstr "" + +#~ msgid "Attended registration number" +#~ msgstr "Pričakovano število prijav" diff --git a/partner_event/i18n/sv.po b/partner_event/i18n/sv.po new file mode 100644 index 000000000..dff50ba97 --- /dev/null +++ b/partner_event/i18n/sv.po @@ -0,0 +1,150 @@ +# 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: 2021-11-16 10:36+0000\n" +"Last-Translator: Simon S \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.3.2\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.fields,field_description:partner_event.field_res_partner_register_event__errors +msgid "Errors" +msgstr "Fel" + +#. 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____last_update +msgid "Last Modified on" +msgstr "Senast ändrad den" + +#. 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: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" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view +msgid "" +"These partners haven't been registered because they\\'re " +"already registered or other error occurred" +msgstr "" +"Dessa partners har inte anmälts eftersom de redan är " +"anmälda eller på grund av att ett annat fel uppstod" 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..d3e6740c3 --- /dev/null +++ b/partner_event/models/event_registration.py @@ -0,0 +1,85 @@ +# 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 +# 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): + if not vals.get("attendee_partner_id") and vals.get("email"): + Partner = self.env["res.partner"] + Event = self.env["event.event"] + # Look for a partner with that email + email = vals.get("email").replace("%", "").replace("_", "\\_") + attendee_partner = Partner.search([("email", "=ilike", email)], limit=1) + event = Event.browse() + if vals.get("event_id"): + event = Event.browse(vals["event_id"]) + if attendee_partner: + for field in {"name", "phone", "mobile"}: + 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_end_date >= 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: + registration.update( + registration._synchronize_partner_values( + registration.partner_id + ) + ) + return {} diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py new file mode 100644 index 000000000..16cf74e47 --- /dev/null +++ b/partner_event/models/res_partner.py @@ -0,0 +1,46 @@ +# 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") + def _compute_registration_count(self): + for partner in self: + partner.registration_count = len( + self.env["event.registration"] + .search( + [ + ("attendee_partner_id", "child_of", partner.id), + ("state", "not in", ("cancel", "draft")), + ] + ) + .mapped("event_id") + ) + + def write(self, data): + res = super(ResPartner, self).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(ResPartner, self).address_get(adr_pref) diff --git a/partner_event/readme/CONFIGURE.rst b/partner_event/readme/CONFIGURE.rst new file mode 100644 index 000000000..46486568b --- /dev/null +++ b/partner_event/readme/CONFIGURE.rst @@ -0,0 +1,9 @@ +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.rst b/partner_event/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..91f0d5fc7 --- /dev/null +++ b/partner_event/readme/CONTRIBUTORS.rst @@ -0,0 +1,17 @@ +* `Tecnativa `__: + + * Pedro M. Baeza + * Antonio Espinosa + * Jairo Llopis + * Vicent Cubells + * David Vidal + * Rafael Blasco + * Víctor Martínez + * Stefan Ungureanu + * Carolina Fernandez + +* `Antiun `__: + + * Javier Iniesta + +* `Anil Kesariya` diff --git a/partner_event/readme/DESCRIPTION.rst b/partner_event/readme/DESCRIPTION.rst new file mode 100644 index 000000000..2360047bb --- /dev/null +++ b/partner_event/readme/DESCRIPTION.rst @@ -0,0 +1,13 @@ +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..ecad89690 --- /dev/null +++ b/partner_event/static/description/index.html @@ -0,0 +1,457 @@ + + + + + + +Link partner to events + + + + + + 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..0b65b07f8 --- /dev/null +++ b/partner_event/tests/test_event_registration.py @@ -0,0 +1,106 @@ +# 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 +# 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.tests import common + + +class TestEventRegistration(common.TransactionCase): + @classmethod + def setUpClass(cls): + super(TestEventRegistration, cls).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.assertEqual(self.partner_01.registration_count, 0) + self.registration_01.state = "open" + self.partner_01.invalidate_recordset() + self.assertEqual(self.partner_01.registration_count, 1) + self.registration_02.state = "done" + self.registration_02.attendee_partner_id = self.partner_01 + self.registration_02.event_id = event_1 + self.partner_01.invalidate_recordset() + self.assertEqual(self.partner_01.registration_count, 2) + + 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") + + def test_delete_registered_partner(self): + # We can't delete a partner with registrations + with self.assertRaises(IntegrityError), self.cr.savepoint(): + self.cr._default_log_exceptions = False + 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..359fe1cb3 --- /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..62d98df65 --- /dev/null +++ b/partner_event/views/res_partner_view.xml @@ -0,0 +1,32 @@ + + + + + event.registration + Registrations + tree,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 + + +
+ +
+
+
+
diff --git a/partner_event/wizard/__init__.py b/partner_event/wizard/__init__.py new file mode 100644 index 000000000..dc5828ccd --- /dev/null +++ b/partner_event/wizard/__init__.py @@ -0,0 +1 @@ +from . import res_partner_register_event 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 + +
diff --git a/setup/partner_event/odoo/addons/partner_event b/setup/partner_event/odoo/addons/partner_event new file mode 120000 index 000000000..965167250 --- /dev/null +++ b/setup/partner_event/odoo/addons/partner_event @@ -0,0 +1 @@ +../../../../partner_event \ No newline at end of file diff --git a/setup/partner_event/setup.py b/setup/partner_event/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/partner_event/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)