From 433304ae15f1404fc8c840580db20d624cec64a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 23 Nov 2020 08:49:14 +0000 Subject: [PATCH] [REF] website_event_exhibitor: improve upgrade of sponsors to (online) exhibitors and back2basics them PURPOSE Improve sponsor management, especially when dealing with publication at sponsor level, exhibitor level, or exhibitor using chat (jitsi). SPECIFICATIONS Introduce a new category field containing sponsor, exhibitor or online exhibitor. Meaning is * sponsor: display as a sponsor (sponsor cards at the bottom of events). No publish management is done at sponsor level: a sponsor is always displayed in the sponsor widget; * exhibitor: display as a sponsor in sponsor cards. An exhibitor is also displayed in /exhibitors page and allow publish management. Also allow to edit description as it is used in front-end page view of exhibitor; * online exhibitor: same as exhibitor and allow to configure jitsi (online) capabilities. It also activates display of jitsi in frontend; An exhibitor would be a sponsor that has a physical stand but no online support. Online exhibitors hold a jitsi room to chat with online visitors. Also add field in kanban view. In frontend rename "Connect" to "More info" when exhibitor has no online capabilities. That way we don't connect with an exhibitor that has only a published description. SPECIFIATIONS: B2B Clearly separate sponsorship levels (gold, silver) from exhibitor type (sponsor, exhibitor, online). Propagate this new naming through views and menus as well as frontend filters. Reword sponsor form view, notably to have a clean 2 column display. Left column holds customer related information. Right column holds event and sponsorship information. LINKS Task ID-2326433 COM PR odoo/odoo#61781 ENT pr odoo/enterprise#14752 UPG PR odoo/upgrade#1931 --- .../website_event_exhibitor/__manifest__.py | 2 +- .../controllers/exhibitor.py | 2 +- .../data/event_sponsor_demo.xml | 20 +++--- .../models/event_sponsor.py | 17 ++--- .../models/event_sponsor_type.py | 4 +- .../security/security.xml | 4 +- .../views/event_exhibitor_templates_list.xml | 7 ++- .../views/event_exhibitor_templates_page.xml | 2 +- .../views/event_menus.xml | 2 +- .../views/event_sponsor_views.xml | 63 ++++++++++--------- 10 files changed, 65 insertions(+), 58 deletions(-) diff --git a/addons/website_event_exhibitor/__manifest__.py b/addons/website_event_exhibitor/__manifest__.py index 4703efb3e12..200a1465620 100644 --- a/addons/website_event_exhibitor/__manifest__.py +++ b/addons/website_event_exhibitor/__manifest__.py @@ -6,7 +6,7 @@ 'name': 'Event Exhibitors', 'category': 'Marketing/Events', 'sequence': 1004, - 'version': '1.0', + 'version': '1.1', 'summary': 'Event: manage sponsors and exhibitors', 'website': 'https://www.odoo.com/page/events', 'description': "", diff --git a/addons/website_event_exhibitor/controllers/exhibitor.py b/addons/website_event_exhibitor/controllers/exhibitor.py index a5bada9e1a0..13d6084e82e 100644 --- a/addons/website_event_exhibitor/controllers/exhibitor.py +++ b/addons/website_event_exhibitor/controllers/exhibitor.py @@ -17,7 +17,7 @@ class ExhibitorController(WebsiteEventController): def _get_event_sponsors_base_domain(self, event): search_domain_base = [ ('event_id', '=', event.id), - ('is_exhibitor', '=', True), + ('exhibitor_type', 'in', ['exhibitor', 'online']), ] if not request.env.user.has_group('event.group_event_user'): search_domain_base = expression.AND([search_domain_base, [('is_published', '=', True)]]) diff --git a/addons/website_event_exhibitor/data/event_sponsor_demo.xml b/addons/website_event_exhibitor/data/event_sponsor_demo.xml index 9389c100460..6bb840446eb 100644 --- a/addons/website_event_exhibitor/data/event_sponsor_demo.xml +++ b/addons/website_event_exhibitor/data/event_sponsor_demo.xml @@ -31,7 +31,7 @@ http://www.wood-corner.example.com Catchy sentence ! - + sponsor @@ -40,7 +40,7 @@ http://www.deco-addict.example.com You won't believe this sponsor - + sponsor @@ -49,7 +49,7 @@ http://www.gemini-furniture.example.com Honestly we are good - + exhibitor gemini-furniture 12 @@ -60,7 +60,7 @@ http://www.ready-mat.example.com Catchy sentence ! - + exhibitor ready-mat 12 @@ -71,7 +71,7 @@ http://www.the-jackson-group.example.com You won't believe this sponsor - + online the-jackson-group 12 @@ -82,7 +82,7 @@ http://www.azure-interior.example.com Honestly we are good - + online azure-interior 12 @@ -92,7 +92,7 @@ You won't believe this sponsor - + online bloem-flower 12 @@ -102,7 +102,7 @@ Honestly we are good - + online open-wood 12 @@ -112,7 +112,7 @@ You won't believe this sponsor - + online tree-dealers 12 @@ -122,7 +122,7 @@ Honestly we are good - + online pterocarpus 12 diff --git a/addons/website_event_exhibitor/models/event_sponsor.py b/addons/website_event_exhibitor/models/event_sponsor.py index b2718c8acbf..bb0eec63225 100644 --- a/addons/website_event_exhibitor/models/event_sponsor.py +++ b/addons/website_event_exhibitor/models/event_sponsor.py @@ -26,19 +26,21 @@ class Sponsor(models.Model): ] event_id = fields.Many2one('event.event', 'Event', required=True) - sponsor_type_id = fields.Many2one('event.sponsor.type', 'Sponsoring Type', required=True) + sponsor_type_id = fields.Many2one('event.sponsor.type', 'Sponsoring Level', required=True) url = fields.Char('Sponsor Website', compute='_compute_url', readonly=False, store=True) sequence = fields.Integer('Sequence') active = fields.Boolean(default=True) # description subtitle = fields.Char('Slogan', help='Catchy marketing sentence for promote') - is_exhibitor = fields.Boolean("Exhibitor's Chat") + exhibitor_type = fields.Selection( + [('sponsor', 'Sponsor'), ('exhibitor', 'Exhibitor'), ('online', 'Online Exhibitor')], + string="Sponsor Type", default="sponsor") website_description = fields.Html( 'Description', compute='_compute_website_description', sanitize_attributes=False, sanitize_form=True, translate=html_translate, readonly=False, store=True) # contact information - partner_id = fields.Many2one('res.partner', 'Sponsor/Customer', required=True) + partner_id = fields.Many2one('res.partner', 'Partner', required=True) partner_name = fields.Char('Name', related='partner_id.name') partner_email = fields.Char('Email', related='partner_id.email') partner_phone = fields.Char('Phone', related='partner_id.phone') @@ -116,20 +118,19 @@ class Sponsor(models.Model): if not sponsor[fname]: sponsor[fname] = sponsor.partner_id[fname] - - @api.onchange('is_exhibitor') - def _onchange_is_exhibitor(self): + @api.onchange('exhibitor_type') + def _onchange_exhibitor_type(self): """ Keep an explicit onchange to allow configuration of room names, even if this field is normally a related on chat_room_id.name. It is not a real computed field, an onchange used in form view is sufficient. """ for sponsor in self: - if sponsor.is_exhibitor and not sponsor.room_name: + if sponsor.exhibitor_type == 'online' and not sponsor.room_name: if sponsor.name: room_name = "odoo-exhibitor-%s" % sponsor.name else: room_name = self.env['chat.room']._default_name(objname='exhibitor') sponsor.room_name = self._jitsi_sanitize_name(room_name) - if sponsor.is_exhibitor and not sponsor.room_max_capacity: + if sponsor.exhibitor_type == 'online' and not sponsor.room_max_capacity: sponsor.room_max_capacity = '8' @api.depends('partner_id') diff --git a/addons/website_event_exhibitor/models/event_sponsor_type.py b/addons/website_event_exhibitor/models/event_sponsor_type.py index 8eb3eb71fbd..316b81b79ae 100644 --- a/addons/website_event_exhibitor/models/event_sponsor_type.py +++ b/addons/website_event_exhibitor/models/event_sponsor_type.py @@ -6,10 +6,10 @@ from odoo import fields, models class SponsorType(models.Model): _name = "event.sponsor.type" - _description = 'Event Sponsor Type' + _description = 'Event Sponsor Level' _order = "sequence" - name = fields.Char('Sponsor Type', required=True, translate=True) + name = fields.Char('Sponsor Level', required=True, translate=True) sequence = fields.Integer('Sequence') display_ribbon_style = fields.Selection([ ('no_ribbon', 'No Ribbon'), diff --git a/addons/website_event_exhibitor/security/security.xml b/addons/website_event_exhibitor/security/security.xml index 415d829f8fb..88573f9298c 100644 --- a/addons/website_event_exhibitor/security/security.xml +++ b/addons/website_event_exhibitor/security/security.xml @@ -2,9 +2,9 @@ - Event Sponsor: public/portal published only + Event Sponsor: public/portal sponsor or published only - [('website_published', '=', True)] + ['|', ('exhibitor_type', '=', 'sponsor'), ('website_published', '=', True)] diff --git a/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml b/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml index 4d489d43354..e67053af25b 100644 --- a/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml +++ b/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml @@ -89,12 +89,12 @@