From ae8ac2ebb31f4fcedabda482e29250487bac7835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 24 Jun 2020 12:07:13 +0000 Subject: [PATCH] [IMP] website_event(_track)_online: improve registration flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RATIONALE Events are sometimes held online, gathering a community. In this merge we improve Event application to better support full-online events with improved tracks, wishlists, chat rooms, . PURPOSE Improve the overall registration flow. In addition to already improved features (email, standard pages), some improvements are done here specifically for Online feature. SPECIFICATIONS: REGISTER MENU Add a register button to the right that can be removed through an option on the event itself. Currently register menu is lost within other event menus. In this commit we add a CTA to the right lf event naviguation in order to show it to customers. If current user has registered this button is not displayed. This is done in addition to already existing register menu. This one can be tweaked through frontend menu edition. CTA has another purpose, bringing people to register through a visible CTA. SPECIFICATIONS: REGISTRATION CONFIMATION At the end of registration process, add a link to the talks. It allows to send people directly to the talk page in order to complete their wishlist. SPECIFICATIONS: IS PARTICIPATING Make "is participating" field functionally working for public users. It is now computed based on visitor. If a visitor is available check its registrations in order to determine if current user has registered to the event. Remove support of 'email' based computation of "is participating" as this is quite unsafe: partner and visitor should give results interesting enough.h. LINKS Community PR #53540 Enterprise PR odoo/enterprise#11384 Task ID-2252655 (Main Online Event task) Task ID-2283796 (Event B2Basics / Registration Flow) Co-Authored-By: Aurélien Warnon Co-Authored-By: David Beguin Co-Authored-By: Thibault Delavallée --- addons/website_event_online/__manifest__.py | 2 + .../website_event_online/data/event_demo.xml | 9 ++++ .../models/event_event.py | 53 ++++++++++++++++++- .../views/event_event_views.xml | 2 + .../views/event_templates_event.xml | 15 ++++++ .../__manifest__.py | 3 +- .../views/event_templates_registration.xml | 18 +++++++ 7 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 addons/website_event_online/data/event_demo.xml create mode 100644 addons/website_event_online/views/event_templates_event.xml create mode 100644 addons/website_event_track_online/views/event_templates_registration.xml diff --git a/addons/website_event_online/__manifest__.py b/addons/website_event_online/__manifest__.py index 46ad6a7d2b2..e5f8ce7c482 100644 --- a/addons/website_event_online/__manifest__.py +++ b/addons/website_event_online/__manifest__.py @@ -18,9 +18,11 @@ 'views/event_event_views.xml', 'views/event_registration_views.xml', 'views/website_visitor_views.xml', + 'views/event_templates_event.xml', ], 'demo': [ 'data/website_visitor_demo.xml', + 'data/event_demo.xml', 'data/event_registration_demo.xml', ], 'application': False, diff --git a/addons/website_event_online/data/event_demo.xml b/addons/website_event_online/data/event_demo.xml new file mode 100644 index 00000000000..ff2bde98b40 --- /dev/null +++ b/addons/website_event_online/data/event_demo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/addons/website_event_online/models/event_event.py b/addons/website_event_online/models/event_event.py index 9c7d1680f77..1419d63f786 100644 --- a/addons/website_event_online/models/event_event.py +++ b/addons/website_event_online/models/event_event.py @@ -1,14 +1,65 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models, _ +from odoo import api, fields, models, _ from odoo.addons.http_routing.models.ir_http import slug +from odoo.osv import expression class Event(models.Model): _name = 'event.event' _inherit = 'event.event' + # frontend options + menu_register_cta = fields.Boolean( + 'Add Register Button', compute='_compute_menu_register_cta', + readonly=False, store=True) + + @api.depends('website_menu') + def _compute_menu_register_cta(self): + for event in self: + event.menu_register_cta = event.website_menu + + def _compute_is_participating(self): + """ Override is_participating to improve heuristic that is now + + * public, no visitor: not participating as we have no information; + * public and visitor: check visitor is linked to a registration. As + visitors are merged on the top parent, current visitor check is + sufficient even for successive visits; + * logged, no visitor: check partner is linked to a registration. Do + not check the email as it is not really secure; + * logged as visitor: check partner or visitor are linked to a + registration; + """ + current_visitor = self.env['website.visitor']._get_visitor_from_request(force_create=False) + if self.env.user._is_public() and not current_visitor: + events = self.env['event.event'] + elif self.env.user._is_public(): + events = self.env['event.registration'].sudo().search([ + ('event_id', 'in', self.ids), + ('visitor_id', '=', current_visitor.id), + ]).event_id + else: + if current_visitor: + domain = [ + '|', + ('partner_id', '=', self.env.user.partner_id.id), + ('visitor_id', '=', current_visitor.id) + ] + else: + domain = [('partner_id', '=', self.env.user.partner_id.id)] + events = self.env['event.registration'].sudo().search( + expression.AND([ + domain, + [('event_id', 'in', self.ids)] + ]) + ).event_id + + + for event in self: + event.is_participating = event in events + # ------------------------------------------------------------ # WEBSITE MENU MANAGEMENT # ------------------------------------------------------------ diff --git a/addons/website_event_online/views/event_event_views.xml b/addons/website_event_online/views/event_event_views.xml index e968ea1e903..6d45652b57c 100644 --- a/addons/website_event_online/views/event_event_views.xml +++ b/addons/website_event_online/views/event_event_views.xml @@ -10,6 +10,8 @@
diff --git a/addons/website_event_online/views/event_templates_event.xml b/addons/website_event_online/views/event_templates_event.xml new file mode 100644 index 00000000000..b7c71afd11e --- /dev/null +++ b/addons/website_event_online/views/event_templates_event.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/addons/website_event_track_online/__manifest__.py b/addons/website_event_track_online/__manifest__.py index 9148c7169a3..e0547b8c030 100644 --- a/addons/website_event_track_online/__manifest__.py +++ b/addons/website_event_track_online/__manifest__.py @@ -19,8 +19,9 @@ 'security/ir.model.access.csv', 'views/assets.xml', 'views/event_event_views.xml', - 'views/event_track_templates_reminder.xml', + 'views/event_templates_registration.xml', 'views/event_track_templates.xml', + 'views/event_track_templates_reminder.xml', 'views/event_track_views.xml', 'views/event_track_visitor_views.xml', 'views/website_visitor_views.xml', diff --git a/addons/website_event_track_online/views/event_templates_registration.xml b/addons/website_event_track_online/views/event_templates_registration.xml new file mode 100644 index 00000000000..0918ce2572c --- /dev/null +++ b/addons/website_event_track_online/views/event_templates_registration.xml @@ -0,0 +1,18 @@ + + + + + + +