From 21e429daaecad8f09810f955e6b58ecf5cafccb8 Mon Sep 17 00:00:00 2001 From: qmo-odoo Date: Thu, 30 Jul 2020 09:00:11 +0000 Subject: [PATCH] [IMP] website_event_track_online: add a (void) community menu and page 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 Prepare community addition (both quiz-based and room-based) by adding a community link and page management. SPECIFICATIONS In order to show the leaderboard and the meeting rooms on the same page we have to put a page and a route at the base of two upcoming modules: meet and quiz. The only common ancestor of those two will be website_event_track_online who gains a field for the community menu. It currently does nothing and leads to a void page. Both meet and quiz modules will add their own logic: meeting rooms or leaderboard. Having bothi installed displays rooms with a small leaderboard. See next commits for more details on those modules. LINKS Task ID-2252655 (Main Online Event task) Task ID-2283771 (Quizzes on Talks, Leaderboard) Task ID-2283742 (Community gathering on chat rooms) Co-Authored-By: Aurélien Warnon Co-Authored-By: David Beguin Co-Authored-By: Quentin Mourier Co-Authored-By: Stéphane Debauche Co-Authored-By: Thibault Delavallée --- .../__manifest__.py | 1 + .../controllers/__init__.py | 1 + .../controllers/community.py | 13 ++++++ .../models/__init__.py | 2 + .../models/event_event.py | 44 ++++++++++++++++++- .../models/event_type.py | 18 ++++++++ .../models/website_event_menu.py | 12 +++++ .../views/event_event_views.xml | 6 +++ .../views/event_type_views.xml | 16 +++++++ 9 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 addons/website_event_track_online/controllers/community.py create mode 100644 addons/website_event_track_online/models/event_type.py create mode 100644 addons/website_event_track_online/models/website_event_menu.py create mode 100644 addons/website_event_track_online/views/event_type_views.xml diff --git a/addons/website_event_track_online/__manifest__.py b/addons/website_event_track_online/__manifest__.py index d9f2e82d2d6..8ad731cd362 100644 --- a/addons/website_event_track_online/__manifest__.py +++ b/addons/website_event_track_online/__manifest__.py @@ -32,6 +32,7 @@ 'views/event_track_views.xml', 'views/event_track_tag_views.xml', 'views/event_track_visitor_views.xml', + 'views/event_type_views.xml', 'views/website_visitor_views.xml', 'views/event_menus.xml', ], diff --git a/addons/website_event_track_online/controllers/__init__.py b/addons/website_event_track_online/controllers/__init__.py index e3798014924..074cc5bfa61 100644 --- a/addons/website_event_track_online/controllers/__init__.py +++ b/addons/website_event_track_online/controllers/__init__.py @@ -2,3 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import event_track +from . import community diff --git a/addons/website_event_track_online/controllers/community.py b/addons/website_event_track_online/controllers/community.py new file mode 100644 index 00000000000..2720a94931f --- /dev/null +++ b/addons/website_event_track_online/controllers/community.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.addons.website_event.controllers.main import WebsiteEventController +from odoo import fields, http, modules, tools +from odoo.http import request + +class WebsiteEventCommunityController(http.Controller): + + @http.route('/event//community', type="http", auth="public", website=True) + def community(self, event, lang=None, **kwargs): + """ This skeleton route will be overriden in website_event_track_quiz, website_event_meet and website_event_meet_quiz. """ + return request.render('website.page_404') diff --git a/addons/website_event_track_online/models/__init__.py b/addons/website_event_track_online/models/__init__.py index 45507706c33..b47218d4ecf 100644 --- a/addons/website_event_track_online/models/__init__.py +++ b/addons/website_event_track_online/models/__init__.py @@ -8,4 +8,6 @@ from . import event_track_visitor from . import event_track from . import event_track_stage from . import event_track_tag +from . import event_type +from . import website_event_menu from . import website_visitor diff --git a/addons/website_event_track_online/models/event_event.py b/addons/website_event_track_online/models/event_event.py index 1687967c00b..36899d5e86b 100644 --- a/addons/website_event_track_online/models/event_event.py +++ b/addons/website_event_track_online/models/event_event.py @@ -1,24 +1,64 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import models, _ +from odoo import models, fields, api, _ from odoo.addons.http_routing.models.ir_http import slug class EventEvent(models.Model): _inherit = "event.event" + community_menu = fields.Boolean( + "Community Menu", compute="_compute_community_menu", + readonly=False, store=True, + help="Display community tab on website") + community_menu_ids = fields.One2many( + "website.event.menu", "event_id", string="Event Community Menus", + domain=[("menu_type", "=", "community")]) + + @api.depends("event_type_id", "website_menu", "community_menu") + def _compute_community_menu(self): + """ At type onchange: synchronize. At website_menu update: synchronize. """ + for event in self: + if event.event_type_id and event.event_type_id != event._origin.event_type_id: + event.community_menu = event.event_type_id.community_menu + elif event.website_menu and event.website_menu != event._origin.website_menu or not event.community_menu: + event.community_menu = True + elif not event.website_menu: + event.community_menu = False + # ------------------------------------------------------------ # WEBSITE MENU MANAGEMENT # ------------------------------------------------------------ # OVERRIDES: ADD SEQUENCE + + def _get_menu_update_fields(self): + update_fields = super(EventEvent, self)._get_menu_update_fields() + update_fields += ['community_menu'] + return update_fields + + def _update_website_menus(self, menus_update_by_field=None): + super(EventEvent, self)._update_website_menus(menus_update_by_field=menus_update_by_field) + for event in self: + if not menus_update_by_field or event in menus_update_by_field.get('community_menu'): + event._update_website_menu_entry('community_menu', 'community_menu_ids', '_get_community_menu_entries') + + def _get_menu_type_field_matching(self): + res = super(EventEvent, self)._get_menu_type_field_matching() + res['community'] = 'community_menu' + return res + + def _get_community_menu_entries(self): + self.ensure_one() + return [(_('Community'), '/event/%s/community' % slug(self), False, 80, 'community')] + def _get_track_menu_entries(self): """ Remove agenda as this is now managed separately """ self.ensure_one() return [ (_('Talks'), '/event/%s/track' % slug(self), False, 10, 'track'), - (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, 'track') + (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, False) ] def _get_track_proposal_menu_entries(self): diff --git a/addons/website_event_track_online/models/event_type.py b/addons/website_event_track_online/models/event_type.py new file mode 100644 index 00000000000..9b2efc94af8 --- /dev/null +++ b/addons/website_event_track_online/models/event_type.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class EventType(models.Model): + _inherit = "event.type" + + community_menu = fields.Boolean( + "Community Menu", compute="_compute_community_menu", + readonly=False, store=True, + help="Display community tab on website") + + @api.depends('website_menu') + def _compute_community_menu(self): + for event_type in self: + event_type.community_menu = event_type.website_menu diff --git a/addons/website_event_track_online/models/website_event_menu.py b/addons/website_event_track_online/models/website_event_menu.py new file mode 100644 index 00000000000..97c17aff19a --- /dev/null +++ b/addons/website_event_track_online/models/website_event_menu.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class EventMenu(models.Model): + _inherit = "website.event.menu" + + menu_type = fields.Selection(selection_add=[ + ('community', 'Community Menu') + ]) diff --git a/addons/website_event_track_online/views/event_event_views.xml b/addons/website_event_track_online/views/event_event_views.xml index 0f95fc80b9b..c1aa910cc07 100644 --- a/addons/website_event_track_online/views/event_event_views.xml +++ b/addons/website_event_track_online/views/event_event_views.xml @@ -12,7 +12,13 @@