From c236d0ba0eff9f406d474500608360442f595ae5 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Mon, 24 Aug 2015 17:48:31 +0200 Subject: [PATCH 01/47] [ADD] partner event addon --- partner_event/README.rst | 61 ++++++++++++++++++ partner_event/__init__.py | 7 ++ partner_event/__openerp__.py | 43 ++++++++++++ partner_event/i18n/es.po | 48 ++++++++++++++ partner_event/i18n/partner_event.pot | 48 ++++++++++++++ partner_event/models/__init__.py | 6 ++ partner_event/models/res_partner.py | 31 +++++++++ partner_event/static/description/icon.png | Bin 0 -> 12024 bytes partner_event/views/event_event_view.xml | 18 ++++++ partner_event/views/res_partner_view.xml | 32 +++++++++ partner_event/wizard/__init__.py | 6 ++ .../wizard/res_partner_register_event.py | 31 +++++++++ .../res_partner_register_event_view.xml | 44 +++++++++++++ 13 files changed, 375 insertions(+) create mode 100644 partner_event/README.rst create mode 100644 partner_event/__init__.py create mode 100644 partner_event/__openerp__.py create mode 100644 partner_event/i18n/es.po create mode 100644 partner_event/i18n/partner_event.pot create mode 100644 partner_event/models/__init__.py create mode 100644 partner_event/models/res_partner.py create mode 100644 partner_event/static/description/icon.png create mode 100644 partner_event/views/event_event_view.xml create mode 100644 partner_event/views/res_partner_view.xml create mode 100644 partner_event/wizard/__init__.py create mode 100644 partner_event/wizard/res_partner_register_event.py create mode 100644 partner_event/wizard/res_partner_register_event_view.xml diff --git a/partner_event/README.rst b/partner_event/README.rst new file mode 100644 index 000000000..5ae6dc3f8 --- /dev/null +++ b/partner_event/README.rst @@ -0,0 +1,61 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +======================= +Link partner and events +======================= + +This module links partners with the events they are registered through a +smart button. + +It also includes: + +* Search partners by their event registrations. +* Search partners by number of events registered. +* 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 + + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/199/8.0 + + +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 +`here `_. + + +Credits +======= + +Contributors +------------ + +* Pedro M. Baeza +* Javier Iniesta +* Antonio Espinosa + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/partner_event/__init__.py b/partner_event/__init__.py new file mode 100644 index 000000000..3fc79a2d7 --- /dev/null +++ b/partner_event/__init__.py @@ -0,0 +1,7 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import models +from . import wizard diff --git a/partner_event/__openerp__.py b/partner_event/__openerp__.py new file mode 100644 index 000000000..da723b153 --- /dev/null +++ b/partner_event/__openerp__.py @@ -0,0 +1,43 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Odoo Source Management Solution +# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) +# Pedro M. Baeza +# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) +# Javier Iniesta +# Antonio Espinosa +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Link partner to events', + 'version': '8.0.1.1.0', + 'category': 'Marketing', + 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' + 'Antiun Ingeniería S.L., ' + 'Odoo Community Association (OCA)', + 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', + 'depends': [ + 'event', + ], + 'data': [ + 'views/res_partner_view.xml', + 'views/event_event_view.xml', + 'wizard/res_partner_register_event_view.xml', + ], + "installable": True, +} diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po new file mode 100644 index 000000000..a9e3df9de --- /dev/null +++ b/partner_event/i18n/es.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-27 09:20+0000\n" +"PO-Revision-Date: 2015-05-27 09:20+0000\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 +#: field:res.partner,attended_registration_count:0 +msgid "Attended registration number" +msgstr "Nº eventos registrado" + +#. module: partner_event +#: field:res.partner,event_registrations:0 +msgid "Event registrations" +msgstr "Eventos registrado" + +#. module: partner_event +#: view:res.partner:partner_event.view_partner_form_registrations +msgid "Events" +msgstr "Eventos" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Partner" +msgstr "Empresa" + +#. module: partner_event +#: field:res.partner,registration_count:0 +msgid "Registration number" +msgstr "Nº registros" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +#: field:res.partner,registrations:0 +msgid "Registrations" +msgstr "Registros" + diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot new file mode 100644 index 000000000..ef1391e68 --- /dev/null +++ b/partner_event/i18n/partner_event.pot @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-27 09:20+0000\n" +"PO-Revision-Date: 2015-05-27 09:20+0000\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 +#: field:res.partner,attended_registration_count:0 +msgid "Attended registration number" +msgstr "" + +#. module: partner_event +#: field:res.partner,event_registrations:0 +msgid "Event registrations" +msgstr "" + +#. module: partner_event +#: view:res.partner:partner_event.view_partner_form_registrations +msgid "Events" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Partner" +msgstr "" + +#. module: partner_event +#: field:res.partner,registration_count:0 +msgid "Registration number" +msgstr "" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +#: field:res.partner,registrations:0 +msgid "Registrations" +msgstr "" + diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py new file mode 100644 index 000000000..712559a1a --- /dev/null +++ b/partner_event/models/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from . import res_partner diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py new file mode 100644 index 000000000..1d303fcdc --- /dev/null +++ b/partner_event/models/res_partner.py @@ -0,0 +1,31 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from openerp import models, fields, api + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + registrations = fields.One2many( + string="Event registrations", + comodel_name='event.registration', inverse_name="partner_id") + registration_count = fields.Integer( + string='Event registrations number', compute='_count_registration', + store=True) + attended_registration_count = fields.Integer( + string='Event attended registrations number', + compute='_count_attended_registration', store=True) + + @api.one + @api.depends('registrations') + def _count_registration(self): + self.registration_count = len(self.registrations) + + @api.one + @api.depends('registrations.state') + def _count_attended_registration(self): + self.attended_registration_count = len(self.registrations.filtered( + lambda x: x.state == 'done')) diff --git a/partner_event/static/description/icon.png b/partner_event/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b30d2b238566d606cfc246d2839d5d10cef53ad0 GIT binary patch literal 12024 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 MZ + + + + + Events (with partner) + event.event + + + + + + + + + + diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml new file mode 100644 index 000000000..35f1cf98c --- /dev/null +++ b/partner_event/views/res_partner_view.xml @@ -0,0 +1,32 @@ + + + + + + event.registration + form + Registrations + tree,form,calendar,graph + {'search_default_partner_id': active_id, 'default_partner_id': active_id} + + + + 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..4385943eb --- /dev/null +++ b/partner_event/wizard/__init__.py @@ -0,0 +1,6 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +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..5d30ac036 --- /dev/null +++ b/partner_event/wizard/res_partner_register_event.py @@ -0,0 +1,31 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from openerp import models, fields, api + + +class ResPartnerRegisterEvent(models.TransientModel): + _name = 'res.partner.register.event' + + event = fields.Many2one('event.event', required=True) + + def _prepare_registration(self, partner): + return { + 'event_id': self.event.id, + 'partner_id': partner.id, + 'nb_register': 1, + 'name': partner.name, + 'email': partner.email, + 'phone': partner.phone, + 'date_open': fields.Datetime.now(), + } + + @api.multi + def button_register(self): + registration_obj = self.env['event.registration'] + partner_obj = self.env['res.partner'] + for partner_id in self.env.context.get('active_ids', []): + partner = partner_obj.browse(partner_id) + registration_obj.create(self._prepare_registration(partner)) 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..7e5a72add --- /dev/null +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -0,0 +1,44 @@ + + + + + + Register in an event + res.partner.register.event + +
+ + + +
+
+
+
+
+ + + Register in an event + res.partner.register.event + form + form + new + + + + + res.partner + Register in an event + + + +
+
From 08669d02c272d2c06d270d4c5a7f7308f895b8da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matja=C5=BE=20Mozeti=C4=8D?= Date: Mon, 12 Oct 2015 06:21:54 +0200 Subject: [PATCH 02/47] Slovene translations added --- partner_event/i18n/sl.po | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 partner_event/i18n/sl.po diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po new file mode 100644 index 000000000..1232a1f36 --- /dev/null +++ b/partner_event/i18n/sl.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.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" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"Language: sl\n" +"X-Generator: Poedit 1.8.4\n" + +#. module: partner_event +#: field:res.partner,attended_registration_count:0 +msgid "Attended registration number" +msgstr "Pričakovano število prijav" + +#. module: partner_event +#: field:res.partner,event_registrations:0 +msgid "Event registrations" +msgstr "Prijave na dogodek" + +#. module: partner_event +#: view:res.partner:partner_event.view_partner_form_registrations +msgid "Events" +msgstr "Dogodki" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_res_partner +msgid "Partner" +msgstr "Partner" + +#. module: partner_event +#: field:res.partner,registration_count:0 +msgid "Registration number" +msgstr "Registracijska številka" + +#. module: partner_event +#: model:ir.actions.act_window,name:partner_event.act_partner_registration +#: field:res.partner,registrations:0 +msgid "Registrations" +msgstr "Prijave" From b3803b5025ab4af788da5ead6e47abceef727cdd Mon Sep 17 00:00:00 2001 From: Javier Iniesta Date: Tue, 3 Nov 2015 17:40:48 +0100 Subject: [PATCH 03/47] Auto create partners in event registrations --- partner_event/README.rst | 9 +++ partner_event/i18n/es.po | 59 +++++++++++++++---- partner_event/i18n/partner_event.pot | 55 ++++++++++++++--- partner_event/models/__init__.py | 2 + partner_event/models/event_event.py | 13 ++++ partner_event/models/event_registration.py | 40 +++++++++++++ partner_event/tests/__init__.py | 5 ++ .../tests/test_event_registration.py | 48 +++++++++++++++ partner_event/views/event_event_view.xml | 3 + 9 files changed, 216 insertions(+), 18 deletions(-) create mode 100644 partner_event/models/event_event.py create mode 100644 partner_event/models/event_registration.py create mode 100644 partner_event/tests/__init__.py create mode 100644 partner_event/tests/test_event_registration.py diff --git a/partner_event/README.rst b/partner_event/README.rst index 5ae6dc3f8..ec75ee7da 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -17,6 +17,15 @@ It also includes: * Action in partner tree view 'More' button, to register several partners to an event +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 and phone fields. + +If partner already exists and user only fills email, name and phone fields will +be filled with partner's data. Usage ===== diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index a9e3df9de..c9bd05bcf 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 09:20+0000\n" -"PO-Revision-Date: 2015-05-27 09:20+0000\n" +"POT-Creation-Date: 2015-11-03 16:30+0000\n" +"PO-Revision-Date: 2015-11-03 16:30+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -15,15 +15,46 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: partner_event +#: field:event.event,create_partner:0 +msgid "Create Partners in registration" +msgstr "Crear empresas en el registro" + +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "Create registrations" +msgstr "Crear registros" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: field:res.partner.register.event,event:0 +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 #: field:res.partner,attended_registration_count:0 -msgid "Attended registration number" -msgstr "Nº eventos registrado" +msgid "Event attended registrations number" +msgstr "Nº de registrados que han asistido al evento" #. module: partner_event -#: field:res.partner,event_registrations:0 +#: field:res.partner,registrations:0 msgid "Event registrations" -msgstr "Eventos registrado" +msgstr "Registros a eventos" + +#. module: partner_event +#: field:res.partner,registration_count:0 +msgid "Event registrations number" +msgstr "Nº Registros a eventos" #. module: partner_event #: view:res.partner:partner_event.view_partner_form_registrations @@ -36,13 +67,21 @@ msgid "Partner" msgstr "Empresa" #. module: partner_event -#: field:res.partner,registration_count:0 -msgid "Registration number" -msgstr "Nº registros" +#: 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.actions.act_window,name:partner_event.act_partner_registration -#: field:res.partner,registrations:0 msgid "Registrations" msgstr "Registros" +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "Selecciona el evento para registrar" + +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "or" +msgstr "o" diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index ef1391e68..51ef8eb4d 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -1,13 +1,13 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * partner_event +# * partner_event # msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-27 09:20+0000\n" -"PO-Revision-Date: 2015-05-27 09:20+0000\n" +"POT-Creation-Date: 2015-11-03 16:30+0000\n" +"PO-Revision-Date: 2015-11-03 16:30+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -15,16 +15,47 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "Cancel" +msgstr "" + +#. module: partner_event +#: field:event.event,create_partner:0 +msgid "Create Partners in registration" +msgstr "" + +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "Create registrations" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_event +#: field:res.partner.register.event,event:0 +msgid "Event" +msgstr "" + +#. module: partner_event +#: model:ir.model,name:partner_event.model_event_registration +msgid "Event Registration" +msgstr "" + #. module: partner_event #: field:res.partner,attended_registration_count:0 -msgid "Attended registration number" +msgid "Event attended registrations number" msgstr "" #. module: partner_event -#: field:res.partner,event_registrations:0 +#: field:res.partner,registrations:0 msgid "Event registrations" msgstr "" +#. module: partner_event +#: field:res.partner,registration_count:0 +msgid "Event registrations number" +msgstr "" + #. module: partner_event #: view:res.partner:partner_event.view_partner_form_registrations msgid "Events" @@ -36,13 +67,21 @@ msgid "Partner" msgstr "" #. module: partner_event -#: field:res.partner,registration_count:0 -msgid "Registration number" +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +msgid "Register in an event" msgstr "" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.act_partner_registration -#: field:res.partner,registrations:0 msgid "Registrations" msgstr "" +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "Select event to register" +msgstr "" + +#. module: partner_event +#: view:res.partner.register.event:partner_event.res_partner_register_event_view +msgid "or" +msgstr "" diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py index 712559a1a..fe40de225 100644 --- a/partner_event/models/__init__.py +++ b/partner_event/models/__init__.py @@ -3,4 +3,6 @@ # For copyright and license notices, see __openerp__.py file in root directory ############################################################################## +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..99873e2eb --- /dev/null +++ b/partner_event/models/event_event.py @@ -0,0 +1,13 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from openerp import models, fields + + +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..6ba9882e5 --- /dev/null +++ b/partner_event/models/event_registration.py @@ -0,0 +1,40 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# For copyright and license notices, see __openerp__.py file in root directory +############################################################################## + +from openerp import models, api + + +class EventRegistration(models.Model): + _inherit = "event.registration" + + def _prepare_partner(self, vals): + return { + 'name': vals.get('name') or vals.get('email'), + 'email': vals.get('email', False), + 'phone': vals.get('phone', False), + } + + @api.model + def create(self, vals): + if not vals.get('partner_id') and vals.get('email'): + partner_model = self.env['res.partner'] + event_model = self.env['event.event'] + partner_id = False + # Look for a partner with that email + email = vals.get('email').replace('%', '').replace('_', '\\_') + partners = partner_model.search( + [('email', '=ilike', email)]) + event = event_model.browse(vals['event_id']) + if partners: + partner_id = partners[0].id + vals['name'] = vals.get('name') or partners[0].name + vals['phone'] = vals.get('phone') or partners[0].phone + elif event.create_partner: + # Create partner + partner = partner_model.sudo().create( + self._prepare_partner(vals)) + partner_id = partner.id + vals['partner_id'] = partner_id + return super(EventRegistration, self).create(vals) diff --git a/partner_event/tests/__init__.py b/partner_event/tests/__init__.py new file mode 100644 index 000000000..bf31ce7b5 --- /dev/null +++ b/partner_event/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# License AGPL-3: Antiun Ingenieria S.L. - Javier Iniesta +# See README.rst file on addon root folder for more details + +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..102f900c1 --- /dev/null +++ b/partner_event/tests/test_event_registration.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# License AGPL-3: Antiun Ingenieria S.L. - Javier Iniesta +# See README.rst file on addon root folder for more details + +from openerp.tests.common import TransactionCase + + +class TestEventRegistration(TransactionCase): + + def setUp(self): + super(TestEventRegistration, self).setUp() + self.event_0 = self.env.ref('event.event_0') + self.event_0.create_partner = True + registration_model = self.env['event.registration'] + partner_model = self.env['res.partner'] + self.partner_01 = partner_model.create({'name': 'Test Partner 01', + 'email': 'email01@test.com'}) + self.registration_01 = registration_model.create({ + 'email': 'email01@test.com', 'event_id': self.event_0.id}) + self.registration_02 = registration_model.create({ + 'email': 'email02@test.com', 'event_id': self.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.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.env.ref('event.event_1') + registration_model = self.env['event.registration'] + registration_03 = registration_model.create({ + 'event_id': event_1.id, 'partner_id': self.partner_01.id}) + self.assertEqual(self.partner_01.registration_count, 2) + self.assertEqual(self.partner_01.attended_registration_count, 0) + registration_03.state = 'done' + self.assertEqual(self.partner_01.attended_registration_count, 1) + + def test_button_register(self): + event_1 = self.env.ref('event.event_1') + wizard = self.env['res.partner.register.event'].create({ + 'event': event_1.id}) + active_ids = [self.partner_01.id, self.registration_02.partner_id.id] + wizard.with_context({'active_ids': active_ids}).button_register() diff --git a/partner_event/views/event_event_view.xml b/partner_event/views/event_event_view.xml index 5d5c70bd8..135c63cad 100644 --- a/partner_event/views/event_event_view.xml +++ b/partner_event/views/event_event_view.xml @@ -11,6 +11,9 @@ + + + From 8b77f44362e3ef62c44a3bdf5ffa0075ffb08b42 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Thu, 16 Jun 2016 12:17:52 +0200 Subject: [PATCH 04/47] Do not store registration counts. These fields were stored. That usually is good, but if you add partners to an event from the wizard, it means each `res.partner` record gets its `registration_count` field updated. When you update any record, fields `write_uid` and `write_date` are updated too. Now imagine you want to add 4000 partners to an event. That would take time. If in the mean time any other user updates the `res.partner` record (along with their `write_UID` and `WRITE_DATE` fields), you would get this error: ``` openerp.sql_db: bad query: UPDATE "res_partner" SET "registration_count"=3,"write_uid"=5,"write_date"=(now() at time zone 'UTC') WHERE id IN (25578) Traceback (most recent call last): File "/opt/odoo/common/openerp/v8/openerp/sql_db.py", line 234, in execute res = self._obj.execute(query, params) TransactionRollbackError: could not serialize access due to concurrent update CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x" ``` By removing the `store=True` parameter, you simply avoid those concurrent updates and do not block other users. But this changes the database structure, so remember to update your database! --- partner_event/README.rst | 5 +++ partner_event/__openerp__.py | 6 ++-- partner_event/models/res_partner.py | 27 +++++++--------- .../tests/test_event_registration.py | 18 +++++------ .../views/event_registration_view.xml | 31 +++++++++++++++++++ partner_event/views/res_partner_view.xml | 9 +++--- 6 files changed, 66 insertions(+), 30 deletions(-) create mode 100644 partner_event/views/event_registration_view.xml diff --git a/partner_event/README.rst b/partner_event/README.rst index ec75ee7da..bc7c59126 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -43,6 +43,10 @@ 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 `here `_. +Known Issues / Roadmap +====================== + +* Remove some TODOs if https://github.com/odoo/odoo/pull/12997 is merged. Credits ======= @@ -53,6 +57,7 @@ Contributors * Pedro M. Baeza * Javier Iniesta * Antonio Espinosa +* Jairo Llopis Maintainer ---------- diff --git a/partner_event/__openerp__.py b/partner_event/__openerp__.py index da723b153..13a86bd2a 100644 --- a/partner_event/__openerp__.py +++ b/partner_event/__openerp__.py @@ -25,18 +25,20 @@ { 'name': 'Link partner to events', - 'version': '8.0.1.1.0', + 'version': '8.0.3.0.0', 'category': 'Marketing', 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' 'Antiun Ingeniería S.L., ' + 'Tecnativa,' 'Odoo Community Association (OCA)', - 'website': 'http://www.serviciosbaeza.com, http://www.antiun.com', + 'website': 'http://www.tecnativa.com', 'depends': [ 'event', ], 'data': [ 'views/res_partner_view.xml', 'views/event_event_view.xml', + 'views/event_registration_view.xml', 'wizard/res_partner_register_event_view.xml', ], "installable": True, diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index 1d303fcdc..f71c55f86 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -3,7 +3,7 @@ # For copyright and license notices, see __openerp__.py file in root directory ############################################################################## -from openerp import models, fields, api +from openerp import api, fields, models class ResPartner(models.Model): @@ -12,20 +12,17 @@ class ResPartner(models.Model): registrations = fields.One2many( string="Event registrations", comodel_name='event.registration', inverse_name="partner_id") - registration_count = fields.Integer( - string='Event registrations number', compute='_count_registration', - store=True) - attended_registration_count = fields.Integer( - string='Event attended registrations number', - compute='_count_attended_registration', store=True) - - @api.one - @api.depends('registrations') - def _count_registration(self): - self.registration_count = len(self.registrations) + event_count = fields.Integer( + string='Events', + compute='_compute_event_count', + help="Count of events with confirmed registrations.", + ) @api.one @api.depends('registrations.state') - def _count_attended_registration(self): - self.attended_registration_count = len(self.registrations.filtered( - lambda x: x.state == 'done')) + def _compute_event_count(self): + self.event_count = len( + self.env["event.registration"].search([ + ("partner_id", "child_of", self.id), + ("state", "not in", ("cancel", "draft")), + ]).mapped("event_id")) diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 102f900c1..2caedabdb 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -30,15 +30,15 @@ def test_create(self): 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.env.ref('event.event_1') - registration_model = self.env['event.registration'] - registration_03 = registration_model.create({ - 'event_id': event_1.id, 'partner_id': self.partner_01.id}) - self.assertEqual(self.partner_01.registration_count, 2) - self.assertEqual(self.partner_01.attended_registration_count, 0) - registration_03.state = 'done' - self.assertEqual(self.partner_01.attended_registration_count, 1) + def test_count_events(self): + event_1 = self.event_0.copy() + self.assertEqual(self.partner_01.event_count, 0) + self.registration_01.state = "open" + self.assertEqual(self.partner_01.event_count, 1) + self.registration_02.state = "done" + self.registration_02.partner_id = self.partner_01 + self.registration_02.event_id = event_1 + self.assertEqual(self.partner_01.event_count, 2) def test_button_register(self): event_1 = self.env.ref('event.event_1') diff --git a/partner_event/views/event_registration_view.xml b/partner_event/views/event_registration_view.xml new file mode 100644 index 000000000..258d8d564 --- /dev/null +++ b/partner_event/views/event_registration_view.xml @@ -0,0 +1,31 @@ + + + + + + + + Search attended registrations + event.registration + + + + + open + + + + + + + + + + + diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index 35f1cf98c..ba68cdab1 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -7,7 +7,8 @@ form Registrations tree,form,calendar,graph - {'search_default_partner_id': active_id, 'default_partner_id': active_id} + [("partner_id", "child_of", active_ids)] + {'default_partner_id': active_id, 'search_default_done': 1, 'search_default_open': 1} @@ -19,10 +20,10 @@ From 28e86ac2e5f33cf84e459e5a1f663fdffd529bc9 Mon Sep 17 00:00:00 2001 From: Antonio Espinosa Date: Fri, 11 Nov 2016 18:10:59 +0100 Subject: [PATCH 05/47] Propagate partner changes and show errors when registering partners (#48) --- partner_event/__init__.py | 9 ++-- partner_event/__openerp__.py | 29 ++--------- partner_event/models/__init__.py | 9 ++-- partner_event/models/event_event.py | 9 ++-- partner_event/models/event_registration.py | 21 ++++++-- partner_event/models/res_partner.py | 48 ++++++++++++++----- partner_event/tests/__init__.py | 6 ++- .../tests/test_event_registration.py | 8 +++- partner_event/views/event_event_view.xml | 4 ++ partner_event/views/res_partner_view.xml | 4 ++ partner_event/wizard/__init__.py | 9 ++-- .../wizard/res_partner_register_event.py | 31 ++++++++++-- .../res_partner_register_event_view.xml | 36 ++++++++++---- 13 files changed, 148 insertions(+), 75 deletions(-) diff --git a/partner_event/__init__.py b/partner_event/__init__.py index 3fc79a2d7..f8d0413a3 100644 --- a/partner_event/__init__.py +++ b/partner_event/__init__.py @@ -1,7 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models from . import wizard diff --git a/partner_event/__openerp__.py b/partner_event/__openerp__.py index 13a86bd2a..bcebb4f7b 100644 --- a/partner_event/__openerp__.py +++ b/partner_event/__openerp__.py @@ -1,27 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# OpenERP, Odoo Source Management Solution -# Copyright (c) 2014 Serv. Tecnol. Avanzados (http://www.serviciosbaeza.com) -# Pedro M. Baeza -# Copyright (c) 2015 Antiun Ingeniería S.L. (http://www.antiun.com) -# Javier Iniesta -# Antonio Espinosa -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Link partner to events', diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py index fe40de225..01f08741f 100644 --- a/partner_event/models/__init__.py +++ b/partner_event/models/__init__.py @@ -1,7 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import event_event from . import event_registration diff --git a/partner_event/models/event_event.py b/partner_event/models/event_event.py index 99873e2eb..711c7e061 100644 --- a/partner_event/models/event_event.py +++ b/partner_event/models/event_event.py @@ -1,7 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, fields diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 6ba9882e5..fca63e2f0 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -1,9 +1,10 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api +from openerp import models, api, fields class EventRegistration(models.Model): @@ -38,3 +39,13 @@ def create(self, vals): partner_id = partner.id vals['partner_id'] = partner_id return super(EventRegistration, self).create(vals) + + @api.multi + def partner_data_update(self, data): + reg_fields = ['name', 'email', 'phone'] + reg_data = dict((k, v) for k, v in data.iteritems() if k in reg_fields) + 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) diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index f71c55f86..9a83a3452 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -1,7 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import api, fields, models @@ -17,12 +18,37 @@ class ResPartner(models.Model): compute='_compute_event_count', help="Count of events with confirmed registrations.", ) + registration_count = fields.Integer( + string='Event registrations number', compute='_count_registration', + store=True) + attended_registration_count = fields.Integer( + string='Event attended registrations number', + compute='_count_attended_registration', store=True) - @api.one - @api.depends('registrations.state') + @api.multi + @api.depends('registrations') + def _count_registration(self): + for partner in self: + partner.registration_count = len(partner.registrations) + + @api.multi def _compute_event_count(self): - self.event_count = len( - self.env["event.registration"].search([ - ("partner_id", "child_of", self.id), - ("state", "not in", ("cancel", "draft")), - ]).mapped("event_id")) + for partner in self: + partner.event_count = len( + self.env["event.registration"].search([ + ("partner_id", "child_of", partner.id), + ("state", "not in", ("cancel", "draft")), + ]).mapped("event_id")) + + @api.multi + @api.depends('registrations.state') + def _count_attended_registration(self): + for partner in self: + partner.attended_registration_count = len( + partner.registrations.filtered(lambda x: x.state == 'done')) + + @api.multi + def write(self, data): + res = super(ResPartner, self).write(data) + self.mapped('registrations').partner_data_update(data) + return res diff --git a/partner_event/tests/__init__.py b/partner_event/tests/__init__.py index bf31ce7b5..51373f5aa 100644 --- a/partner_event/tests/__init__.py +++ b/partner_event/tests/__init__.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- -# License AGPL-3: Antiun Ingenieria S.L. - Javier Iniesta -# See README.rst file on addon root folder for more details +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import test_event_registration diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 2caedabdb..c3604c345 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- -# License AGPL-3: Antiun Ingenieria S.L. - Javier Iniesta -# See README.rst file on addon root folder for more details +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp.tests.common import TransactionCase @@ -34,10 +36,12 @@ def test_count_events(self): event_1 = self.event_0.copy() self.assertEqual(self.partner_01.event_count, 0) self.registration_01.state = "open" + self.partner_01.invalidate_cache() self.assertEqual(self.partner_01.event_count, 1) self.registration_02.state = "done" self.registration_02.partner_id = self.partner_01 self.registration_02.event_id = event_1 + self.partner_01.invalidate_cache() self.assertEqual(self.partner_01.event_count, 2) def test_button_register(self): diff --git a/partner_event/views/event_event_view.xml b/partner_event/views/event_event_view.xml index 135c63cad..58e42d6f3 100644 --- a/partner_event/views/event_event_view.xml +++ b/partner_event/views/event_event_view.xml @@ -1,4 +1,8 @@ + diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index ba68cdab1..0bd040076 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -1,4 +1,8 @@ + diff --git a/partner_event/wizard/__init__.py b/partner_event/wizard/__init__.py index 4385943eb..75b55957a 100644 --- a/partner_event/wizard/__init__.py +++ b/partner_event/wizard/__init__.py @@ -1,6 +1,7 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). 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 index 5d30ac036..104c3608f 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -1,7 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# For copyright and license notices, see __openerp__.py file in root directory -############################################################################## +# -*- coding: utf-8 -*- +# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza +# © 2015 Antiun Ingenieria S.L. - Javier Iniesta +# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, fields, api @@ -10,6 +11,7 @@ class ResPartnerRegisterEvent(models.TransientModel): _name = 'res.partner.register.event' event = fields.Many2one('event.event', required=True) + errors = fields.Text(readonly=True) def _prepare_registration(self, partner): return { @@ -26,6 +28,25 @@ def _prepare_registration(self, partner): def button_register(self): registration_obj = self.env['event.registration'] partner_obj = self.env['res.partner'] + errors = [] for partner_id in self.env.context.get('active_ids', []): partner = partner_obj.browse(partner_id) - registration_obj.create(self._prepare_registration(partner)) + try: + with self.env.cr.savepoint(): + registration_obj.create( + self._prepare_registration(partner)) + except: + errors.append(partner.name) + if errors: + self.errors = '\n'.join(errors) + data_obj = self.env.ref('partner_event.' + 'res_partner_register_event_view') + return { + 'type': 'ir.actions.act_window', + 'res_model': self._name, + 'view_mode': 'form', + 'view_type': 'form', + 'view_id': [data_obj.id], + 'res_id': self.id, + 'target': 'new', + } diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml index 7e5a72add..29dd72337 100644 --- a/partner_event/wizard/res_partner_register_event_view.xml +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -1,4 +1,8 @@ + @@ -7,19 +11,31 @@ res.partner.register.event
- + + +
-
From 669fce025fe2c78e6f5004cbbe893421bfb1d154 Mon Sep 17 00:00:00 2001 From: cubells Date: Sat, 12 Nov 2016 19:34:31 +0100 Subject: [PATCH 06/47] [MIG] partner_event: Migration to 9.0 --- partner_event/README.rst | 14 ++- partner_event/__init__.py | 7 +- partner_event/__openerp__.py | 13 ++- partner_event/i18n/partner_event.pot | 87 ------------------- partner_event/models/__init__.py | 7 +- partner_event/models/event_event.py | 7 +- partner_event/models/event_registration.py | 11 +-- partner_event/models/res_partner.py | 7 +- partner_event/tests/__init__.py | 7 +- .../tests/test_event_registration.py | 31 ++++++- partner_event/views/event_event_view.xml | 17 ++-- .../views/event_registration_view.xml | 15 +--- partner_event/views/res_partner_view.xml | 14 ++- partner_event/wizard/__init__.py | 7 +- .../wizard/res_partner_register_event.py | 8 +- .../res_partner_register_event_view.xml | 22 ++--- 16 files changed, 96 insertions(+), 178 deletions(-) delete mode 100644 partner_event/i18n/partner_event.pot diff --git a/partner_event/README.rst b/partner_event/README.rst index bc7c59126..ab421c227 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -32,16 +32,16 @@ Usage .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/199/8.0 + :target: https://runbot.odoo-community.org/runbot/199/9.0 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 -`here `_. +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. Known Issues / Roadmap ====================== @@ -51,6 +51,11 @@ Known Issues / Roadmap Credits ======= +Images +------ + +* Odoo Community Association: `Icon `_. + Contributors ------------ @@ -58,6 +63,7 @@ Contributors * Javier Iniesta * Antonio Espinosa * Jairo Llopis +* Vicent Cubells Maintainer ---------- diff --git a/partner_event/__init__.py b/partner_event/__init__.py index f8d0413a3..e4d46dec5 100644 --- a/partner_event/__init__.py +++ b/partner_event/__init__.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models diff --git a/partner_event/__openerp__.py b/partner_event/__openerp__.py index bcebb4f7b..d729c5624 100644 --- a/partner_event/__openerp__.py +++ b/partner_event/__openerp__.py @@ -1,16 +1,15 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Link partner to events', - 'version': '8.0.3.0.0', + 'version': '9.0.1.0.0', 'category': 'Marketing', - 'author': 'Serv. Tecnol. Avanzados - Pedro M. Baeza, ' - 'Antiun Ingeniería S.L., ' - 'Tecnativa,' + 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', 'website': 'http://www.tecnativa.com', 'depends': [ diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot deleted file mode 100644 index 51ef8eb4d..000000000 --- a/partner_event/i18n/partner_event.pot +++ /dev/null @@ -1,87 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * partner_event -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-11-03 16:30+0000\n" -"PO-Revision-Date: 2015-11-03 16:30+0000\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 -#: view:res.partner.register.event:partner_event.res_partner_register_event_view -msgid "Cancel" -msgstr "" - -#. module: partner_event -#: field:event.event,create_partner:0 -msgid "Create Partners in registration" -msgstr "" - -#. module: partner_event -#: view:res.partner.register.event:partner_event.res_partner_register_event_view -msgid "Create registrations" -msgstr "" - -#. module: partner_event -#: model:ir.model,name:partner_event.model_event_event -#: field:res.partner.register.event,event:0 -msgid "Event" -msgstr "" - -#. module: partner_event -#: model:ir.model,name:partner_event.model_event_registration -msgid "Event Registration" -msgstr "" - -#. module: partner_event -#: field:res.partner,attended_registration_count:0 -msgid "Event attended registrations number" -msgstr "" - -#. module: partner_event -#: field:res.partner,registrations:0 -msgid "Event registrations" -msgstr "" - -#. module: partner_event -#: field:res.partner,registration_count:0 -msgid "Event registrations number" -msgstr "" - -#. module: partner_event -#: view:res.partner:partner_event.view_partner_form_registrations -msgid "Events" -msgstr "" - -#. module: partner_event -#: model:ir.model,name:partner_event.model_res_partner -msgid "Partner" -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.actions.act_window,name:partner_event.act_partner_registration -msgid "Registrations" -msgstr "" - -#. module: partner_event -#: view:res.partner.register.event:partner_event.res_partner_register_event_view -msgid "Select event to register" -msgstr "" - -#. module: partner_event -#: view:res.partner.register.event:partner_event.res_partner_register_event_view -msgid "or" -msgstr "" diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py index 01f08741f..b0691383e 100644 --- a/partner_event/models/__init__.py +++ b/partner_event/models/__init__.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import event_event diff --git a/partner_event/models/event_event.py b/partner_event/models/event_event.py index 711c7e061..d2dc7be2a 100644 --- a/partner_event/models/event_event.py +++ b/partner_event/models/event_event.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, fields diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index fca63e2f0..8677cefe7 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import models, api, fields @@ -42,8 +43,8 @@ def create(self, vals): @api.multi def partner_data_update(self, data): - reg_fields = ['name', 'email', 'phone'] - reg_data = dict((k, v) for k, v in data.iteritems() if k in reg_fields) + reg_data = dict((k, v) for k, v in + data.iteritems() if k in ['name', 'email', 'phone']) if reg_data: # Only update registration data if this event is not old registrations = self.filtered( diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index 9a83a3452..e68b4629d 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp import api, fields, models diff --git a/partner_event/tests/__init__.py b/partner_event/tests/__init__.py index 51373f5aa..af95f2bb1 100644 --- a/partner_event/tests/__init__.py +++ b/partner_event/tests/__init__.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import test_event_registration diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index c3604c345..5071b8293 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- -# © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza -# © 2015 Antiun Ingenieria S.L. - Javier Iniesta -# © 2016 Antiun Ingenieria S.L. - Antonio Espinosa +# © 2014 Tecnativa S.L. - Pedro M. Baeza +# © 2015 Tecnativa S.L. - Javier Iniesta +# © 2016 Tecnativa S.L. - Antonio Espinosa +# © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from openerp.tests.common import TransactionCase +from datetime import datetime, timedelta class TestEventRegistration(TransactionCase): @@ -13,7 +15,8 @@ def setUp(self): super(TestEventRegistration, self).setUp() self.event_0 = self.env.ref('event.event_0') self.event_0.create_partner = True - registration_model = self.env['event.registration'] + registration_model = self.env[ + 'event.registration'].with_context(registration_force_draft=True) partner_model = self.env['res.partner'] self.partner_01 = partner_model.create({'name': 'Test Partner 01', 'email': 'email01@test.com'}) @@ -50,3 +53,23 @@ def test_button_register(self): 'event': event_1.id}) active_ids = [self.partner_01.id, self.registration_02.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_moth = datetime.now() - timedelta(days=30) + # Set an old event + event_2.write({'date_begin': self.last_moth}) + event_2.write({'date_end': self.yesterday}) + self.registration_02.event_id = event_2 + self.registration_02.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 an 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') diff --git a/partner_event/views/event_event_view.xml b/partner_event/views/event_event_view.xml index 58e42d6f3..f7909ebf7 100644 --- a/partner_event/views/event_event_view.xml +++ b/partner_event/views/event_event_view.xml @@ -1,25 +1,18 @@ - - - + Events (with partner) event.event + - - - - + - - + diff --git a/partner_event/views/event_registration_view.xml b/partner_event/views/event_registration_view.xml index 258d8d564..0d8fc5b09 100644 --- a/partner_event/views/event_registration_view.xml +++ b/partner_event/views/event_registration_view.xml @@ -1,23 +1,17 @@ - - + Search attended registrations event.registration - - - open - - - - - + diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index 0bd040076..5581b854d 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -1,10 +1,7 @@ - - - + event.registration @@ -12,7 +9,7 @@ Registrations tree,form,calendar,graph [("partner_id", "child_of", active_ids)] - {'default_partner_id': active_id, 'search_default_done': 1, 'search_default_open': 1} + {'default_partner_id': active_id, 'search_default_expected': True} @@ -20,7 +17,7 @@ res.partner -
+
-
-
@@ -56,5 +45,4 @@ - - + From 6a8c5460c82b371c7732bd260db5d3c4a5505d80 Mon Sep 17 00:00:00 2001 From: David Vidal Date: Mon, 29 May 2017 14:43:40 +0200 Subject: [PATCH 07/47] [MIG] partner_event: Migration to 10.0 --- partner_event/README.rst | 10 +++++++--- partner_event/__init__.py | 5 ----- partner_event/{__openerp__.py => __manifest__.py} | 14 ++++++++------ partner_event/i18n/es.po | 2 +- partner_event/i18n/sl.po | 2 +- partner_event/models/__init__.py | 5 ----- partner_event/models/event_event.py | 2 +- partner_event/models/event_registration.py | 14 +++++++------- partner_event/models/res_partner.py | 11 ++++++----- partner_event/tests/__init__.py | 5 ----- partner_event/tests/test_event_registration.py | 2 +- partner_event/views/event_registration_view.xml | 7 ++----- partner_event/views/res_partner_view.xml | 2 +- partner_event/wizard/__init__.py | 5 ----- partner_event/wizard/res_partner_register_event.py | 2 +- 15 files changed, 36 insertions(+), 52 deletions(-) rename partner_event/{__openerp__.py => __manifest__.py} (59%) diff --git a/partner_event/README.rst b/partner_event/README.rst index ab421c227..1848504e5 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -27,13 +27,15 @@ be created automatically with name, email and phone fields. If partner already exists and user only fills email, name and phone fields will be filled with partner's data. +The event registration values email, name and phone will be changed if the +related partner values are changed and the event end date hasn't passed yet. + Usage ===== .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/199/9.0 - + :target: https://runbot.odoo-community.org/runbot/199/10.0 Bug Tracker =========== @@ -46,7 +48,8 @@ and welcomed feedback. Known Issues / Roadmap ====================== -* Remove some TODOs if https://github.com/odoo/odoo/pull/12997 is merged. +* In registration contact field has no onchange check so changing the partner + is not going to change any info on the registration. Credits ======= @@ -64,6 +67,7 @@ Contributors * Antonio Espinosa * Jairo Llopis * Vicent Cubells +* David Vidal Maintainer ---------- diff --git a/partner_event/__init__.py b/partner_event/__init__.py index e4d46dec5..35e7c9600 100644 --- a/partner_event/__init__.py +++ b/partner_event/__init__.py @@ -1,9 +1,4 @@ # -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import models from . import wizard diff --git a/partner_event/__openerp__.py b/partner_event/__manifest__.py similarity index 59% rename from partner_event/__openerp__.py rename to partner_event/__manifest__.py index d729c5624..07479aff1 100644 --- a/partner_event/__openerp__.py +++ b/partner_event/__manifest__.py @@ -1,17 +1,19 @@ # -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells +# 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 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Link partner to events', - 'version': '9.0.1.0.0', + 'version': '10.0.1.0.0', 'category': 'Marketing', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', - 'website': 'http://www.tecnativa.com', + 'website': 'https://www.tecnativa.com', + "license": "AGPL-3", 'depends': [ 'event', ], diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index c9bd05bcf..cabd17287 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"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: 2015-11-03 16:30+0000\n" diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po index 1232a1f36..5c9eb7ef3 100644 --- a/partner_event/i18n/sl.po +++ b/partner_event/i18n/sl.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"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" diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py index b0691383e..a4e7716c0 100644 --- a/partner_event/models/__init__.py +++ b/partner_event/models/__init__.py @@ -1,9 +1,4 @@ # -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import event_event from . import event_registration diff --git a/partner_event/models/event_event.py b/partner_event/models/event_event.py index d2dc7be2a..23e2587b2 100644 --- a/partner_event/models/event_event.py +++ b/partner_event/models/event_event.py @@ -5,7 +5,7 @@ # © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields +from odoo import fields, models class EventEvent(models.Model): diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 8677cefe7..0a7c4e429 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -5,7 +5,7 @@ # © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api, fields +from odoo import api, fields, models class EventRegistration(models.Model): @@ -26,13 +26,13 @@ def create(self, vals): partner_id = False # Look for a partner with that email email = vals.get('email').replace('%', '').replace('_', '\\_') - partners = partner_model.search( - [('email', '=ilike', email)]) + partner = partner_model.search( + [('email', '=ilike', email)], limit=1) event = event_model.browse(vals['event_id']) - if partners: - partner_id = partners[0].id - vals['name'] = vals.get('name') or partners[0].name - vals['phone'] = vals.get('phone') or partners[0].phone + if partner: + partner_id = partner.id + vals['name'] = vals.get('name') or partner.name + vals['phone'] = vals.get('phone') or partner.phone elif event.create_partner: # Create partner partner = partner_model.sudo().create( diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index e68b4629d..154518133 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -5,7 +5,7 @@ # © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import api, fields, models +from odoo import api, fields, models class ResPartner(models.Model): @@ -20,15 +20,16 @@ class ResPartner(models.Model): help="Count of events with confirmed registrations.", ) registration_count = fields.Integer( - string='Event registrations number', compute='_count_registration', + string='Event registrations number', + compute='_compute_registration_count', store=True) attended_registration_count = fields.Integer( string='Event attended registrations number', - compute='_count_attended_registration', store=True) + compute='_compute_attended_registration_count', store=True) @api.multi @api.depends('registrations') - def _count_registration(self): + def _compute_registration_count(self): for partner in self: partner.registration_count = len(partner.registrations) @@ -43,7 +44,7 @@ def _compute_event_count(self): @api.multi @api.depends('registrations.state') - def _count_attended_registration(self): + def _compute_attended_registration_count(self): for partner in self: partner.attended_registration_count = len( partner.registrations.filtered(lambda x: x.state == 'done')) diff --git a/partner_event/tests/__init__.py b/partner_event/tests/__init__.py index af95f2bb1..9ce85701d 100644 --- a/partner_event/tests/__init__.py +++ b/partner_event/tests/__init__.py @@ -1,8 +1,3 @@ # -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import test_event_registration diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 5071b8293..8e8266afe 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -5,7 +5,7 @@ # © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase from datetime import datetime, timedelta diff --git a/partner_event/views/event_registration_view.xml b/partner_event/views/event_registration_view.xml index 0d8fc5b09..703559900 100644 --- a/partner_event/views/event_registration_view.xml +++ b/partner_event/views/event_registration_view.xml @@ -2,7 +2,6 @@ - @@ -10,14 +9,12 @@ event.registration - - + - + diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index 5581b854d..ed8966e3d 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -9,7 +9,7 @@ Registrations tree,form,calendar,graph [("partner_id", "child_of", active_ids)] - {'default_partner_id': active_id, 'search_default_expected': True} + {'search_default_partner_id': active_id, 'default_partner_id': active_id, 'search_default_expected': True} diff --git a/partner_event/wizard/__init__.py b/partner_event/wizard/__init__.py index 71fd9cb54..c0ab68950 100644 --- a/partner_event/wizard/__init__.py +++ b/partner_event/wizard/__init__.py @@ -1,8 +1,3 @@ # -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). 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 index 810dc92cb..62b3c704f 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -5,7 +5,7 @@ # © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields, api +from odoo import api, fields, models class ResPartnerRegisterEvent(models.TransientModel): From ce397ab81c089cf40ea5f3e826abb916add30270 Mon Sep 17 00:00:00 2001 From: Sergio Teruel Albert Date: Thu, 9 Nov 2017 18:54:27 +0100 Subject: [PATCH 08/47] [10.0][IMP] partner_event: Set attendee partner --- partner_event/README.rst | 9 ++-- partner_event/__manifest__.py | 2 +- partner_event/i18n/es.po | 5 ++ .../migrations/10.0.2.0.0/post-migration.py | 14 ++++++ partner_event/models/event_registration.py | 33 +++++++------ partner_event/models/res_partner.py | 4 +- .../tests/test_event_registration.py | 49 ++++++++++++------- .../views/event_registration_view.xml | 20 ++++++++ partner_event/views/res_partner_view.xml | 4 +- .../wizard/res_partner_register_event.py | 1 + 10 files changed, 99 insertions(+), 42 deletions(-) create mode 100644 partner_event/migrations/10.0.2.0.0/post-migration.py diff --git a/partner_event/README.rst b/partner_event/README.rst index 1848504e5..b0d6d45ae 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -10,8 +10,8 @@ smart button. It also includes: -* Search partners by their event registrations. -* Search partners by number of events registered. +* 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 @@ -62,12 +62,13 @@ Images Contributors ------------ -* Pedro M. Baeza +* Pedro M. Baeza * Javier Iniesta -* Antonio Espinosa +* Antonio Espinosa * Jairo Llopis * Vicent Cubells * David Vidal +* Rafael Blasco Maintainer ---------- diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 07479aff1..5476dbd01 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -8,7 +8,7 @@ { 'name': 'Link partner to events', - 'version': '10.0.1.0.0', + 'version': '10.0.2.0.0', 'category': 'Marketing', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index cabd17287..c6d2ac1c9 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -56,6 +56,11 @@ msgstr "Registros a eventos" msgid "Event registrations number" msgstr "Nº Registros a eventos" +#. module: partner_event +#: field:event.registration,attendee_partner_id:0 +msgid "Attendee Partner" +msgstr "Empresa asistente" + #. module: partner_event #: view:res.partner:partner_event.view_partner_form_registrations msgid "Events" diff --git a/partner_event/migrations/10.0.2.0.0/post-migration.py b/partner_event/migrations/10.0.2.0.0/post-migration.py new file mode 100644 index 000000000..d1edebbbd --- /dev/null +++ b/partner_event/migrations/10.0.2.0.0/post-migration.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + if not version: + return + openupgrade.logged_query( + env.cr, + 'UPDATE event_registration SET attendee_partner_id = partner_id') diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 0a7c4e429..9caa0645a 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -11,6 +11,12 @@ class EventRegistration(models.Model): _inherit = "event.registration" + attendee_partner_id = fields.Many2one( + comodel_name='res.partner', + string='Attendee Partner', + ondelete='restrict', + ) + def _prepare_partner(self, vals): return { 'name': vals.get('name') or vals.get('email'), @@ -20,25 +26,24 @@ def _prepare_partner(self, vals): @api.model def create(self, vals): - if not vals.get('partner_id') and vals.get('email'): - partner_model = self.env['res.partner'] - event_model = self.env['event.event'] - partner_id = False + 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('_', '\\_') - partner = partner_model.search( - [('email', '=ilike', email)], limit=1) - event = event_model.browse(vals['event_id']) - if partner: - partner_id = partner.id - vals['name'] = vals.get('name') or partner.name - vals['phone'] = vals.get('phone') or partner.phone + attendee_partner = Partner.search([ + ('email', '=ilike', email) + ], limit=1) + event = Event.browse(vals['event_id']) + if attendee_partner: + vals['name'] = vals.setdefault('name', attendee_partner.name) + vals['phone'] = vals.setdefault( + 'phone', attendee_partner.phone) elif event.create_partner: # Create partner - partner = partner_model.sudo().create( + attendee_partner = Partner.sudo().create( self._prepare_partner(vals)) - partner_id = partner.id - vals['partner_id'] = partner_id + vals['attendee_partner_id'] = attendee_partner.id return super(EventRegistration, self).create(vals) @api.multi diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index 154518133..f7f6802cc 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -13,7 +13,7 @@ class ResPartner(models.Model): registrations = fields.One2many( string="Event registrations", - comodel_name='event.registration', inverse_name="partner_id") + comodel_name='event.registration', inverse_name="attendee_partner_id") event_count = fields.Integer( string='Events', compute='_compute_event_count', @@ -38,7 +38,7 @@ def _compute_event_count(self): for partner in self: partner.event_count = len( self.env["event.registration"].search([ - ("partner_id", "child_of", partner.id), + ("attendee_partner_id", "child_of", partner.id), ("state", "not in", ("cancel", "draft")), ]).mapped("event_id")) diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 8e8266afe..5ab3e9437 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -5,32 +5,42 @@ # © 2016 Tecnativa S.L. - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo.tests.common import TransactionCase from datetime import datetime, timedelta +from odoo.tests import common +from odoo import fields -class TestEventRegistration(TransactionCase): +class TestEventRegistration(common.SavepointCase): - def setUp(self): - super(TestEventRegistration, self).setUp() - self.event_0 = self.env.ref('event.event_0') - self.event_0.create_partner = True - registration_model = self.env[ + def setUp(cls): + super(TestEventRegistration, cls).setUp() + cls.event_0 = cls.env['event.event'].create({ + 'name': 'Test event', + 'date_begin': fields.Datetime.now(), + 'date_end': fields.Datetime.now(), + 'seats_availability': 'limited', + 'seats_max': '5', + 'seats_min': '1', + }) + cls.event_0.create_partner = True + registration_model = cls.env[ 'event.registration'].with_context(registration_force_draft=True) - partner_model = self.env['res.partner'] - self.partner_01 = partner_model.create({'name': 'Test Partner 01', - 'email': 'email01@test.com'}) - self.registration_01 = registration_model.create({ - 'email': 'email01@test.com', 'event_id': self.event_0.id}) - self.registration_02 = registration_model.create({ - 'email': 'email02@test.com', 'event_id': self.event_0.id, + partner_model = cls.env['res.partner'] + cls.partner_01 = partner_model.create({ + 'name': 'Test Partner 01', + 'email': 'email01@test.com' + }) + 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.partner_id + 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) @@ -42,16 +52,17 @@ def test_count_events(self): self.partner_01.invalidate_cache() self.assertEqual(self.partner_01.event_count, 1) self.registration_02.state = "done" - self.registration_02.partner_id = self.partner_01 + self.registration_02.attendee_partner_id = self.partner_01 self.registration_02.event_id = event_1 self.partner_01.invalidate_cache() self.assertEqual(self.partner_01.event_count, 2) def test_button_register(self): - event_1 = self.env.ref('event.event_1') + 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.partner_id.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): @@ -63,7 +74,7 @@ def test_data_update(self): event_2.write({'date_begin': self.last_moth}) event_2.write({'date_end': self.yesterday}) self.registration_02.event_id = event_2 - self.registration_02.partner_id = self.partner_01 + 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( diff --git a/partner_event/views/event_registration_view.xml b/partner_event/views/event_registration_view.xml index 703559900..3cde8b9d3 100644 --- a/partner_event/views/event_registration_view.xml +++ b/partner_event/views/event_registration_view.xml @@ -4,6 +4,26 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> + + 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 index ed8966e3d..cba239036 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -8,8 +8,8 @@ form Registrations tree,form,calendar,graph - [("partner_id", "child_of", active_ids)] - {'search_default_partner_id': active_id, 'default_partner_id': active_id, 'search_default_expected': True} + [("attendee_partner_id", "child_of", active_ids)] + {'search_default_attendee_partner_id': active_id, 'default_attendee_partner_id': active_id, 'search_default_expected': True} diff --git a/partner_event/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py index 62b3c704f..773f4ff76 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -18,6 +18,7 @@ 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, From 28174ca93a0fa93d985674c6e86b7896a509a732 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Tue, 14 Nov 2017 17:08:21 +0100 Subject: [PATCH 09/47] [IMP] partner_event: Do single browse If adding 1000 partners, we save now 999 queries. (cherry picked from commit 89853ef) --- partner_event/__manifest__.py | 2 +- partner_event/wizard/res_partner_register_event.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 5476dbd01..15638883a 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -8,7 +8,7 @@ { 'name': 'Link partner to events', - 'version': '10.0.2.0.0', + 'version': '10.0.2.0.1', 'category': 'Marketing', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', diff --git a/partner_event/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py index 773f4ff76..2d4cdaeec 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -28,10 +28,9 @@ def _prepare_registration(self, partner): @api.multi def button_register(self): registration_obj = self.env['event.registration'] - partner_obj = self.env['res.partner'] errors = [] - for partner_id in self.env.context.get('active_ids', []): - partner = partner_obj.browse(partner_id) + for partner in self.env['res.partner'].browse( + self.env.context.get('active_ids', [])): try: with self.env.cr.savepoint(): registration_obj.create( From 2e630d9657a1a27db044ae6b3e9bde99b706032b Mon Sep 17 00:00:00 2001 From: David Vidal Date: Wed, 22 Nov 2017 02:02:13 +0100 Subject: [PATCH 10/47] [IMP] partner_event: forbid partner deletion (#94) --- partner_event/README.rst | 1 + partner_event/models/event_registration.py | 3 +++ .../tests/test_event_registration.py | 19 ++++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index b0d6d45ae..9df17df85 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -16,6 +16,7 @@ It also includes: * 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. Configuration ============= diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 9caa0645a..336be2f98 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -11,6 +11,9 @@ 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', diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 5ab3e9437..f6407e8bf 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -3,17 +3,19 @@ # © 2015 Tecnativa S.L. - Javier Iniesta # © 2016 Tecnativa S.L. - Antonio Espinosa # © 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 psycopg2 import IntegrityError from datetime import datetime, timedelta from odoo.tests import common from odoo import fields class TestEventRegistration(common.SavepointCase): - - def setUp(cls): - super(TestEventRegistration, cls).setUp() + @classmethod + def setUpClass(cls): + super(TestEventRegistration, cls).setUpClass() cls.event_0 = cls.env['event.event'].create({ 'name': 'Test event', 'date_begin': fields.Datetime.now(), @@ -84,3 +86,14 @@ def test_data_update(self): 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.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()) From 23b744c21a7eab346792c2dc86b5c025acac7ead Mon Sep 17 00:00:00 2001 From: hveficent Date: Thu, 10 May 2018 12:15:56 +0200 Subject: [PATCH 11/47] [MIG] partner_event: Migration to 11.0 --- partner_event/README.rst | 4 +- partner_event/__init__.py | 2 - partner_event/__manifest__.py | 3 +- .../migrations/10.0.2.0.0/post-migration.py | 1 - partner_event/models/__init__.py | 2 - partner_event/models/event_event.py | 9 ++-- partner_event/models/event_registration.py | 11 +++-- partner_event/models/res_partner.py | 43 +++++-------------- partner_event/tests/__init__.py | 2 - .../tests/test_event_registration.py | 18 ++++---- partner_event/views/event_event_view.xml | 2 +- partner_event/views/res_partner_view.xml | 6 +-- partner_event/wizard/__init__.py | 2 - .../wizard/res_partner_register_event.py | 9 ++-- .../res_partner_register_event_view.xml | 18 +++++--- 15 files changed, 51 insertions(+), 81 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index 9df17df85..1d55ffa77 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -1,4 +1,4 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :alt: License: AGPL-3 ======================= @@ -36,7 +36,7 @@ Usage .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/199/10.0 + :target: https://runbot.odoo-community.org/runbot/199/11.0 Bug Tracker =========== diff --git a/partner_event/__init__.py b/partner_event/__init__.py index 35e7c9600..9b4296142 100644 --- a/partner_event/__init__.py +++ b/partner_event/__init__.py @@ -1,4 +1,2 @@ -# -*- coding: utf-8 -*- - from . import models from . import wizard diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 15638883a..6f8e77639 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2014 Tecnativa S.L. - Pedro M. Baeza # Copyright 2015 Tecnativa S.L. - Javier Iniesta # Copyright 2016 Tecnativa S.L. - Antonio Espinosa @@ -8,7 +7,7 @@ { 'name': 'Link partner to events', - 'version': '10.0.2.0.1', + 'version': '11.0.2.0.1', 'category': 'Marketing', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', diff --git a/partner_event/migrations/10.0.2.0.0/post-migration.py b/partner_event/migrations/10.0.2.0.0/post-migration.py index d1edebbbd..257ebcff2 100644 --- a/partner_event/migrations/10.0.2.0.0/post-migration.py +++ b/partner_event/migrations/10.0.2.0.0/post-migration.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2017 Sergio Teruel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/partner_event/models/__init__.py b/partner_event/models/__init__.py index a4e7716c0..9a9260bff 100644 --- a/partner_event/models/__init__.py +++ b/partner_event/models/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - 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 index 23e2587b2..e94288a45 100644 --- a/partner_event/models/event_event.py +++ b/partner_event/models/event_event.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells +# 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 diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 336be2f98..90629289e 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells +# 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 api, fields, models @@ -52,7 +51,7 @@ def create(self, vals): @api.multi def partner_data_update(self, data): reg_data = dict((k, v) for k, v in - data.iteritems() if k in ['name', 'email', 'phone']) + data.items() if k in ['name', 'email', 'phone']) if reg_data: # Only update registration data if this event is not old registrations = self.filtered( diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index f7f6802cc..294efc6c2 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells +# 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 api, fields, models @@ -11,46 +10,26 @@ class ResPartner(models.Model): _inherit = 'res.partner' - registrations = fields.One2many( - string="Event registrations", + event_registration_ids = fields.One2many( + string="Event registrations", oldname='registrations', comodel_name='event.registration', inverse_name="attendee_partner_id") - event_count = fields.Integer( - string='Events', - compute='_compute_event_count', - help="Count of events with confirmed registrations.", - ) registration_count = fields.Integer( - string='Event registrations number', + string='Attendances', compute='_compute_registration_count', - store=True) - attended_registration_count = fields.Integer( - string='Event attended registrations number', - compute='_compute_attended_registration_count', store=True) + store=False) @api.multi - @api.depends('registrations') + @api.depends('event_registration_ids') def _compute_registration_count(self): for partner in self: - partner.registration_count = len(partner.registrations) - - @api.multi - def _compute_event_count(self): - for partner in self: - partner.event_count = len( + partner.registration_count = len( self.env["event.registration"].search([ ("attendee_partner_id", "child_of", partner.id), ("state", "not in", ("cancel", "draft")), ]).mapped("event_id")) - @api.multi - @api.depends('registrations.state') - def _compute_attended_registration_count(self): - for partner in self: - partner.attended_registration_count = len( - partner.registrations.filtered(lambda x: x.state == 'done')) - @api.multi def write(self, data): res = super(ResPartner, self).write(data) - self.mapped('registrations').partner_data_update(data) + self.mapped('event_registration_ids').partner_data_update(data) return res diff --git a/partner_event/tests/__init__.py b/partner_event/tests/__init__.py index 9ce85701d..22c3ab146 100644 --- a/partner_event/tests/__init__.py +++ b/partner_event/tests/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import test_event_registration diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index f6407e8bf..45e70b26f 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells +# 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). @@ -47,17 +46,17 @@ def test_create(self): self.assertEqual(partner_02.email, self.registration_02.email) self.assertEqual(partner_02.phone, self.registration_02.phone) - def test_count_events(self): + def test_count_registrations(self): event_1 = self.event_0.copy() - self.assertEqual(self.partner_01.event_count, 0) + self.assertEqual(self.partner_01.registration_count, 0) self.registration_01.state = "open" self.partner_01.invalidate_cache() - self.assertEqual(self.partner_01.event_count, 1) + 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_cache() - self.assertEqual(self.partner_01.event_count, 2) + self.assertEqual(self.partner_01.registration_count, 2) def test_button_register(self): event_1 = self.event_0.copy() @@ -90,6 +89,7 @@ def test_data_update(self): 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({ diff --git a/partner_event/views/event_event_view.xml b/partner_event/views/event_event_view.xml index f7909ebf7..1a37d3b0b 100644 --- a/partner_event/views/event_event_view.xml +++ b/partner_event/views/event_event_view.xml @@ -1,5 +1,5 @@ - diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index cba239036..e0a7fbebf 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -1,5 +1,5 @@ - @@ -22,8 +22,8 @@ type="action" class="oe_stat_button oe_inline" help="Count of events with confirmed registrations." - icon="fa-futbol-o"> - +
diff --git a/partner_event/wizard/__init__.py b/partner_event/wizard/__init__.py index c0ab68950..dc5828ccd 100644 --- a/partner_event/wizard/__init__.py +++ b/partner_event/wizard/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - 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 index 2d4cdaeec..e73d908d2 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2014 Tecnativa S.L. - Pedro M. Baeza -# © 2015 Tecnativa S.L. - Javier Iniesta -# © 2016 Tecnativa S.L. - Antonio Espinosa -# © 2016 Tecnativa S.L. - Vicent Cubells +# 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 api, fields, models diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml index ff094e818..fb3e56cd6 100644 --- a/partner_event/wizard/res_partner_register_event_view.xml +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -1,5 +1,5 @@ - @@ -35,14 +35,18 @@ res.partner.register.event form form + + new
- - - res.partner - Register in an event - - +
From c89e9202b1bf55ea9296523e21db87d620a02c84 Mon Sep 17 00:00:00 2001 From: David Vidal Date: Tue, 15 May 2018 09:09:33 +0200 Subject: [PATCH 12/47] [IMP] partner_event: catch onchange with attendee_partner (#1) --- .../migrations/10.0.2.0.0/post-migration.py | 13 ------------- partner_event/models/event_registration.py | 13 +++++++++++++ partner_event/models/res_partner.py | 7 +++++++ 3 files changed, 20 insertions(+), 13 deletions(-) delete mode 100644 partner_event/migrations/10.0.2.0.0/post-migration.py diff --git a/partner_event/migrations/10.0.2.0.0/post-migration.py b/partner_event/migrations/10.0.2.0.0/post-migration.py deleted file mode 100644 index 257ebcff2..000000000 --- a/partner_event/migrations/10.0.2.0.0/post-migration.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2017 Sergio Teruel -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from openupgradelib import openupgrade - - -@openupgrade.migrate() -def migrate(env, version): - if not version: - return - openupgrade.logged_query( - env.cr, - 'UPDATE event_registration SET attendee_partner_id = partner_id') diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 90629289e..847b64f95 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -17,6 +17,7 @@ class EventRegistration(models.Model): comodel_name='res.partner', string='Attendee Partner', ondelete='restrict', + copy=False, ) def _prepare_partner(self, vals): @@ -57,3 +58,15 @@ def partner_data_update(self, data): 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(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, + } + return super(EventRegistration, self.with_context( + **get_attendee_partner_address))._onchange_partner() + return super(EventRegistration, self)._onchange_partner() diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index 294efc6c2..cdee8a775 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -33,3 +33,10 @@ 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) From 56133aaa8b5e883474dc1ffa2cf8b8e1ff87f0d6 Mon Sep 17 00:00:00 2001 From: Anil Kesariya Date: Tue, 2 Oct 2018 19:32:17 +0530 Subject: [PATCH 13/47] [MIG]partner_event:Migrated the module from v11 to v12 --- partner_event/README.rst | 3 ++- partner_event/__manifest__.py | 4 +++- partner_event/wizard/res_partner_register_event.py | 3 +++ partner_event/wizard/res_partner_register_event_view.xml | 6 ++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index 1d55ffa77..eb5b71e77 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -36,7 +36,7 @@ Usage .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/199/11.0 + :target: https://runbot.odoo-community.org/runbot/199/12.0 Bug Tracker =========== @@ -70,6 +70,7 @@ Contributors * Vicent Cubells * David Vidal * Rafael Blasco +* Anil Kesariya Maintainer ---------- diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 6f8e77639..224ead98b 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -3,15 +3,17 @@ # 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 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Link partner to events', - 'version': '11.0.2.0.1', + 'version': '12.0.1.0.0', 'category': 'Marketing', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', 'website': 'https://www.tecnativa.com', + 'development_status': 'stable', "license": "AGPL-3", 'depends': [ 'event', diff --git a/partner_event/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py index e73d908d2..86a425d47 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -2,6 +2,7 @@ # Copyright 2015 Tecnativa S.L. - Javier Iniesta # Copyright 2016 Tecnativa S.L. - Antonio Espinosa # Copyright 2016 Tecnativa S.L. - Vicent Cubells +# Copyright 2018 Jupical Technologies Pvt. Ltd. - Anil Kesariya # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models @@ -10,6 +11,8 @@ class ResPartnerRegisterEvent(models.TransientModel): _name = 'res.partner.register.event' + _description = 'Register partner for event' + event = fields.Many2one('event.event', required=True) errors = fields.Text(readonly=True) diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml index fb3e56cd6..9fd8fd2a9 100644 --- a/partner_event/wizard/res_partner_register_event_view.xml +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -1,5 +1,6 @@ @@ -12,8 +13,9 @@ -
From a4fa3df14d6ff634df8a581262a417e36b44245d Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 4 Mar 2019 18:59:18 +0100 Subject: [PATCH 14/47] [IMP] partner_event: README by fragments --- partner_event/README.rst | 71 ++-- partner_event/i18n/es.po | 122 ++++-- partner_event/i18n/partner_event.pot | 140 ++++++ partner_event/i18n/sl.po | 133 +++++- partner_event/readme/CONFIGURE.rst | 9 + partner_event/readme/CONTRIBUTORS.rst | 8 + partner_event/readme/DESCRIPTION.rst | 12 + partner_event/static/description/index.html | 448 ++++++++++++++++++++ 8 files changed, 874 insertions(+), 69 deletions(-) create mode 100644 partner_event/i18n/partner_event.pot create mode 100644 partner_event/readme/CONFIGURE.rst create mode 100644 partner_event/readme/CONTRIBUTORS.rst create mode 100644 partner_event/readme/DESCRIPTION.rst create mode 100644 partner_event/static/description/index.html diff --git a/partner_event/README.rst b/partner_event/README.rst index eb5b71e77..db12ef4b8 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -1,9 +1,26 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.png - :alt: License: AGPL-3 +====================== +Link partner to events +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -======================= -Link partner and events -======================= +.. |badge1| 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 +.. |badge2| image:: https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github + :target: https://github.com/OCA/event/tree/12.0/partner_event + :alt: OCA/event +.. |badge3| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/event-12-0/event-12-0-partner_event + :alt: Translate me on Weblate +.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/199/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| This module links partners with the events they are registered through a smart button. @@ -18,6 +35,11 @@ It also includes: to an event * Restricts partner deletion when event attendees are linked to it. +**Table of contents** + +.. contents:: + :local: + Configuration ============= @@ -31,37 +53,26 @@ be filled with partner's data. The event registration values email, name and phone will be changed if the related partner values are changed and the event end date hasn't passed yet. -Usage -===== - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/199/12.0 - 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. - -Known Issues / Roadmap -====================== +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 `_. -* In registration contact field has no onchange check so changing the partner - is not going to change any info on the registration. +Do not contact contributors directly about support or help with technical issues. Credits ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Tecnativa Contributors ------------- +~~~~~~~~~~~~ * Pedro M. Baeza * Javier Iniesta @@ -72,17 +83,19 @@ Contributors * Rafael Blasco * Anil Kesariya -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - 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. -To contribute to this module, please visit http://odoo-community.org. +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/i18n/es.po b/partner_event/i18n/es.po index c6d2ac1c9..14194595f 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -10,29 +10,79 @@ msgstr "" "PO-Revision-Date: 2015-11-03 16:30+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" #. module: partner_event -#: view:res.partner.register.event:partner_event.res_partner_register_event_view +#: 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 +#, fuzzy +msgid "Attendances" +msgstr "Empresa asistente" + +#. 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 "Empresa asistente" + +#. module: partner_event +#: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view msgid "Cancel" msgstr "Cancelar" #. module: partner_event -#: field:event.event,create_partner:0 +#: model:ir.model,name:partner_event.model_res_partner +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +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 msgid "Create Partners in registration" msgstr "Crear empresas en el registro" #. module: partner_event -#: view:res.partner.register.event:partner_event.res_partner_register_event_view +#: 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 "" + +#. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date +#, fuzzy +msgid "Created on" +msgstr "Crear registros" + +#. 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 -#: field:res.partner.register.event,event:0 +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__event msgid "Event" msgstr "Evento" @@ -42,51 +92,71 @@ msgid "Event Registration" msgstr "Registro a evento" #. module: partner_event -#: field:res.partner,attended_registration_count:0 -msgid "Event attended registrations number" -msgstr "Nº de registrados que han asistido al evento" - -#. module: partner_event -#: field:res.partner,registrations:0 +#: 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 -#: field:res.partner,registration_count:0 -msgid "Event registrations number" -msgstr "Nº Registros a eventos" +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id +msgid "ID" +msgstr "" #. module: partner_event -#: field:event.registration,attendee_partner_id:0 -msgid "Attendee Partner" -msgstr "Empresa asistente" +#: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event____last_update +msgid "Last Modified on" +msgstr "" #. module: partner_event -#: view:res.partner:partner_event.view_partner_form_registrations -msgid "Events" -msgstr "Eventos" +#: 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,name:partner_event.model_res_partner -msgid "Partner" -msgstr "Empresa" +#: 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 +#: model:ir.actions.act_window,name:partner_event.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 +#, fuzzy +msgid "Register partner for event" +msgstr "Registrar en un evento" + #. module: partner_event #: model:ir.actions.act_window,name:partner_event.act_partner_registration msgid "Registrations" msgstr "Registros" #. module: partner_event -#: view:res.partner.register.event:partner_event.res_partner_register_event_view +#: 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 -#: view:res.partner.register.event:partner_event.res_partner_register_event_view -msgid "or" -msgstr "o" +#: 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 "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/partner_event.pot b/partner_event/i18n/partner_event.pot new file mode 100644 index 000000000..fbbeeca6a --- /dev/null +++ b/partner_event/i18n/partner_event.pot @@ -0,0 +1,140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_event +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_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 +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +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 +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 +#: model:ir.actions.act_window,name:partner_event.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 index 5c9eb7ef3..22b3eb7b2 100644 --- a/partner_event/i18n/sl.po +++ b/partner_event/i18n/sl.po @@ -10,40 +10,145 @@ msgstr "" "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" -"Language: sl\n" "X-Generator: Poedit 1.8.4\n" #. module: partner_event -#: field:res.partner,attended_registration_count:0 -msgid "Attended registration number" -msgstr "Pričakovano število prijav" +#: 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 -#: field:res.partner,event_registrations:0 -msgid "Event registrations" +#: 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_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 +#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id +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 +#, 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 -#: view:res.partner:partner_event.view_partner_form_registrations -msgid "Events" +#: 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_res_partner -msgid "Partner" -msgstr "Partner" +#: 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 -#: field:res.partner,registration_count:0 -msgid "Registration number" +#: model:ir.actions.act_window,name:partner_event.action_partner_register_event +#: model:ir.actions.act_window,name:partner_event.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 -#: field:res.partner,registrations:0 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/readme/CONFIGURE.rst b/partner_event/readme/CONFIGURE.rst new file mode 100644 index 000000000..bc9d6000b --- /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 and phone fields. + +If partner already exists and user only fills email, name and phone fields will +be filled with partner's data. + +The event registration values email, name and phone 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..a469f18ba --- /dev/null +++ b/partner_event/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* Pedro M. Baeza +* Javier Iniesta +* Antonio Espinosa +* Jairo Llopis +* Vicent Cubells +* David Vidal +* Rafael Blasco +* Anil Kesariya diff --git a/partner_event/readme/DESCRIPTION.rst b/partner_event/readme/DESCRIPTION.rst new file mode 100644 index 000000000..9c2e259c5 --- /dev/null +++ b/partner_event/readme/DESCRIPTION.rst @@ -0,0 +1,12 @@ +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. diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html new file mode 100644 index 000000000..25dd52121 --- /dev/null +++ b/partner_event/static/description/index.html @@ -0,0 +1,448 @@ + + + + + + +Link partner to events + + + + + + From b0922cb8b4fddb9cd38a03df9930ab6429dd6219 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Tue, 20 Aug 2019 12:29:51 +0000 Subject: [PATCH 15/47] Translated using Weblate (Spanish) Currently translated at 100.0% (24 of 24 strings) Translation: event-12.0/event-12.0-partner_event Translate-URL: https://translation.odoo-community.org/projects/event-12-0/event-12-0-partner_event/es/ --- partner_event/i18n/es.po | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index 14194595f..3c9ded258 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -7,26 +7,26 @@ 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: 2015-11-03 16:30+0000\n" -"Last-Translator: <>\n" +"PO-Revision-Date: 2019-08-20 14:44+0000\n" +"Last-Translator: Jairo Llopis \n" "Language-Team: \n" -"Language: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \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 -#, fuzzy msgid "Attendances" -msgstr "Empresa asistente" +msgstr "Asistencias" #. module: partner_event #: model_terms:ir.ui.view,arch_db:partner_event.view_registration_search msgid "Attended" -msgstr "" +msgstr "Asistido" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id @@ -42,12 +42,12 @@ msgstr "Cancelar" #: model:ir.model,name:partner_event.model_res_partner #: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id msgid "Contact" -msgstr "" +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 "" +msgstr "Cantidad de eventos con asistencia confirmada." #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_event_event__create_partner @@ -62,23 +62,22 @@ 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 "" +msgstr "Creado por" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_date -#, fuzzy msgid "Created on" -msgstr "Crear registros" +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 "" +msgstr "Nombre mostrado" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__errors msgid "Errors" -msgstr "" +msgstr "Errores" #. module: partner_event #: model:ir.model,name:partner_event.model_event_event @@ -100,22 +99,22 @@ msgstr "Registros a eventos" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__id msgid "ID" -msgstr "" +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 "" +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 "" +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 "" +msgstr "Última actualización el" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.action_partner_register_event @@ -125,9 +124,8 @@ msgstr "Registrar en un evento" #. module: partner_event #: model:ir.model,name:partner_event.model_res_partner_register_event -#, fuzzy msgid "Register partner for event" -msgstr "Registrar en un evento" +msgstr "Registrar empresa al evento" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.act_partner_registration @@ -145,6 +143,8 @@ 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" From 45e49b9c84cec8e6364d05755827011bb8095c05 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 22 Aug 2019 09:48:17 +0200 Subject: [PATCH 16/47] [FIX] partner_event: Proper development status --- partner_event/README.rst | 13 ++++++++----- partner_event/__manifest__.py | 2 +- partner_event/static/description/index.html | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index db12ef4b8..9ff680d08 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -7,20 +7,23 @@ Link partner to events !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -.. |badge1| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |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 -.. |badge2| image:: https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fevent-lightgray.png?logo=github :target: https://github.com/OCA/event/tree/12.0/partner_event :alt: OCA/event -.. |badge3| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/event-12-0/event-12-0-partner_event :alt: Translate me on Weblate -.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/199/12.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| +|badge1| |badge2| |badge3| |badge4| |badge5| This module links partners with the events they are registered through a smart button. diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 224ead98b..6c474897e 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -13,7 +13,7 @@ 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', 'website': 'https://www.tecnativa.com', - 'development_status': 'stable', + 'development_status': 'Production/Stable', "license": "AGPL-3", 'depends': [ 'event', diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index 25dd52121..dcca8944d 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -367,7 +367,7 @@

Link partner to events

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

This module links partners with the events they are registered through a smart button.

It also includes:

From 7b87a4c70346bb5453909522b61b5ec17fee9cf3 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 8 Oct 2019 17:16:28 +0200 Subject: [PATCH 17/47] [IMP] partner_event: add data to old registrations --- partner_event/__init__.py | 1 + partner_event/__manifest__.py | 3 ++- partner_event/hooks.py | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 partner_event/hooks.py diff --git a/partner_event/__init__.py b/partner_event/__init__.py index 9b4296142..700d6ab98 100644 --- a/partner_event/__init__.py +++ b/partner_event/__init__.py @@ -1,2 +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 index 6c474897e..70e7f0226 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -8,7 +8,7 @@ { 'name': 'Link partner to events', - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'category': 'Marketing', 'author': 'Tecnativa,' 'Odoo Community Association (OCA)', @@ -24,5 +24,6 @@ '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..e8077982c --- /dev/null +++ b/partner_event/hooks.py @@ -0,0 +1,22 @@ +# Copyright 2019 David Vidal +# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html +from odoo import api, SUPERUSER_ID + + +def post_init_hook(cr, registry): + """Preload proper attendee partner for existing registrations using + the same rules the module does""" + with api.Environment.manage(): + 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, + }) From ddc9790f61367e7dc889f2310a89c256622839cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Mon, 7 Sep 2020 16:02:57 +0200 Subject: [PATCH 18/47] [IMP] partner_event: black, isort, prettier --- partner_event/__manifest__.py | 29 +++--- partner_event/hooks.py | 22 ++--- partner_event/models/event_event.py | 7 +- partner_event/models/event_registration.py | 57 ++++++----- partner_event/models/res_partner.py | 34 ++++--- .../tests/test_event_registration.py | 82 ++++++++-------- partner_event/views/event_event_view.xml | 24 +++-- .../views/event_registration_view.xml | 65 ++++++------- partner_event/views/res_partner_view.xml | 52 +++++----- .../wizard/res_partner_register_event.py | 49 +++++----- .../res_partner_register_event_view.xml | 95 ++++++++++--------- 11 files changed, 258 insertions(+), 258 deletions(-) diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 70e7f0226..ed89fad23 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -7,23 +7,20 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Link partner to events', - 'version': '12.0.1.0.1', - 'category': 'Marketing', - 'author': 'Tecnativa,' - 'Odoo Community Association (OCA)', - 'website': 'https://www.tecnativa.com', - 'development_status': 'Production/Stable', + "name": "Link partner to events", + "version": "12.0.1.0.1", + "category": "Marketing", + "author": "Tecnativa," "Odoo Community Association (OCA)", + "website": "https://www.tecnativa.com", + "development_status": "Production/Stable", "license": "AGPL-3", - 'depends': [ - 'event', + "depends": ["event",], + "data": [ + "views/res_partner_view.xml", + "views/event_event_view.xml", + "views/event_registration_view.xml", + "wizard/res_partner_register_event_view.xml", ], - 'data': [ - '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', + "post_init_hook": "post_init_hook", "installable": True, } diff --git a/partner_event/hooks.py b/partner_event/hooks.py index e8077982c..113f3077f 100644 --- a/partner_event/hooks.py +++ b/partner_event/hooks.py @@ -1,6 +1,6 @@ # Copyright 2019 David Vidal # License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0.html -from odoo import api, SUPERUSER_ID +from odoo import SUPERUSER_ID, api def post_init_hook(cr, registry): @@ -8,15 +8,15 @@ def post_init_hook(cr, registry): the same rules the module does""" with api.Environment.manage(): env = api.Environment(cr, SUPERUSER_ID, {}) - attendees_emails = env['event.registration'].read_group([ - ('email', '!=', False), - ], ['email'], groupby='email') + 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) + 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, - }) + attendees = env["event.registration"].search(email["__domain"]) + attendees.write( + {"attendee_partner_id": attendee_partner.id,} + ) diff --git a/partner_event/models/event_event.py b/partner_event/models/event_event.py index e94288a45..2dd68d21b 100644 --- a/partner_event/models/event_event.py +++ b/partner_event/models/event_event.py @@ -8,7 +8,8 @@ class EventEvent(models.Model): - _inherit = 'event.event' + _inherit = "event.event" - create_partner = fields.Boolean(string="Create Partners in registration", - default=False) + 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 index 847b64f95..a8c9023a7 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -10,63 +10,60 @@ class EventRegistration(models.Model): _inherit = "event.registration" - partner_id = fields.Many2one( - ondelete='restrict', - ) + partner_id = fields.Many2one(ondelete="restrict",) attendee_partner_id = fields.Many2one( - comodel_name='res.partner', - string='Attendee Partner', - ondelete='restrict', + comodel_name="res.partner", + string="Attendee Partner", + ondelete="restrict", copy=False, ) def _prepare_partner(self, vals): return { - 'name': vals.get('name') or vals.get('email'), - 'email': vals.get('email', False), - 'phone': vals.get('phone', False), + "name": vals.get("name") or vals.get("email"), + "email": vals.get("email", False), + "phone": vals.get("phone", False), } @api.model def create(self, vals): - if not vals.get('attendee_partner_id') and vals.get('email'): - Partner = self.env['res.partner'] - Event = self.env['event.event'] + 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(vals['event_id']) + email = vals.get("email").replace("%", "").replace("_", "\\_") + attendee_partner = Partner.search([("email", "=ilike", email)], limit=1) + event = Event.browse(vals["event_id"]) if attendee_partner: - vals['name'] = vals.setdefault('name', attendee_partner.name) - vals['phone'] = vals.setdefault( - 'phone', attendee_partner.phone) + vals["name"] = vals.setdefault("name", attendee_partner.name) + vals["phone"] = vals.setdefault("phone", attendee_partner.phone) elif event.create_partner: # Create partner - attendee_partner = Partner.sudo().create( - self._prepare_partner(vals)) - vals['attendee_partner_id'] = attendee_partner.id + attendee_partner = Partner.sudo().create(self._prepare_partner(vals)) + vals["attendee_partner_id"] = attendee_partner.id return super(EventRegistration, self).create(vals) @api.multi def partner_data_update(self, data): - reg_data = dict((k, v) for k, v in - data.items() if k in ['name', 'email', 'phone']) + 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()) + lambda x: x.event_end_date >= fields.Datetime.now() + ) registrations.write(reg_data) - @api.onchange('attendee_partner_id', 'partner_id') + @api.onchange("attendee_partner_id", "partner_id") def _onchange_partner(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, + "get_attendee_partner_address": self.attendee_partner_id, } - return super(EventRegistration, self.with_context( - **get_attendee_partner_address))._onchange_partner() + return super( + EventRegistration, self.with_context(**get_attendee_partner_address) + )._onchange_partner() return super(EventRegistration, self)._onchange_partner() diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index cdee8a775..810f74249 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -8,35 +8,41 @@ class ResPartner(models.Model): - _inherit = 'res.partner' + _inherit = "res.partner" event_registration_ids = fields.One2many( - string="Event registrations", oldname='registrations', - comodel_name='event.registration', inverse_name="attendee_partner_id") + string="Event registrations", + oldname="registrations", + comodel_name="event.registration", + inverse_name="attendee_partner_id", + ) registration_count = fields.Integer( - string='Attendances', - compute='_compute_registration_count', - store=False) + string="Attendances", compute="_compute_registration_count", store=False + ) @api.multi - @api.depends('event_registration_ids') + @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")) + self.env["event.registration"] + .search( + [ + ("attendee_partner_id", "child_of", partner.id), + ("state", "not in", ("cancel", "draft")), + ] + ) + .mapped("event_id") + ) @api.multi def write(self, data): res = super(ResPartner, self).write(data) - self.mapped('event_registration_ids').partner_data_update(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) + 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/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 45e70b26f..c09301d24 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -5,37 +5,47 @@ # Copyright 2017 Tecnativa - David Vidal # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from psycopg2 import IntegrityError from datetime import datetime, timedelta -from odoo.tests import common + +from psycopg2 import IntegrityError + from odoo import fields +from odoo.tests import common class TestEventRegistration(common.SavepointCase): @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_availability': 'limited', - 'seats_max': '5', - 'seats_min': '1', - }) + cls.event_0 = cls.env["event.event"].create( + { + "name": "Test event", + "date_begin": fields.Datetime.now(), + "date_end": fields.Datetime.now(), + "seats_availability": "limited", + "seats_max": "5", + "seats_min": "1", + } + ) 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' - }) - 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'}) + 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"} + ) + 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) @@ -60,11 +70,9 @@ def test_count_registrations(self): 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() + 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() @@ -72,19 +80,17 @@ def test_data_update(self): self.tomorrow = datetime.now() + timedelta(days=1) self.last_moth = datetime.now() - timedelta(days=30) # Set an old event - event_2.write({'date_begin': self.last_moth}) - event_2.write({'date_end': self.yesterday}) + event_2.write({"date_begin": self.last_moth}) + 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') + self.partner_01.write({"email": "new@test.com"}) + self.assertNotEqual(event_2.registration_ids.email, "new@test.com") # Update partner for an 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') + 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 @@ -92,8 +98,6 @@ def test_delete_registered_partner(self): 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 = 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 index 1a37d3b0b..d41882ae3 100644 --- a/partner_event/views/event_event_view.xml +++ b/partner_event/views/event_event_view.xml @@ -1,18 +1,16 @@ - + - - - Events (with partner) - event.event - - - - - + + Events (with partner) + event.event + + + + + + - - - + diff --git a/partner_event/views/event_registration_view.xml b/partner_event/views/event_registration_view.xml index 3cde8b9d3..359fe1cb3 100644 --- a/partner_event/views/event_registration_view.xml +++ b/partner_event/views/event_registration_view.xml @@ -1,41 +1,38 @@ - + - - - event.registration - - - - + + event.registration + + + + + - - - - - event.registration - - - - + + + event.registration + + + + + - - - - - Search attended registrations - 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 index e0a7fbebf..69f3d2531 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -1,33 +1,33 @@ - + - - - event.registration - form - 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 - - -
- -
-
-
- + icon="fa-id-card" + > + + + + +
diff --git a/partner_event/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py index 86a425d47..b09a18dab 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -9,46 +9,45 @@ class ResPartnerRegisterEvent(models.TransientModel): - _name = 'res.partner.register.event' + _name = "res.partner.register.event" - _description = 'Register partner for event' + _description = "Register partner for event" - event = fields.Many2one('event.event', required=True) + event = fields.Many2one("event.event", required=True) errors = fields.Text(readonly=True) 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, - 'date_open': fields.Datetime.now(), + "event_id": self.event.id, + "partner_id": partner.id, + "attendee_partner_id": partner.id, + "name": partner.name, + "email": partner.email, + "phone": partner.phone, + "date_open": fields.Datetime.now(), } @api.multi def button_register(self): - registration_obj = self.env['event.registration'] + registration_obj = self.env["event.registration"] errors = [] - for partner in self.env['res.partner'].browse( - self.env.context.get('active_ids', [])): + for partner in self.env["res.partner"].browse( + self.env.context.get("active_ids", []) + ): try: with self.env.cr.savepoint(): - registration_obj.create( - self._prepare_registration(partner)) + registration_obj.create(self._prepare_registration(partner)) except: errors.append(partner.name) if errors: - self.errors = '\n'.join(errors) - data_obj = self.env.ref('partner_event.' - 'res_partner_register_event_view') + self.errors = "\n".join(errors) + data_obj = self.env.ref("partner_event." "res_partner_register_event_view") return { - 'type': 'ir.actions.act_window', - 'res_model': self._name, - 'view_mode': 'form', - 'view_type': 'form', - 'view_id': [data_obj.id], - 'res_id': self.id, - 'target': 'new', + "type": "ir.actions.act_window", + "res_model": self._name, + "view_mode": "form", + "view_type": "form", + "view_id": [data_obj.id], + "res_id": self.id, + "target": "new", } diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml index 9fd8fd2a9..95e5a30c0 100644 --- a/partner_event/wizard/res_partner_register_event_view.xml +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -1,54 +1,55 @@ - + - - - Register in an event - res.partner.register.event - -
- - - - - - - -
-
-
-
-
-
-
- - - Register in an event - res.partner.register.event - form - form - - - new - - - - + class="oe_highlight" + /> +
+ +
+ + + Register in an event + res.partner.register.event + form + form + + + new + +
From 2afbd5d97400ec4bb1c11f3f937200413c112562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 8 Sep 2020 08:19:36 +0200 Subject: [PATCH 19/47] [MIG] partner_event: Migration to 13.0 --- partner_event/README.rst | 39 +++++++++------- partner_event/__manifest__.py | 5 ++- partner_event/hooks.py | 6 +-- partner_event/i18n/partner_event.pot | 11 ++--- partner_event/models/event_registration.py | 45 ++++++++++--------- partner_event/models/res_partner.py | 4 +- partner_event/readme/CONFIGURE.rst | 6 +-- partner_event/readme/CONTRIBUTORS.rst | 23 ++++++---- partner_event/static/description/index.html | 35 +++++++++------ .../tests/test_event_registration.py | 8 +++- partner_event/views/res_partner_view.xml | 1 - .../wizard/res_partner_register_event.py | 9 ++-- .../res_partner_register_event_view.xml | 6 +-- 13 files changed, 109 insertions(+), 89 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index 9ff680d08..4ab2ed241 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -14,13 +14,13 @@ Link partner to events :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/12.0/partner_event + :target: https://github.com/OCA/event/tree/13.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-12-0/event-12-0-partner_event + :target: https://translation.odoo-community.org/projects/event-13-0/event-13-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/12.0 + :target: https://runbot.odoo-community.org/runbot/199/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -48,12 +48,12 @@ 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 and phone fields. +be created automatically with name, email, phone and mobile fields. -If partner already exists and user only fills email, name and phone fields will +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 and phone will be changed if the +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 @@ -62,7 +62,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -77,14 +77,21 @@ Authors Contributors ~~~~~~~~~~~~ -* Pedro M. Baeza -* Javier Iniesta -* Antonio Espinosa -* Jairo Llopis -* Vicent Cubells -* David Vidal -* Rafael Blasco -* Anil Kesariya +* `Tecnativa `__: + + * Pedro M. Baeza + * Antonio Espinosa + * Jairo Llopis + * Vicent Cubells + * David Vidal + * Rafael Blasco + * Víctor Martínez + +* `Antiun `__: + + * Javier Iniesta + +* `Anil Kesariya` Maintainers ~~~~~~~~~~~ @@ -99,6 +106,6 @@ 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. +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/__manifest__.py b/partner_event/__manifest__.py index ed89fad23..c69b028e8 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -4,17 +4,18 @@ # 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 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Link partner to events", - "version": "12.0.1.0.1", + "version": "13.0.1.0.0", "category": "Marketing", "author": "Tecnativa," "Odoo Community Association (OCA)", "website": "https://www.tecnativa.com", "development_status": "Production/Stable", "license": "AGPL-3", - "depends": ["event",], + "depends": ["event"], "data": [ "views/res_partner_view.xml", "views/event_event_view.xml", diff --git a/partner_event/hooks.py b/partner_event/hooks.py index 113f3077f..212ee51c6 100644 --- a/partner_event/hooks.py +++ b/partner_event/hooks.py @@ -9,7 +9,7 @@ def post_init_hook(cr, registry): with api.Environment.manage(): env = api.Environment(cr, SUPERUSER_ID, {}) attendees_emails = env["event.registration"].read_group( - [("email", "!=", False),], ["email"], groupby="email" + [("email", "!=", False)], ["email"], groupby="email" ) for email in attendees_emails: attendee_partner = env["res.partner"].search( @@ -17,6 +17,4 @@ def post_init_hook(cr, registry): ) if attendee_partner: attendees = env["event.registration"].search(email["__domain"]) - attendees.write( - {"attendee_partner_id": attendee_partner.id,} - ) + attendees.write({"attendee_partner_id": attendee_partner.id}) diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index fbbeeca6a..5357f8a0c 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * partner_event +# * partner_event # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -135,6 +135,7 @@ 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" +msgid "" +"These partners haven't been registered because they\\'re already" +" registered or other error occurred" msgstr "" - diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index a8c9023a7..1897242f6 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -2,6 +2,7 @@ # 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 @@ -10,7 +11,7 @@ class EventRegistration(models.Model): _inherit = "event.registration" - partner_id = fields.Many2one(ondelete="restrict",) + partner_id = fields.Many2one(ondelete="restrict") attendee_partner_id = fields.Many2one( comodel_name="res.partner", string="Attendee Partner", @@ -25,29 +26,29 @@ def _prepare_partner(self, vals): "phone": vals.get("phone", False), } - @api.model - def create(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(vals["event_id"]) - if attendee_partner: - vals["name"] = vals.setdefault("name", attendee_partner.name) - vals["phone"] = vals.setdefault("phone", attendee_partner.phone) - elif event.create_partner: - # Create partner - attendee_partner = Partner.sudo().create(self._prepare_partner(vals)) - vals["attendee_partner_id"] = attendee_partner.id - return super(EventRegistration, self).create(vals) + @api.model_create_multi + def create(self, vals_list): + for values in vals_list: + if not values.get("attendee_partner_id") and values.get("email"): + Partner = self.env["res.partner"] + Event = self.env["event.event"] + # Look for a partner with that email + email = values.get("email").replace("%", "").replace("_", "\\_") + attendee_partner = Partner.search([("email", "=ilike", email)], limit=1) + event = Event.browse(values["event_id"]) + if attendee_partner: + for field in {"name", "phone", "mobile"}: + values[field] = values.get(field) or attendee_partner[field] + elif event.create_partner: + # Create partner + attendee_partner = Partner.sudo().create( + self._prepare_partner(values) + ) + values["attendee_partner_id"] = attendee_partner.id + return super(EventRegistration, self).create(vals_list) - @api.multi def partner_data_update(self, data): - reg_data = { - k: v for k, v in data.items() if k in ["name", "email", "phone"] - } + 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( diff --git a/partner_event/models/res_partner.py b/partner_event/models/res_partner.py index 810f74249..16cf74e47 100644 --- a/partner_event/models/res_partner.py +++ b/partner_event/models/res_partner.py @@ -2,6 +2,7 @@ # 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 @@ -12,7 +13,6 @@ class ResPartner(models.Model): event_registration_ids = fields.One2many( string="Event registrations", - oldname="registrations", comodel_name="event.registration", inverse_name="attendee_partner_id", ) @@ -20,7 +20,6 @@ class ResPartner(models.Model): string="Attendances", compute="_compute_registration_count", store=False ) - @api.multi @api.depends("event_registration_ids") def _compute_registration_count(self): for partner in self: @@ -35,7 +34,6 @@ def _compute_registration_count(self): .mapped("event_id") ) - @api.multi def write(self, data): res = super(ResPartner, self).write(data) self.mapped("event_registration_ids").partner_data_update(data) diff --git a/partner_event/readme/CONFIGURE.rst b/partner_event/readme/CONFIGURE.rst index bc9d6000b..46486568b 100644 --- a/partner_event/readme/CONFIGURE.rst +++ b/partner_event/readme/CONFIGURE.rst @@ -1,9 +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 and phone fields. +be created automatically with name, email, phone and mobile fields. -If partner already exists and user only fills email, name and phone fields will +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 and phone will be changed if the +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 index a469f18ba..aba24d7b0 100644 --- a/partner_event/readme/CONTRIBUTORS.rst +++ b/partner_event/readme/CONTRIBUTORS.rst @@ -1,8 +1,15 @@ -* Pedro M. Baeza -* Javier Iniesta -* Antonio Espinosa -* Jairo Llopis -* Vicent Cubells -* David Vidal -* Rafael Blasco -* Anil Kesariya +* `Tecnativa `__: + + * Pedro M. Baeza + * Antonio Espinosa + * Jairo Llopis + * Vicent Cubells + * David Vidal + * Rafael Blasco + * Víctor Martínez + +* `Antiun `__: + + * Javier Iniesta + +* `Anil Kesariya` diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index dcca8944d..4fe9c63a8 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -367,7 +367,7 @@

Link partner to events

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

This module links partners with the events they are registered through a smart button.

It also includes:

@@ -397,10 +397,10 @@

Link partner to events

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 and phone fields.

-

If partner already exists and user only fills email, name and phone fields 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 and phone will be changed if the +

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.

@@ -408,7 +408,7 @@

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -422,14 +422,21 @@

Authors

Contributors

@@ -439,7 +446,7 @@

Maintainers

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.

+

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/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index c09301d24..bdd6dd4a3 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -33,7 +33,11 @@ def setUpClass(cls): ) partner_model = cls.env["res.partner"] cls.partner_01 = partner_model.create( - {"name": "Test Partner 01", "email": "email01@test.com"} + { + "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} @@ -98,6 +102,6 @@ def test_delete_registered_partner(self): 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 = self.env["res.partner"].create({"name": "unregistered partner"}) partner3.unlink() self.assertFalse(partner3.exists()) diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index 69f3d2531..62d98df65 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -4,7 +4,6 @@ event.registration - form Registrations tree,form,calendar,graph [("attendee_partner_id", "child_of", active_ids)] diff --git a/partner_event/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py index b09a18dab..dcb319adf 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -3,9 +3,10 @@ # Copyright 2016 Tecnativa S.L. - Antonio Espinosa # Copyright 2016 Tecnativa S.L. - Vicent Cubells # Copyright 2018 Jupical Technologies Pvt. Ltd. - Anil Kesariya +# 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 +from odoo import fields, models class ResPartnerRegisterEvent(models.TransientModel): @@ -13,7 +14,7 @@ class ResPartnerRegisterEvent(models.TransientModel): _description = "Register partner for event" - event = fields.Many2one("event.event", required=True) + event = fields.Many2one(comodel_name="event.event", required=True) errors = fields.Text(readonly=True) def _prepare_registration(self, partner): @@ -27,7 +28,6 @@ def _prepare_registration(self, partner): "date_open": fields.Datetime.now(), } - @api.multi def button_register(self): registration_obj = self.env["event.registration"] errors = [] @@ -37,7 +37,7 @@ def button_register(self): try: with self.env.cr.savepoint(): registration_obj.create(self._prepare_registration(partner)) - except: + except Exception: errors.append(partner.name) if errors: self.errors = "\n".join(errors) @@ -46,7 +46,6 @@ def button_register(self): "type": "ir.actions.act_window", "res_model": self._name, "view_mode": "form", - "view_type": "form", "view_id": [data_obj.id], "res_id": self.id, "target": "new", diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml index 95e5a30c0..aac94478f 100644 --- a/partner_event/wizard/res_partner_register_event_view.xml +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -36,7 +36,6 @@ Register in an event res.partner.register.event - form form @@ -45,11 +44,10 @@ From 3707fa00a59118a423e5aba2930463eebebdcc42 Mon Sep 17 00:00:00 2001 From: cpatel Date: Wed, 17 Feb 2021 14:16:11 +0100 Subject: [PATCH 20/47] [MIG] partner_event : Migration to 14.0 --- partner_event/README.rst | 10 +++++----- partner_event/__manifest__.py | 5 +++-- partner_event/hooks.py | 2 +- partner_event/i18n/partner_event.pot | 18 +++++++++++++++--- partner_event/models/event_registration.py | 6 +++--- partner_event/security/ir.model.access.csv | 2 ++ partner_event/static/description/index.html | 6 +++--- partner_event/tests/test_event_registration.py | 3 +-- partner_event/views/event_event_view.xml | 2 +- .../wizard/res_partner_register_event_view.xml | 16 +++++----------- 10 files changed, 39 insertions(+), 31 deletions(-) create mode 100644 partner_event/security/ir.model.access.csv diff --git a/partner_event/README.rst b/partner_event/README.rst index 4ab2ed241..5f401900b 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -14,13 +14,13 @@ Link partner to events :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/13.0/partner_event + :target: https://github.com/OCA/event/tree/14.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-13-0/event-13-0-partner_event + :target: https://translation.odoo-community.org/projects/event-14-0/event-14-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/13.0 + :target: https://runbot.odoo-community.org/runbot/199/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -62,7 +62,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -106,6 +106,6 @@ 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. +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/__manifest__.py b/partner_event/__manifest__.py index c69b028e8..e114edd2a 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -9,14 +9,15 @@ { "name": "Link partner to events", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Marketing", "author": "Tecnativa," "Odoo Community Association (OCA)", - "website": "https://www.tecnativa.com", + "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", diff --git a/partner_event/hooks.py b/partner_event/hooks.py index 212ee51c6..459117780 100644 --- a/partner_event/hooks.py +++ b/partner_event/hooks.py @@ -5,7 +5,7 @@ def post_init_hook(cr, registry): """Preload proper attendee partner for existing registrations using - the same rules the module does""" + the same rules the module does""" with api.Environment.manage(): env = api.Environment(cr, SUPERUSER_ID, {}) attendees_emails = env["event.registration"].read_group( diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index 5357f8a0c..1162f8103 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -29,6 +29,11 @@ msgstr "" 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" @@ -36,7 +41,6 @@ msgstr "" #. module: partner_event #: model:ir.model,name:partner_event.model_res_partner -#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id msgid "Contact" msgstr "" @@ -66,6 +70,9 @@ msgid "Created on" msgstr "" #. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__display_name +#: model:ir.model.fields,field_description:partner_event.field_event_registration__display_name +#: model:ir.model.fields,field_description:partner_event.field_res_partner__display_name #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name msgid "Display Name" msgstr "" @@ -93,11 +100,17 @@ msgid "Event registrations" msgstr "" #. module: partner_event +#: model:ir.model.fields,field_description:partner_event.field_event_event__id +#: model:ir.model.fields,field_description:partner_event.field_event_registration__id +#: model:ir.model.fields,field_description:partner_event.field_res_partner__id #: 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_event_event____last_update +#: model:ir.model.fields,field_description:partner_event.field_event_registration____last_update +#: model:ir.model.fields,field_description:partner_event.field_res_partner____last_update #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event____last_update msgid "Last Modified on" msgstr "" @@ -114,7 +127,6 @@ msgstr "" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.action_partner_register_event -#: model:ir.actions.act_window,name:partner_event.partner_register_event msgid "Register in an event" msgstr "" diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index 1897242f6..c830e2997 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -57,7 +57,7 @@ def partner_data_update(self, data): registrations.write(reg_data) @api.onchange("attendee_partner_id", "partner_id") - def _onchange_partner(self): + def _onchange_partner_id(self): if self.attendee_partner_id: if not self.partner_id: self.partner_id = self.attendee_partner_id @@ -66,5 +66,5 @@ def _onchange_partner(self): } return super( EventRegistration, self.with_context(**get_attendee_partner_address) - )._onchange_partner() - return super(EventRegistration, self)._onchange_partner() + )._onchange_partner_id() + return super(EventRegistration, self)._onchange_partner_id() 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/index.html b/partner_event/static/description/index.html index 4fe9c63a8..2ce6419ba 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -367,7 +367,7 @@

Link partner to events

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

This module links partners with the events they are registered through a smart button.

It also includes:

@@ -408,7 +408,7 @@

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -446,7 +446,7 @@

Maintainers

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.

+

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/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index bdd6dd4a3..d4c81ca25 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -22,9 +22,8 @@ def setUpClass(cls): "name": "Test event", "date_begin": fields.Datetime.now(), "date_end": fields.Datetime.now(), - "seats_availability": "limited", + "seats_limited": True, "seats_max": "5", - "seats_min": "1", } ) cls.event_0.create_partner = True diff --git a/partner_event/views/event_event_view.xml b/partner_event/views/event_event_view.xml index d41882ae3..59f906148 100644 --- a/partner_event/views/event_event_view.xml +++ b/partner_event/views/event_event_view.xml @@ -8,7 +8,7 @@ - + diff --git a/partner_event/wizard/res_partner_register_event_view.xml b/partner_event/wizard/res_partner_register_event_view.xml index aac94478f..d3a54c514 100644 --- a/partner_event/wizard/res_partner_register_event_view.xml +++ b/partner_event/wizard/res_partner_register_event_view.xml @@ -9,7 +9,10 @@
- + res.partner.register.event form - + new - From a37f60e858f4b4f86a6a9c2645467c5ae527aaae Mon Sep 17 00:00:00 2001 From: Simon S Date: Tue, 16 Nov 2021 07:53:33 +0000 Subject: [PATCH 21/47] Added translation using Weblate (Swedish) --- partner_event/i18n/sv.po | 158 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 partner_event/i18n/sv.po diff --git a/partner_event/i18n/sv.po b/partner_event/i18n/sv.po new file mode 100644 index 000000000..1092b1e7a --- /dev/null +++ b/partner_event/i18n/sv.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 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 +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_event_event__display_name +#: model:ir.model.fields,field_description:partner_event.field_event_registration__display_name +#: model:ir.model.fields,field_description:partner_event.field_res_partner__display_name +#: 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_event_event__id +#: model:ir.model.fields,field_description:partner_event.field_event_registration__id +#: model:ir.model.fields,field_description:partner_event.field_res_partner__id +#: 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_event_event____last_update +#: model:ir.model.fields,field_description:partner_event.field_event_registration____last_update +#: model:ir.model.fields,field_description:partner_event.field_res_partner____last_update +#: 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" From 7d1d8be356dd6f515b4c8f79074675d74ddb72f1 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Mon, 28 Feb 2022 15:27:39 +0100 Subject: [PATCH 22/47] [FIX] partner_event: ondelete cascade for wizard --- partner_event/__manifest__.py | 2 +- partner_event/i18n/it.po | 156 ++++++++++++++++++ .../wizard/res_partner_register_event.py | 4 +- 3 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 partner_event/i18n/it.po diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index e114edd2a..7d1c6c80f 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -9,7 +9,7 @@ { "name": "Link partner to events", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "category": "Marketing", "author": "Tecnativa," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/event", diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po new file mode 100644 index 000000000..8864aadd0 --- /dev/null +++ b/partner_event/i18n/it.po @@ -0,0 +1,156 @@ +# 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 +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_event_event__display_name +#: model:ir.model.fields,field_description:partner_event.field_event_registration__display_name +#: model:ir.model.fields,field_description:partner_event.field_res_partner__display_name +#: 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_event_event__id +#: model:ir.model.fields,field_description:partner_event.field_event_registration__id +#: model:ir.model.fields,field_description:partner_event.field_res_partner__id +#: 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_event_event____last_update +#: model:ir.model.fields,field_description:partner_event.field_event_registration____last_update +#: model:ir.model.fields,field_description:partner_event.field_res_partner____last_update +#: 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/wizard/res_partner_register_event.py b/partner_event/wizard/res_partner_register_event.py index dcb319adf..eb5c6bb8d 100644 --- a/partner_event/wizard/res_partner_register_event.py +++ b/partner_event/wizard/res_partner_register_event.py @@ -14,7 +14,9 @@ class ResPartnerRegisterEvent(models.TransientModel): _description = "Register partner for event" - event = fields.Many2one(comodel_name="event.event", required=True) + event = fields.Many2one( + comodel_name="event.event", required=True, ondelete="cascade" + ) errors = fields.Text(readonly=True) def _prepare_registration(self, partner): From 7b414fe4fe8d6edfe06b16c00f35ceeac9532c83 Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 25 Jan 2023 13:27:00 +0100 Subject: [PATCH 23/47] [MIG] partner_event: Migration to 15.0 --- partner_event/README.rst | 11 +++--- partner_event/__manifest__.py | 2 +- partner_event/hooks.py | 21 ++++++----- partner_event/i18n/es.po | 8 +++-- partner_event/i18n/it.po | 34 ++++++++---------- partner_event/i18n/partner_event.pot | 12 ++----- partner_event/i18n/sl.po | 8 +++-- partner_event/i18n/sv.po | 14 ++------ partner_event/readme/CONTRIBUTORS.rst | 1 + partner_event/static/description/icon.png | Bin 12024 -> 6905 bytes partner_event/static/description/icon.svg | 1 + partner_event/static/description/index.html | 7 ++-- .../tests/test_event_registration.py | 4 +-- 13 files changed, 56 insertions(+), 67 deletions(-) create mode 100644 partner_event/static/description/icon.svg diff --git a/partner_event/README.rst b/partner_event/README.rst index 5f401900b..cef58987d 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -14,13 +14,13 @@ Link partner to events :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/14.0/partner_event + :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-14-0/event-14-0-partner_event + :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/14.0 + :target: https://runbot.odoo-community.org/runbot/199/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -62,7 +62,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -86,6 +86,7 @@ Contributors * David Vidal * Rafael Blasco * Víctor Martínez + * Stefan Ungureanu * `Antiun `__: @@ -106,6 +107,6 @@ 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. +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/__manifest__.py b/partner_event/__manifest__.py index 7d1c6c80f..ad6377189 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -9,7 +9,7 @@ { "name": "Link partner to events", - "version": "14.0.1.0.1", + "version": "15.0.1.0.0", "category": "Marketing", "author": "Tecnativa," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/event", diff --git a/partner_event/hooks.py b/partner_event/hooks.py index 459117780..d9b04a543 100644 --- a/partner_event/hooks.py +++ b/partner_event/hooks.py @@ -6,15 +6,14 @@ def post_init_hook(cr, registry): """Preload proper attendee partner for existing registrations using the same rules the module does""" - with api.Environment.manage(): - env = api.Environment(cr, SUPERUSER_ID, {}) - attendees_emails = env["event.registration"].read_group( - [("email", "!=", False)], ["email"], groupby="email" + 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 ) - 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}) + 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 index 3c9ded258..dabb15918 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -33,6 +33,11 @@ msgstr "Asistido" 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" @@ -40,7 +45,6 @@ msgstr "Cancelar" #. module: partner_event #: model:ir.model,name:partner_event.model_res_partner -#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id msgid "Contact" msgstr "Contacto" @@ -51,6 +55,7 @@ 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" @@ -118,7 +123,6 @@ msgstr "Última actualización el" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.action_partner_register_event -#: model:ir.actions.act_window,name:partner_event.partner_register_event msgid "Register in an event" msgstr "Registrar en un evento" diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po index 8864aadd0..3f449da13 100644 --- a/partner_event/i18n/it.po +++ b/partner_event/i18n/it.po @@ -6,15 +6,15 @@ 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" +"PO-Revision-Date: 2023-07-24 12:09+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 4.14.1\n" +"X-Generator: Weblate 4.17\n" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count @@ -30,7 +30,7 @@ msgstr "Presente" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_event_registration__attendee_partner_id msgid "Attendee Partner" -msgstr "" +msgstr "Partner partecipante" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id @@ -54,13 +54,14 @@ 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 "" +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 "" +msgstr "Crea registrazioni" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__create_uid @@ -73,9 +74,6 @@ msgid "Created on" msgstr "Creato il" #. module: partner_event -#: model:ir.model.fields,field_description:partner_event.field_event_event__display_name -#: model:ir.model.fields,field_description:partner_event.field_event_registration__display_name -#: model:ir.model.fields,field_description:partner_event.field_res_partner__display_name #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name msgid "Display Name" msgstr "Nome visualizzato" @@ -103,17 +101,11 @@ msgid "Event registrations" msgstr "Registrazioni evento" #. module: partner_event -#: model:ir.model.fields,field_description:partner_event.field_event_event__id -#: model:ir.model.fields,field_description:partner_event.field_event_registration__id -#: model:ir.model.fields,field_description:partner_event.field_res_partner__id #: 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_event_event____last_update -#: model:ir.model.fields,field_description:partner_event.field_event_registration____last_update -#: model:ir.model.fields,field_description:partner_event.field_res_partner____last_update #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event____last_update msgid "Last Modified on" msgstr "Ultima modifica il" @@ -131,12 +123,12 @@ 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 "" +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 "" +msgstr "Registrare partner per l'evento" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.act_partner_registration @@ -146,11 +138,13 @@ 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 "" +msgstr "Selezionare evento da registrare" #. 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" +"These partners haven't been registered because they\\'re " +"already registered or other error occurred" msgstr "" +"Questi partner non sono stati registrati perché sono " +"già registrati o si sono presentati altri errori" diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index 1162f8103..27473ddd0 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -51,6 +51,7 @@ 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 "" @@ -70,9 +71,6 @@ msgid "Created on" msgstr "" #. module: partner_event -#: model:ir.model.fields,field_description:partner_event.field_event_event__display_name -#: model:ir.model.fields,field_description:partner_event.field_event_registration__display_name -#: model:ir.model.fields,field_description:partner_event.field_res_partner__display_name #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name msgid "Display Name" msgstr "" @@ -100,17 +98,11 @@ msgid "Event registrations" msgstr "" #. module: partner_event -#: model:ir.model.fields,field_description:partner_event.field_event_event__id -#: model:ir.model.fields,field_description:partner_event.field_event_registration__id -#: model:ir.model.fields,field_description:partner_event.field_res_partner__id #: 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_event_event____last_update -#: model:ir.model.fields,field_description:partner_event.field_event_registration____last_update -#: model:ir.model.fields,field_description:partner_event.field_res_partner____last_update #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event____last_update msgid "Last Modified on" msgstr "" diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po index 22b3eb7b2..eee1e7fdd 100644 --- a/partner_event/i18n/sl.po +++ b/partner_event/i18n/sl.po @@ -34,6 +34,11 @@ msgstr "" 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" @@ -41,7 +46,6 @@ msgstr "" #. module: partner_event #: model:ir.model,name:partner_event.model_res_partner -#: model:ir.model.fields,field_description:partner_event.field_event_registration__partner_id msgid "Contact" msgstr "" @@ -52,6 +56,7 @@ 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" @@ -123,7 +128,6 @@ msgstr "" #. module: partner_event #: model:ir.actions.act_window,name:partner_event.action_partner_register_event -#: model:ir.actions.act_window,name:partner_event.partner_register_event #, fuzzy msgid "Register in an event" msgstr "Registracijska številka" diff --git a/partner_event/i18n/sv.po b/partner_event/i18n/sv.po index 1092b1e7a..dff50ba97 100644 --- a/partner_event/i18n/sv.po +++ b/partner_event/i18n/sv.po @@ -54,6 +54,7 @@ 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" @@ -73,9 +74,6 @@ msgid "Created on" msgstr "Skapad den" #. module: partner_event -#: model:ir.model.fields,field_description:partner_event.field_event_event__display_name -#: model:ir.model.fields,field_description:partner_event.field_event_registration__display_name -#: model:ir.model.fields,field_description:partner_event.field_res_partner__display_name #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event__display_name msgid "Display Name" msgstr "Visningsnamn" @@ -103,17 +101,11 @@ msgid "Event registrations" msgstr "Evenemangsanmälningar" #. module: partner_event -#: model:ir.model.fields,field_description:partner_event.field_event_event__id -#: model:ir.model.fields,field_description:partner_event.field_event_registration__id -#: model:ir.model.fields,field_description:partner_event.field_res_partner__id #: 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_event_event____last_update -#: model:ir.model.fields,field_description:partner_event.field_event_registration____last_update -#: model:ir.model.fields,field_description:partner_event.field_res_partner____last_update #: model:ir.model.fields,field_description:partner_event.field_res_partner_register_event____last_update msgid "Last Modified on" msgstr "Senast ändrad den" @@ -151,8 +143,8 @@ 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" +"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/readme/CONTRIBUTORS.rst b/partner_event/readme/CONTRIBUTORS.rst index aba24d7b0..736ece26e 100644 --- a/partner_event/readme/CONTRIBUTORS.rst +++ b/partner_event/readme/CONTRIBUTORS.rst @@ -7,6 +7,7 @@ * David Vidal * Rafael Blasco * Víctor Martínez + * Stefan Ungureanu * `Antiun `__: diff --git a/partner_event/static/description/icon.png b/partner_event/static/description/icon.png index b30d2b238566d606cfc246d2839d5d10cef53ad0..32fb8193e3712648bd4734152ce8c3e02aa74a5a 100644 GIT binary patch literal 6905 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 MZ diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index 2ce6419ba..4ad43f5db 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -367,7 +367,7 @@

Link partner to events

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runbot

This module links partners with the events they are registered through a smart button.

It also includes:

@@ -408,7 +408,7 @@

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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -430,6 +430,7 @@

Contributors

  • David Vidal
  • Rafael Blasco
  • Víctor Martínez
  • +
  • Stefan Ungureanu
  • Antiun:
      @@ -446,7 +447,7 @@

      Maintainers

      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.

      +

      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/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index d4c81ca25..0eccd6f4d 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -13,7 +13,7 @@ from odoo.tests import common -class TestEventRegistration(common.SavepointCase): +class TestEventRegistration(common.TransactionCase): @classmethod def setUpClass(cls): super(TestEventRegistration, cls).setUpClass() @@ -75,7 +75,7 @@ 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() + wizard.with_context(active_ids=active_ids).button_register() def test_data_update(self): event_2 = self.event_0.copy() From 73bb734ed3b04b42534b6a9192b0264e02b6ebb1 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Wed, 30 Aug 2023 20:17:38 +0200 Subject: [PATCH 24/47] [IMP] partner_event: Do registration creation in batch + remove savepoint For speeding up the process. Specially the removal of the savepoints makes that Postgres don't go slow as hell. Check https://www.cybertec-postgresql.com/en/subtransactions-and-performance-in-postgresql/ for some rationale. The problem happens even releasing the previous savepoints. As this module is very old, the reason for doing it this way and skip registrations with error is not fully known, but the view mentions about registration duplication, so let's avoid it and handle later other possible exceptions. TT26694 --- partner_event/README.rst | 15 ++++--- partner_event/__manifest__.py | 2 +- partner_event/i18n/es.po | 22 +++++----- partner_event/i18n/it.po | 22 +++++----- partner_event/i18n/partner_event.pot | 12 ------ partner_event/i18n/sl.po | 12 ------ partner_event/i18n/sv.po | 23 +++++------ partner_event/models/event_registration.py | 11 ++--- partner_event/static/description/index.html | 38 +++++++++--------- .../wizard/res_partner_register_event.py | 40 +++++++------------ .../res_partner_register_event_view.xml | 15 ++----- 11 files changed, 83 insertions(+), 129 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index cef58987d..30b4c0508 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -2,10 +2,13 @@ Link partner to events ====================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:85ae15c824d10e65d3f4d26e2de9090b7b7b332760575096e8be6b30c15a25d4 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Link partner to events .. |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 +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/event&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module links partners with the events they are registered through a smart button. @@ -61,7 +64,7 @@ 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 +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. diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index ad6377189..f101d2981 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -9,7 +9,7 @@ { "name": "Link partner to events", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "category": "Marketing", "author": "Tecnativa," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/event", diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index dabb15918..c825f9b73 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -79,11 +79,6 @@ msgstr "Creado el" 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 @@ -141,14 +136,15 @@ msgstr "Registros" 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 "Errors" +#~ msgstr "Errores" + +#~ 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" diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po index 3f449da13..f76060334 100644 --- a/partner_event/i18n/it.po +++ b/partner_event/i18n/it.po @@ -78,11 +78,6 @@ msgstr "Creato il" 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 @@ -140,11 +135,12 @@ msgstr "Registrazioni" msgid "Select event to register" msgstr "Selezionare evento da registrare" -#. 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 "" -"Questi partner non sono stati registrati perché sono " -"già registrati o si sono presentati altri errori" +#~ msgid "Errors" +#~ msgstr "Errori" + +#~ msgid "" +#~ "These partners haven't been registered because they\\'re " +#~ "already registered or other error occurred" +#~ msgstr "" +#~ "Questi partner non sono stati registrati perché sono " +#~ "già registrati o si sono presentati altri errori" diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index 27473ddd0..587dfd9cf 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -75,11 +75,6 @@ msgstr "" 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 @@ -136,10 +131,3 @@ msgstr "" #: 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 index eee1e7fdd..0203c6cd2 100644 --- a/partner_event/i18n/sl.po +++ b/partner_event/i18n/sl.po @@ -82,11 +82,6 @@ msgstr "" 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 @@ -147,12 +142,5 @@ msgstr "Prijave" 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 index dff50ba97..17358002f 100644 --- a/partner_event/i18n/sv.po +++ b/partner_event/i18n/sv.po @@ -78,11 +78,6 @@ msgstr "Skapad den" 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 @@ -140,11 +135,13 @@ msgstr "Anmälningar" 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" +#~ msgid "Errors" +#~ msgstr "Fel" + +#~ 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/event_registration.py b/partner_event/models/event_registration.py index c830e2997..2ad1c0c62 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -1,8 +1,8 @@ -# 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 +# Copyright 2015 Tecnativa - Javier Iniesta +# Copyright 2016 Tecnativa - Antonio Espinosa +# Copyright 2016 Tecnativa - Vicent Cubells +# 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 api, fields, models @@ -17,6 +17,7 @@ class EventRegistration(models.Model): string="Attendee Partner", ondelete="restrict", copy=False, + index=True, ) def _prepare_partner(self, vals): diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index 4ad43f5db..b152559e7 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -1,20 +1,20 @@ - + - + Link partner to events - diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index fc024f567..94828030e 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -21,6 +21,7 @@ name="%(partner_event.act_partner_registration)d" type="action" class="oe_stat_button oe_inline" + groups="event.group_event_user" help="Count of events with confirmed registrations." icon="fa-id-card" > From 5fdd3565de89768b58d2263cd74aedd7553c3a95 Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 25 Jun 2025 06:46:01 +0000 Subject: [PATCH 39/47] Translated using Weblate (Italian) Currently translated at 100.0% (24 of 24 strings) Translation: event-17.0/event-17.0-partner_event Translate-URL: https://translation.odoo-community.org/projects/event-17-0/event-17-0-partner_event/it/ --- partner_event/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po index 3a724a677..ade07b3e2 100644 --- a/partner_event/i18n/it.po +++ b/partner_event/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-01-15 11:38+0000\n" +"PO-Revision-Date: 2025-06-25 09:25+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,7 +14,7 @@ msgstr "" "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" +"X-Generator: Weblate 5.10.4\n" #. module: partner_event #: model:ir.model.fields,field_description:partner_event.field_res_partner__registration_count @@ -112,7 +112,7 @@ msgstr "Ultimo aggiornamento il" #. module: partner_event #: model_terms:ir.ui.view,arch_db:partner_event.view_res_partner_filter msgid "Linked events" -msgstr "" +msgstr "Eventi collegati" #. module: partner_event #: model:ir.model,name:partner_event.model_base_partner_merge_automatic_wizard From 9491a6b42a4ab5d227cb52b0b29c073612627aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 19 Aug 2025 09:30:03 +0200 Subject: [PATCH 40/47] [IMP] partner_event: pre-commit auto fixes --- partner_event/tests/test_event_registration.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 6112a75dc..2cba64ddd 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -122,8 +122,10 @@ def test_data_update(self): def test_delete_registered_partner(self): # We can't delete a partner with registrations - with self.assertRaises(IntegrityError), self.cr.savepoint(), mute_logger( - "odoo.sql_db" + with ( + self.assertRaises(IntegrityError), + self.cr.savepoint(), + mute_logger("odoo.sql_db"), ): self.partner_01.unlink() # Create a brand new partner and delete it From 758607ab2b4868e5145a46a5b965ccd817eb9f91 Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Fri, 23 May 2025 10:25:48 +0530 Subject: [PATCH 41/47] [MIG] partner_event: Migration to 18.0 TT57319 Co-authored-by: Bhavesh Heliconia --- partner_event/README.rst | 69 +++++++++---------- partner_event/__manifest__.py | 2 +- partner_event/hooks.py | 3 +- partner_event/i18n/es.po | 28 -------- partner_event/i18n/it.po | 6 -- partner_event/i18n/sl.po | 3 - partner_event/i18n/sv.po | 14 ---- partner_event/models/event_registration.py | 1 + partner_event/readme/CONTRIBUTORS.md | 2 + partner_event/static/description/index.html | 36 +++++----- .../tests/test_event_registration.py | 54 +++++++++------ partner_event/views/res_partner_view.xml | 2 +- 12 files changed, 91 insertions(+), 129 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index 2af894077..fc65eceff 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -1,7 +1,3 @@ -.. 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 ====================== @@ -11,23 +7,23 @@ Link partner to events !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:e2dc0d4dc45564150bcf1fcd34974df6a51a82de69ceb6a58e7a72f1477e35b8 + !! source digest: sha256:6be5d9ae845bdda4af3d8a73313c28535066b72429f4a3d3ac666aed3c9e0b16 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |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/17.0/partner_event + :target: https://github.com/OCA/event/tree/18.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-17-0/event-17-0-partner_event + :target: https://translation.odoo-community.org/projects/event-18-0/event-18-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=17.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/event&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -37,16 +33,16 @@ 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 +- 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** @@ -74,7 +70,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -89,24 +85,27 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: + + - Pedro M. Baeza + - Antonio Espinosa + - Jairo Llopis + - Vicent Cubells + - David Vidal + - Rafael Blasco + - Víctor Martínez + - Stefan Ungureanu + - Carolina Fernandez + - Pilar Vargas - - Pedro M. Baeza - - Antonio Espinosa - - Jairo Llopis - - Vicent Cubells - - David Vidal - - Rafael Blasco - - Víctor Martínez - - Stefan Ungureanu - - Carolina Fernandez - - Pilar Vargas +- `Antiun `__: -- `Antiun `__: + - Javier Iniesta - - Javier Iniesta +- Anil Kesariya +- `Heliconia Solutions Pvt. Ltd. `__ -- Anil Kesariya + - Bhavesh Heliconia Maintainers ----------- @@ -121,6 +120,6 @@ 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. +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/__manifest__.py b/partner_event/__manifest__.py index 9d0c6ddb9..3dc90991c 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -11,7 +11,7 @@ { "name": "Link partner to events", - "version": "17.0.1.1.0", + "version": "18.0.1.0.0", "category": "Marketing", "author": "Tecnativa," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/event", diff --git a/partner_event/hooks.py b/partner_event/hooks.py index 0dcf91c08..c01b27a5c 100644 --- a/partner_event/hooks.py +++ b/partner_event/hooks.py @@ -9,8 +9,9 @@ def post_init_hook(env): [("email", "!=", False)], ["email"], 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 + [("email", "=ilike", email["email"])], limit=1, order="id" ) if attendee_partner: attendees = env["event.registration"].search(email["__domain"]) diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index 9eb6c6513..804d1318e 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -139,31 +139,3 @@ msgstr "Registros" #: 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" - -#~ msgid "Last Modified on" -#~ msgstr "Última modificación el" - -#~ msgid "Errors" -#~ msgstr "Errores" - -#~ 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 index ade07b3e2..c8432d8e2 100644 --- a/partner_event/i18n/it.po +++ b/partner_event/i18n/it.po @@ -138,9 +138,3 @@ msgstr "Registrazioni" #: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view msgid "Select event to register" msgstr "Selezionare evento da registrare" - -#~ msgid "Last Modified on" -#~ msgstr "Ultima modifica il" - -#~ msgid "Errors" -#~ msgstr "Errori" diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po index 3e6d7f316..5a525a620 100644 --- a/partner_event/i18n/sl.po +++ b/partner_event/i18n/sl.po @@ -145,6 +145,3 @@ msgstr "Prijave" #: model_terms:ir.ui.view,arch_db:partner_event.res_partner_register_event_view msgid "Select event to register" msgstr "" - -#~ msgid "Attended registration number" -#~ msgstr "Pričakovano število prijav" diff --git a/partner_event/i18n/sv.po b/partner_event/i18n/sv.po index a76283872..6838b92f9 100644 --- a/partner_event/i18n/sv.po +++ b/partner_event/i18n/sv.po @@ -138,17 +138,3 @@ msgstr "Anmälningar" #: 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" - -#~ msgid "Last Modified on" -#~ msgstr "Senast ändrad den" - -#~ msgid "Errors" -#~ msgstr "Fel" - -#~ 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/event_registration.py b/partner_event/models/event_registration.py index fd5d47451..ef4fc855b 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -40,6 +40,7 @@ def _update_attendee_partner_id(self, vals): 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" ) diff --git a/partner_event/readme/CONTRIBUTORS.md b/partner_event/readme/CONTRIBUTORS.md index e06decff5..2f363146c 100644 --- a/partner_event/readme/CONTRIBUTORS.md +++ b/partner_event/readme/CONTRIBUTORS.md @@ -12,3 +12,5 @@ - [Antiun](https://antiun.com/): - Javier Iniesta - Anil Kesariya +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index 48393d35a..73b8fcf84 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Link partner to events -
    + -
    diff --git a/partner_event/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 2cba64ddd..62a6322ce 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -3,6 +3,7 @@ # 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 @@ -10,11 +11,13 @@ from psycopg2 import IntegrityError from odoo import fields -from odoo.tests import common +from odoo.tests import Form from odoo.tools import mute_logger +from odoo.addons.base.tests.common import BaseCommon -class TestEventRegistration(common.TransactionCase): + +class TestEventRegistration(BaseCommon): @classmethod def setUpClass(cls): super().setUpClass() @@ -120,13 +123,10 @@ def test_data_update(self): 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.cr.savepoint(), - mute_logger("odoo.sql_db"), - ): + 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"}) @@ -134,26 +134,38 @@ def test_delete_registered_partner(self): self.assertFalse(partner3.exists()) def test_partner_only_mobile(self): - reg = self.env["event.registration"].create( - { - "attendee_partner_id": self.partner_with_mobile.id, - "event_id": self.event_0.id, - } - ) - reg._onchange_partner_id() + reg_form = Form(self.env["event.registration"]) + reg_form.event_id = self.event_0 + reg_form.attendee_partner_id = self.partner_with_mobile + reg = reg_form.save() + self.assertEqual(reg.partner_id, self.partner_with_mobile) self.assertEqual(reg.phone, self.partner_with_mobile.mobile) def test_partner_mobile_and_phone(self): - reg = self.env["event.registration"].create( - { - "attendee_partner_id": self.partner_with_phone_and_mobile.id, - "event_id": self.event_0.id, - } - ) - reg._onchange_partner_id() + reg_form = Form(self.env["event.registration"]) + reg_form.event_id = self.event_0 + reg_form.attendee_partner_id = self.partner_with_phone_and_mobile + reg = reg_form.save() self.assertEqual(reg.phone, self.partner_with_phone_and_mobile.phone) self.assertNotEqual( reg.phone, self.partner_with_phone_and_mobile.mobile, "Incorrect test. Partners phone and mobile must differ", ) + + @mute_logger("odoo.models.unlink") + def test_action_merge(self): + partner_1 = self.partner_with_mobile + partner_2 = self.partner_with_phone_and_mobile + self.registration_01.partner_id = partner_1 + self.registration_02.partner_id = partner_2 + partners = partner_1 + partner_2 + wizard = ( + self.env["base.partner.merge.automatic.wizard"] + .with_context(active_ids=partners.ids, active_model=partners._name) + .create({}) + ) + self.assertEqual(wizard.dst_partner_id, partner_2) + wizard.action_merge() + self.assertEqual(self.registration_01.partner_id, partner_2) + self.assertEqual(self.registration_02.partner_id, partner_2) diff --git a/partner_event/views/res_partner_view.xml b/partner_event/views/res_partner_view.xml index 94828030e..dd0258d27 100644 --- a/partner_event/views/res_partner_view.xml +++ b/partner_event/views/res_partner_view.xml @@ -5,7 +5,7 @@ event.registration Registrations - tree,form,calendar,graph + list,form,calendar,graph [("attendee_partner_id", "child_of", active_ids)] Date: Wed, 20 Aug 2025 08:45:31 +0000 Subject: [PATCH 42/47] [UPD] Update partner_event.pot --- partner_event/i18n/partner_event.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index 5eea5f66f..09a8ab6cb 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 17.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" From 4e65f52f40ce16cb330c2a07102aa7db0bca95d7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 20 Aug 2025 08:47:23 +0000 Subject: [PATCH 43/47] [BOT] post-merge updates --- partner_event/README.rst | 60 +++++++++++---------- partner_event/static/description/index.html | 28 ++++++---- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index fc65eceff..19c7cd8e7 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -1,3 +1,7 @@ +.. 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 ====================== @@ -7,13 +11,13 @@ Link partner to events !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:6be5d9ae845bdda4af3d8a73313c28535066b72429f4a3d3ac666aed3c9e0b16 + !! 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/licence-AGPL--3-blue.png +.. |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 @@ -33,16 +37,16 @@ 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 +- 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** @@ -85,27 +89,27 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Pedro M. Baeza - - Antonio Espinosa - - Jairo Llopis - - Vicent Cubells - - David Vidal - - Rafael Blasco - - Víctor Martínez - - Stefan Ungureanu - - Carolina Fernandez - - Pilar Vargas + - Pedro M. Baeza + - Antonio Espinosa + - Jairo Llopis + - Vicent Cubells + - David Vidal + - Rafael Blasco + - Víctor Martínez + - Stefan Ungureanu + - Carolina Fernandez + - Pilar Vargas -- `Antiun `__: +- `Antiun `__: - - Javier Iniesta + - Javier Iniesta -- Anil Kesariya -- `Heliconia Solutions Pvt. Ltd. `__ +- Anil Kesariya +- `Heliconia Solutions Pvt. Ltd. `__ - - Bhavesh Heliconia + - Bhavesh Heliconia Maintainers ----------- diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index 73b8fcf84..8a354859f 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -3,7 +3,7 @@ -Link partner to events +README.rst - From b0955e63b2737b39710cd729330509262e26ac3a Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 28 Aug 2025 09:30:15 +0000 Subject: [PATCH 44/47] [UPD] Update partner_event.pot --- partner_event/i18n/partner_event.pot | 1 + 1 file changed, 1 insertion(+) diff --git a/partner_event/i18n/partner_event.pot b/partner_event/i18n/partner_event.pot index 09a8ab6cb..9cf44a469 100644 --- a/partner_event/i18n/partner_event.pot +++ b/partner_event/i18n/partner_event.pot @@ -51,6 +51,7 @@ 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 "" From 9f0bf1f7b3f53da7df7c0d09f7dc2c6d1eb1c398 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 28 Aug 2025 09:32:58 +0000 Subject: [PATCH 45/47] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: event-18.0/event-18.0-partner_event Translate-URL: https://translation.odoo-community.org/projects/event-18-0/event-18-0-partner_event/ --- partner_event/i18n/es.po | 1 + partner_event/i18n/it.po | 1 + partner_event/i18n/sl.po | 1 + partner_event/i18n/sv.po | 1 + 4 files changed, 4 insertions(+) diff --git a/partner_event/i18n/es.po b/partner_event/i18n/es.po index 804d1318e..bea4d3ce9 100644 --- a/partner_event/i18n/es.po +++ b/partner_event/i18n/es.po @@ -55,6 +55,7 @@ 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" diff --git a/partner_event/i18n/it.po b/partner_event/i18n/it.po index c8432d8e2..9614efa9d 100644 --- a/partner_event/i18n/it.po +++ b/partner_event/i18n/it.po @@ -54,6 +54,7 @@ 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" diff --git a/partner_event/i18n/sl.po b/partner_event/i18n/sl.po index 5a525a620..ceb02c9ad 100644 --- a/partner_event/i18n/sl.po +++ b/partner_event/i18n/sl.po @@ -56,6 +56,7 @@ 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" diff --git a/partner_event/i18n/sv.po b/partner_event/i18n/sv.po index 6838b92f9..27561bc48 100644 --- a/partner_event/i18n/sv.po +++ b/partner_event/i18n/sv.po @@ -54,6 +54,7 @@ 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" From f1ab8c803002b28a8315f154f7097c96eae3efcc Mon Sep 17 00:00:00 2001 From: ngabsi Date: Mon, 6 Oct 2025 14:02:54 +0100 Subject: [PATCH 46/47] [IMP] partner_event: pre-commit auto fixes --- partner_event/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner_event/__manifest__.py b/partner_event/__manifest__.py index 3dc90991c..bcfd96903 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -13,7 +13,7 @@ "name": "Link partner to events", "version": "18.0.1.0.0", "category": "Marketing", - "author": "Tecnativa," "Odoo Community Association (OCA)", + "author": "Tecnativa,Odoo Community Association (OCA)", "website": "https://github.com/OCA/event", "development_status": "Production/Stable", "license": "AGPL-3", From 92f6f82c27df0a0dbb40efd3862fe0f5f58acd4e Mon Sep 17 00:00:00 2001 From: ngabsi Date: Tue, 7 Oct 2025 13:57:11 +0100 Subject: [PATCH 47/47] [MIG] partner_event: Migration to 19.0 --- partner_event/README.rst | 10 ++-- partner_event/__manifest__.py | 2 +- partner_event/hooks.py | 6 +- partner_event/models/event_registration.py | 10 +--- partner_event/static/description/index.html | 6 +- .../tests/test_event_registration.py | 58 ------------------- 6 files changed, 13 insertions(+), 79 deletions(-) diff --git a/partner_event/README.rst b/partner_event/README.rst index 19c7cd8e7..7eb86677d 100644 --- a/partner_event/README.rst +++ b/partner_event/README.rst @@ -21,13 +21,13 @@ Link partner to events :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/18.0/partner_event + :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-18-0/event-18-0-partner_event + :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=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/event&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -74,7 +74,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -124,6 +124,6 @@ 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. +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/__manifest__.py b/partner_event/__manifest__.py index bcfd96903..e27658fb9 100644 --- a/partner_event/__manifest__.py +++ b/partner_event/__manifest__.py @@ -11,7 +11,7 @@ { "name": "Link partner to events", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "category": "Marketing", "author": "Tecnativa,Odoo Community Association (OCA)", "website": "https://github.com/OCA/event", diff --git a/partner_event/hooks.py b/partner_event/hooks.py index c01b27a5c..8d5d5f4ae 100644 --- a/partner_event/hooks.py +++ b/partner_event/hooks.py @@ -5,8 +5,8 @@ def post_init_hook(env): """Preload proper attendee partner for existing registrations using the same rules the module does""" - attendees_emails = env["event.registration"].read_group( - [("email", "!=", False)], ["email"], groupby="email" + 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 @@ -14,5 +14,5 @@ def post_init_hook(env): [("email", "=ilike", email["email"])], limit=1, order="id" ) if attendee_partner: - attendees = env["event.registration"].search(email["__domain"]) + attendees = env["event.registration"].search(email["__extra_domain"]) attendees.write({"attendee_partner_id": attendee_partner.id}) diff --git a/partner_event/models/event_registration.py b/partner_event/models/event_registration.py index ef4fc855b..1dfb3e0fa 100644 --- a/partner_event/models/event_registration.py +++ b/partner_event/models/event_registration.py @@ -71,7 +71,7 @@ def partner_data_update(self, data): 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() + lambda x: x.event_id.date_end >= fields.Datetime.now() ) registrations.write(reg_data) @@ -89,13 +89,5 @@ def _onchange_partner_id(self): vals = registration._synchronize_partner_values( registration.partner_id ) - # On Odoo 19.0 "mobile" field is removed - # https://github.com/odoo/odoo/pull/189739 - # so this should not be ported to 19.0+ - if "mobile" not in registration._fields and "mobile" in vals: - mobile = vals.pop("mobile") - phone = vals.get("phone") or mobile - if phone: - vals["phone"] = phone registration.update(vals) return {} diff --git a/partner_event/static/description/index.html b/partner_event/static/description/index.html index 8a354859f..4cb826bbe 100644 --- a/partner_event/static/description/index.html +++ b/partner_event/static/description/index.html @@ -374,7 +374,7 @@

    Link partner to events

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:23c386ee6a1368b2996b3a08ee30b9f0bd78971c8b980dfa889c4635a2db9b86 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/event Translate me on Weblate Try me on Runboat

    This module links partners with the events they are registered through a smart button.

    It also includes:

    @@ -420,7 +420,7 @@

    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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -467,7 +467,7 @@

    Maintainers

    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.

    +

    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/tests/test_event_registration.py b/partner_event/tests/test_event_registration.py index 62a6322ce..59ce3e037 100644 --- a/partner_event/tests/test_event_registration.py +++ b/partner_event/tests/test_event_registration.py @@ -11,7 +11,6 @@ from psycopg2 import IntegrityError from odoo import fields -from odoo.tests import Form from odoo.tools import mute_logger from odoo.addons.base.tests.common import BaseCommon @@ -54,26 +53,6 @@ def setUpClass(cls): } ) - # On Odoo 19.0 "mobile" field is removed - # https://github.com/odoo/odoo/pull/189739 - # so these example and related tests - # should not be ported to 19.0+ - cls.partner_with_mobile = partner_model.create( - { - "name": "Test Partner with mobile", - "email": "email_with_mobile@test.com", - "mobile": "+1254728912", - } - ) - cls.partner_with_phone_and_mobile = partner_model.create( - { - "name": "Test Partner with mobile and phone", - "email": "email_with_mobile_and_phone@test.com", - "phone": "254728913", - "mobile": "+1254728913", - } - ) - def test_create(self): self.assertEqual(self.partner_01.name, self.registration_01.name) self.assertEqual(self.partner_01.email, self.registration_01.email) @@ -132,40 +111,3 @@ def test_delete_registered_partner(self): partner3 = self.env["res.partner"].create({"name": "unregistered partner"}) partner3.unlink() self.assertFalse(partner3.exists()) - - def test_partner_only_mobile(self): - reg_form = Form(self.env["event.registration"]) - reg_form.event_id = self.event_0 - reg_form.attendee_partner_id = self.partner_with_mobile - reg = reg_form.save() - self.assertEqual(reg.partner_id, self.partner_with_mobile) - self.assertEqual(reg.phone, self.partner_with_mobile.mobile) - - def test_partner_mobile_and_phone(self): - reg_form = Form(self.env["event.registration"]) - reg_form.event_id = self.event_0 - reg_form.attendee_partner_id = self.partner_with_phone_and_mobile - reg = reg_form.save() - self.assertEqual(reg.phone, self.partner_with_phone_and_mobile.phone) - self.assertNotEqual( - reg.phone, - self.partner_with_phone_and_mobile.mobile, - "Incorrect test. Partners phone and mobile must differ", - ) - - @mute_logger("odoo.models.unlink") - def test_action_merge(self): - partner_1 = self.partner_with_mobile - partner_2 = self.partner_with_phone_and_mobile - self.registration_01.partner_id = partner_1 - self.registration_02.partner_id = partner_2 - partners = partner_1 + partner_2 - wizard = ( - self.env["base.partner.merge.automatic.wizard"] - .with_context(active_ids=partners.ids, active_model=partners._name) - .create({}) - ) - self.assertEqual(wizard.dst_partner_id, partner_2) - wizard.action_merge() - self.assertEqual(self.registration_01.partner_id, partner_2) - self.assertEqual(self.registration_02.partner_id, partner_2)