summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2020-08-18 13:56:08 +0000
committerThibault Delavallée <tde@odoo.com>2020-08-21 17:30:13 +0000
commit77d7a3cf6a2cf07e18804a2d9b59e3697b11006e (patch)
tree435ca546a4b8eb5867dcd756e940b14e67513479 /addons
parent8da7288453d43ff6ccfd6cb6d8332eec998d3927 (diff)
[MOV] website_event(_track): move website event menu into website event
PURPOSE Clean organization and models linked to Event Online feature introduced in semi stable saas-13.3 at odoo/odoo@981f95bbf46658eda9f2d33751b9310cc67d86aa and odoo/enterprise@14722028ae0773c3710ea48ce48ff44703e83b5a Also clean website event menu not being available in website event but only in website event track, which implies some extra-code to manage it. In short: merge website_event_online in website_event, website_event_track _(online/session) in website_event_track. RATIONALE _online modules have been added to extend content of website_event and website_event_track without having any impact on those module. First step of cleaning is to move this content directly in base module. track_session module is mainly a rewrite of track module. Second step of cleaning is to move its content directly in website_event_track. SPECIFICATIONS Move website event menu model directly into website event. Website event menu model has been introduced to help dealing with event-specific menus and website menus. This is some kind of glue to synchronize both of them as people could either * update an event (website_menu, website_track) that updates website menus availability; * update menus through website that should update event field value and menu computation; Having a model introduced in website event track forces to have override and code split across website_event, website_event_track, and now also in both _online version of those two as menu management was improved. In this commit we simplify all this code by moving most of menu management code in website_event, leaving only business-specific code (fields and their menus) to sub modules. SPECIFICATIONS: WEBSITE EVENT MENU Make type required as we don't support entries without type. Indeed this model is used to automate menus generation / destruction, and not for hand-made menus. We therefore set type as required and add a cascade ondelete for selection. SPECIFCIATIONS: COMMUNITY MENU Doing this change allows to define community menu in website_event and re-use it in website_event_meet and website_event_track_quiz, removing some unnecessary dependencies. This menu is void in website_event, and displays either meeting rooms (in meet) or quiz points leaderboard (in quiz), or a mix of both if the two features are installed. LINKS Task ID-2319779 COM odoo/odoo#56067 ENT odoo/enterprise#12520 UPG odoo/upgrade#165
Diffstat (limited to 'addons')
-rw-r--r--addons/website_event/__manifest__.py2
-rw-r--r--addons/website_event/controllers/__init__.py1
-rw-r--r--addons/website_event/controllers/community.py (renamed from addons/website_event_track_online/controllers/community.py)6
-rw-r--r--addons/website_event/models/__init__.py2
-rw-r--r--addons/website_event/models/event_event.py99
-rw-r--r--addons/website_event/models/event_type.py11
-rw-r--r--addons/website_event/models/website_event_menu.py15
-rw-r--r--addons/website_event/models/website_menu.py29
-rw-r--r--addons/website_event/security/ir.model.access.csv2
-rw-r--r--addons/website_event/tests/test_event_internals.py2
-rw-r--r--addons/website_event/views/event_event_views.xml8
-rw-r--r--addons/website_event/views/event_menus.xml11
-rw-r--r--addons/website_event/views/event_type_views.xml3
-rw-r--r--addons/website_event/views/website_event_menu_views.xml (renamed from addons/website_event_track/views/website_event_menu_views.xml)0
-rw-r--r--addons/website_event_meet/controllers/community.py4
-rw-r--r--addons/website_event_meet/models/website_event_menu.py4
-rw-r--r--addons/website_event_meet/views/event_event_views.xml2
-rw-r--r--addons/website_event_meet_quiz/controllers/community.py8
-rw-r--r--addons/website_event_online/models/event_event.py37
-rw-r--r--addons/website_event_online/views/event_event_views.xml4
-rw-r--r--addons/website_event_track/__manifest__.py1
-rw-r--r--addons/website_event_track/models/event_event.py56
-rw-r--r--addons/website_event_track/models/website_event_menu.py12
-rw-r--r--addons/website_event_track/models/website_menu.py3
-rw-r--r--addons/website_event_track/security/ir.model.access.csv2
-rw-r--r--addons/website_event_track/tests/test_website_event.py11
-rw-r--r--addons/website_event_track/views/event_menus.xml7
-rw-r--r--addons/website_event_track_exhibitor/models/website_event_menu.py4
-rw-r--r--addons/website_event_track_online/__manifest__.py1
-rw-r--r--addons/website_event_track_online/controllers/__init__.py1
-rw-r--r--addons/website_event_track_online/models/__init__.py3
-rw-r--r--addons/website_event_track_online/models/event_event.py67
-rw-r--r--addons/website_event_track_online/models/event_type.py18
-rw-r--r--addons/website_event_track_online/models/website_event_menu.py12
-rw-r--r--addons/website_event_track_online/views/event_event_views.xml4
-rw-r--r--addons/website_event_track_online/views/event_type_views.xml16
-rw-r--r--addons/website_event_track_quiz/controllers/community.py4
37 files changed, 207 insertions, 265 deletions
diff --git a/addons/website_event/__manifest__.py b/addons/website_event/__manifest__.py
index 54df14666d4..41fb932b683 100644
--- a/addons/website_event/__manifest__.py
+++ b/addons/website_event/__manifest__.py
@@ -28,6 +28,8 @@
'views/website_templates.xml',
'views/event_event_views.xml',
'views/event_type_views.xml',
+ 'views/website_event_menu_views.xml',
+ 'views/event_menus.xml',
'security/ir.model.access.csv',
'security/event_security.xml',
],
diff --git a/addons/website_event/controllers/__init__.py b/addons/website_event/controllers/__init__.py
index 65a8c12013d..88cf7794fab 100644
--- a/addons/website_event/controllers/__init__.py
+++ b/addons/website_event/controllers/__init__.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from . import main
+from . import community
diff --git a/addons/website_event_track_online/controllers/community.py b/addons/website_event/controllers/community.py
index 2720a94931f..57a8cc4694d 100644
--- a/addons/website_event_track_online/controllers/community.py
+++ b/addons/website_event/controllers/community.py
@@ -1,11 +1,11 @@
# -*- 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 import http
from odoo.http import request
-class WebsiteEventCommunityController(http.Controller):
+
+class EventCommunityController(http.Controller):
@http.route('/event/<model("event.event"):event>/community', type="http", auth="public", website=True)
def community(self, event, lang=None, **kwargs):
diff --git a/addons/website_event/models/__init__.py b/addons/website_event/models/__init__.py
index cf46b000f81..f49b644b04f 100644
--- a/addons/website_event/models/__init__.py
+++ b/addons/website_event/models/__init__.py
@@ -3,3 +3,5 @@
from . import event_event
from . import event_type
from . import website
+from . import website_event_menu
+from . import website_menu
diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py
index e796b916705..7cf5f4e6b05 100644
--- a/addons/website_event/models/event_event.py
+++ b/addons/website_event/models/event_event.py
@@ -36,6 +36,13 @@ class Event(models.Model):
help="Creates menus Introduction, Location and Register on the page "
"of the event on the website.")
menu_id = fields.Many2one('website.menu', 'Event Menu', copy=False)
+ 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")])
def _compute_is_participating(self):
# we don't allow public user to see participating label
@@ -47,13 +54,6 @@ class Event(models.Model):
else:
self.is_participating = False
- @api.depends('name')
- def _compute_website_url(self):
- super(Event, self)._compute_website_url()
- for event in self:
- if event.id: # avoid to perform a slug on a not yet saved record in case of an onchange.
- event.website_url = '/event/%s' % slug(event)
-
@api.depends('event_type_id')
def _compute_website_menu(self):
""" Also ensure a value for website_menu as it is a trigger notably for
@@ -64,6 +64,24 @@ class Event(models.Model):
elif not event.website_menu:
event.website_menu = False
+ @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
+
+ @api.depends('name')
+ def _compute_website_url(self):
+ super(Event, self)._compute_website_url()
+ for event in self:
+ if event.id: # avoid to perform a slug on a not yet saved record in case of an onchange.
+ event.website_url = '/event/%s' % slug(event)
+
@api.model
def create(self, vals):
res = super(Event, self).create(vals)
@@ -91,7 +109,10 @@ class Event(models.Model):
:return list: list of fields, each of which triggering a menu update
like website_menu, website_track, ... """
- return ['website_menu']
+ return ['website_menu', 'community_menu']
+
+ def _get_menu_type_field_matching(self):
+ return {'community': 'community_menu'}
def _split_menus_state_by_field(self):
""" For each field linked to a menu, get the set of events having this
@@ -135,7 +156,7 @@ class Event(models.Model):
menus_update_by_field[fname] |= menus_state_by_field[fname]['deactivated'].filtered(lambda event: event[fname])
return menus_update_by_field
- def _get_menu_entries(self):
+ def _get_website_menu_entries(self):
""" Method returning menu entries to display on the website view of the
event, possibly depending on some options in inheriting modules.
@@ -143,14 +164,22 @@ class Event(models.Model):
* name: menu item name
* url: if set, url to a route (do not use xml_id in that case);
* xml_id: template linked to the page (do not use url in that case);
+ * sequence: specific sequence of menu entry to be set on the menu;
+ * menu_type: type of menu entry (used in inheriting modules to ease
+ menu management; not used in this module in 13.3 due to technical
+ limitations);
"""
self.ensure_one()
return [
- (_('Introduction'), False, 'website_event.template_intro'),
- (_('Location'), False, 'website_event.template_location'),
- (_('Register'), '/event/%s/register' % slug(self), False),
+ (_('Introduction'), False, 'website_event.template_intro', 1, False),
+ (_('Location'), False, 'website_event.template_location', 50, False),
+ (_('Register'), '/event/%s/register' % slug(self), False, 100, False),
]
+ def _get_community_menu_entries(self):
+ self.ensure_one()
+ return [(_('Community'), '/event/%s/community' % slug(self), False, 80, 'community')]
+
def _update_website_menus(self, menus_update_by_field=None):
""" Synchronize event configuration and its menu entries for frontend.
@@ -161,8 +190,44 @@ class Event(models.Model):
elif event.website_menu and not event.menu_id:
root_menu = self.env['website.menu'].sudo().create({'name': event.name, 'website_id': event.website_id.id})
event.menu_id = root_menu
- for sequence, (name, url, xml_id) in enumerate(event._get_menu_entries()):
- event._create_menu(sequence, name, url, xml_id)
+ if event.website_menu and (not menus_update_by_field or event in menus_update_by_field.get('website_menu')):
+ for name, url, xml_id, menu_sequence, menu_type in event._get_website_menu_entries():
+ event._create_menu(menu_sequence, name, url, xml_id, menu_type=menu_type)
+ if event.menu_id and (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 _update_website_menu_entry(self, fname_bool, fname_o2m, method_name):
+ """ Generic method to create menu entries based on a flag on event. This
+ method is a bit obscure, but is due to preparation of adding new menus
+ entries and pages for event in a stable version, leading to some constraints
+ while developing.
+
+ :param fname_bool: field name (e.g. website_track)
+ :param fname_o2m: o2m linking towards website.event.menu matching the
+ boolean fields (normally an entry ot website.event.menu with type matching
+ the boolean field name)
+ :param method_name: method returning menu entries information: url, sequence, ...
+ """
+ self.ensure_one()
+ new_menu = None
+
+ if self[fname_bool] and not self[fname_o2m]:
+ # menus not found but boolean True: get menus to create
+ for sequence, menu_data in enumerate(getattr(self, method_name)()):
+ # some modules have 4 data: name, url, xml_id, menu_type; however we
+ # plan to support sequence in future modules, so this hackish code is
+ # necessary to avoid crashing. Not nice, but stable target = meh.
+ if len(menu_data) == 4:
+ (name, url, xml_id, menu_type) = menu_data
+ menu_sequence = sequence
+ elif len(menu_data) == 5:
+ (name, url, xml_id, menu_sequence, menu_type) = menu_data
+ new_menu = self._create_menu(menu_sequence, name, url, xml_id, menu_type=menu_type)
+ elif not self[fname_bool]:
+ # will cascade delete to the website.event.menu
+ self[fname_o2m].mapped('menu_id').sudo().unlink()
+
+ return new_menu
def _create_menu(self, sequence, name, url, xml_id, menu_type=False):
""" If url: create a website menu. Menu leads directly to the URL that
@@ -184,6 +249,12 @@ class Event(models.Model):
'sequence': sequence,
'website_id': self.website_id.id,
})
+ if menu_type:
+ self.env['website.event.menu'].create({
+ 'menu_id': website_menu.id,
+ 'event_id': self.id,
+ 'menu_type': menu_type,
+ })
return website_menu
# ------------------------------------------------------------
diff --git a/addons/website_event/models/event_type.py b/addons/website_event/models/event_type.py
index 6aee644c7d3..b89d3af9518 100644
--- a/addons/website_event/models/event_type.py
+++ b/addons/website_event/models/event_type.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models
+from odoo import api, fields, models
class EventType(models.Model):
@@ -9,3 +9,12 @@ class EventType(models.Model):
_inherit = ['event.type']
website_menu = fields.Boolean('Display a dedicated menu on Website')
+ 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/models/website_event_menu.py b/addons/website_event/models/website_event_menu.py
new file mode 100644
index 00000000000..b19c7d8ca75
--- /dev/null
+++ b/addons/website_event/models/website_event_menu.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class EventMenu(models.Model):
+ _name = "website.event.menu"
+ _description = "Website Event Menu"
+
+ menu_id = fields.Many2one('website.menu', string='Menu', ondelete='cascade')
+ event_id = fields.Many2one('event.event', string='Event', ondelete='cascade')
+ menu_type = fields.Selection([
+ ('community', 'Community Menu')], string="Menu Type",
+ ondelete={'community': 'cascade'}, required=True)
diff --git a/addons/website_event/models/website_menu.py b/addons/website_event/models/website_menu.py
new file mode 100644
index 00000000000..1b96cd8552c
--- /dev/null
+++ b/addons/website_event/models/website_menu.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models
+
+
+class WebsiteMenu(models.Model):
+ _inherit = "website.menu"
+
+ def unlink(self):
+ """ Override to synchronize event configuration fields with menu deletion.
+ This should be cleaned in upcoming versions. """
+ event_updates = {}
+ website_event_menus = self.env['website.event.menu'].search([('menu_id', 'in', self.ids)])
+ for event_menu in website_event_menus:
+ to_update = event_updates.setdefault(event_menu.event_id, list())
+ for menu_type, fname in event_menu.event_id._get_menu_type_field_matching().items():
+ if event_menu.menu_type == menu_type:
+ to_update.append(fname)
+
+ # call super that resumes the unlink of menus entries (including website event menus)
+ res = super(WebsiteMenu, self).unlink()
+
+ # update events
+ for event, to_update in event_updates.items():
+ if to_update:
+ event.write(dict((fname, False) for fname in to_update))
+
+ return res
diff --git a/addons/website_event/security/ir.model.access.csv b/addons/website_event/security/ir.model.access.csv
index 985c14e5190..e865d4a1581 100644
--- a/addons/website_event/security/ir.model.access.csv
+++ b/addons/website_event/security/ir.model.access.csv
@@ -6,3 +6,5 @@ access_event_event_ticket_public,event.event.ticket.public,event.model_event_eve
access_event_event_ticket_portal,event.event.ticket.portal,event.model_event_event_ticket,base.group_portal,1,0,0,0
access_event_category_public,event.tag.category.public,event.model_event_tag_category,,1,0,0,0
access_event_tag_public,event.tag.public,event.model_event_tag,,1,0,0,0
+access_website_event_menu_public,website.event.menu,model_website_event_menu,,1,0,0,0
+access_website_event_menu_manager,website.event.menu,model_website_event_menu,event.group_event_manager,1,1,1,1
diff --git a/addons/website_event/tests/test_event_internals.py b/addons/website_event/tests/test_event_internals.py
index 9e99815fd67..9339da20e6a 100644
--- a/addons/website_event/tests/test_event_internals.py
+++ b/addons/website_event/tests/test_event_internals.py
@@ -17,6 +17,7 @@ class TestEventWebsite(TestWebsiteEventCommon):
'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
'website_menu': True,
+ 'community_menu': False,
})
self._assert_website_menus(event)
@@ -27,6 +28,7 @@ class TestEventWebsite(TestWebsiteEventCommon):
'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
'website_menu': True,
+ 'community_menu': False,
})
self.assertTrue(event.website_menu)
self._assert_website_menus(event)
diff --git a/addons/website_event/views/event_event_views.xml b/addons/website_event/views/event_event_views.xml
index 40b949e23bc..6b03966b5aa 100644
--- a/addons/website_event/views/event_event_views.xml
+++ b/addons/website_event/views/event_event_views.xml
@@ -19,6 +19,14 @@
type="object"
string="Preview Badges"/>
</xpath>
+ <xpath expr="//div[hasclass('oe_title')]" position="after">
+ <div name="event_menu_configuration" groups="base.group_no_one">
+ <label for="website_menu" string="Website Submenu"/>
+ <field name="website_menu"/>
+ <label for="community_menu" string="Community"/>
+ <field name="community_menu"/>
+ </div>
+ </xpath>
</field>
</record>
diff --git a/addons/website_event/views/event_menus.xml b/addons/website_event/views/event_menus.xml
new file mode 100644
index 00000000000..623a223679b
--- /dev/null
+++ b/addons/website_event/views/event_menus.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<odoo><data>
+
+ <menuitem id="menu_website_event_menu"
+ name="Website Menus"
+ action="website_event_menu_action"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"
+ sequence="99"/>
+
+</data></odoo>
diff --git a/addons/website_event/views/event_type_views.xml b/addons/website_event/views/event_type_views.xml
index 8ace9ddc2d7..e35070a93ab 100644
--- a/addons/website_event/views/event_type_views.xml
+++ b/addons/website_event/views/event_type_views.xml
@@ -19,6 +19,9 @@
website: registrations, schedule, map, ...
</div>
</div>
+ <div id="community-menu" class="row mt16" groups="base.group_no_one" attrs="{'invisible': [('website_menu', '=', False)]}">
+ <label class="col-lg-4" for="community_menu"/> <field name="community_menu"/>
+ </div>
</div>
</div>
</div>
diff --git a/addons/website_event_track/views/website_event_menu_views.xml b/addons/website_event/views/website_event_menu_views.xml
index ff93dff1796..ff93dff1796 100644
--- a/addons/website_event_track/views/website_event_menu_views.xml
+++ b/addons/website_event/views/website_event_menu_views.xml
diff --git a/addons/website_event_meet/controllers/community.py b/addons/website_event_meet/controllers/community.py
index c653b9fa9f9..291a6017dfc 100644
--- a/addons/website_event_meet/controllers/community.py
+++ b/addons/website_event_meet/controllers/community.py
@@ -8,13 +8,13 @@ from werkzeug.utils import redirect
from odoo import exceptions, http
from odoo.http import request
from odoo.addons.http_routing.models.ir_http import slug
-from odoo.addons.website_event_track_online.controllers.community import WebsiteEventCommunityController
+from odoo.addons.website_event.controllers.community import EventCommunityController
from odoo.osv import expression
_logger = logging.getLogger(__name__)
-class WebsiteEventMeetController(WebsiteEventCommunityController):
+class WebsiteEventMeetController(EventCommunityController):
def _get_event_rooms_base_domain(self, event):
search_domain_base = [('event_id', '=', event.id), ('is_published', '=', True)]
diff --git a/addons/website_event_meet/models/website_event_menu.py b/addons/website_event_meet/models/website_event_menu.py
index 827d3bc1fa4..0902dde05f2 100644
--- a/addons/website_event_meet/models/website_event_menu.py
+++ b/addons/website_event_meet/models/website_event_menu.py
@@ -7,4 +7,6 @@ from odoo import fields, models
class EventMenu(models.Model):
_inherit = "website.event.menu"
- menu_type = fields.Selection(selection_add=[("meeting_room", "Event Meeting Room Menus")])
+ menu_type = fields.Selection(
+ selection_add=[("meeting_room", "Event Meeting Room Menus")],
+ ondelete={'meeting_room': 'cascade'})
diff --git a/addons/website_event_meet/views/event_event_views.xml b/addons/website_event_meet/views/event_event_views.xml
index 08d5c46e86b..798be072310 100644
--- a/addons/website_event_meet/views/event_event_views.xml
+++ b/addons/website_event_meet/views/event_event_views.xml
@@ -4,7 +4,7 @@
<record id="event_event_view_form" model="ir.ui.view">
<field name="name">event.event.view.form.inherit.meet</field>
<field name="model">event.event</field>
- <field name="inherit_id" ref="website_event_track_online.event_event_view_form"/>
+ <field name="inherit_id" ref="website_event.event_event_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='is_published']" position="before">
<button class="oe_stat_button" context="{'default_event_id': active_id, 'search_default_event_id': active_id}" icon="fa-comments-o" name="%(event_meeting_room_action)d" type="action">
diff --git a/addons/website_event_meet_quiz/controllers/community.py b/addons/website_event_meet_quiz/controllers/community.py
index 5086a9e1881..231e548befb 100644
--- a/addons/website_event_meet_quiz/controllers/community.py
+++ b/addons/website_event_meet_quiz/controllers/community.py
@@ -1,14 +1,14 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import http
+from werkzeug.exceptions import Forbidden
-from odoo.addons.website_event_track_online.controllers.community import WebsiteEventCommunityController
+from odoo import http
+from odoo.addons.website_event.controllers.community import EventCommunityController
from odoo.http import request
-from werkzeug.exceptions import Forbidden
-class WebsiteEventTrackQuizMeetController(WebsiteEventCommunityController):
+class WebsiteEventTrackQuizMeetController(EventCommunityController):
@http.route(['/event/<model("event.event"):event>/community'], type='http', auth="public", website=True, sitemap=False)
def community(self, event, page=1, lang=None, **kwargs):
diff --git a/addons/website_event_online/models/event_event.py b/addons/website_event_online/models/event_event.py
index 05064c3b929..2f9fd7dccc9 100644
--- a/addons/website_event_online/models/event_event.py
+++ b/addons/website_event_online/models/event_event.py
@@ -93,40 +93,3 @@ class Event(models.Model):
for event in self:
event.is_participating = event in events
-
- # ------------------------------------------------------------
- # WEBSITE MENU MANAGEMENT
- # ------------------------------------------------------------
-
- def _get_menu_entries(self):
- """ Deprecate old method as a new one with more information is used
- starting with website_event_online module. """
- return []
-
- def _get_menu_entries_online(self):
- """ Method returning menu entries to display on the website view of the
- event, possibly depending on some options in inheriting modules.
-
- Each menu entry is a tuple containing :
- * name: menu item name
- * url: if set, url to a route (do not use xml_id in that case);
- * xml_id: template linked to the page (do not use url in that case);
- * sequence: specific sequence of menu entry to be set on the menu;
- * menu_type: type of menu entry (used in inheriting modules to ease
- menu management; not used in this module in 13.3 due to technical
- limitations);
- """
- self.ensure_one()
- return [
- (_('Introduction'), False, 'website_event.template_intro', 1, False),
- (_('Location'), False, 'website_event.template_location', 50, False),
- (_('Register'), '/event/%s/register' % slug(self), False, 100, False),
- ]
-
- def _update_website_menus(self, menus_update_by_field=None):
- """ Synchronize event configuration and its menu entries for frontend. """
- super(Event, self)._update_website_menus(menus_update_by_field=menus_update_by_field)
- for event in self:
- if event.website_menu and (not menus_update_by_field or event in menus_update_by_field.get('website_menu')):
- for name, url, xml_id, menu_sequence, menu_type in event._get_menu_entries_online():
- event._create_menu(menu_sequence, name, url, xml_id, menu_type=menu_type)
diff --git a/addons/website_event_online/views/event_event_views.xml b/addons/website_event_online/views/event_event_views.xml
index 4ed754e39b0..ed8cee747d8 100644
--- a/addons/website_event_online/views/event_event_views.xml
+++ b/addons/website_event_online/views/event_event_views.xml
@@ -6,10 +6,8 @@
<field name="model">event.event</field>
<field name="inherit_id" ref="event.view_event_form"/>
<field name="arch" type="xml">
- <xpath expr="//div[hasclass('oe_title')]" position="after">
+ <xpath expr="//[field@name='website_menu']" position="after">
<div name="event_menu_configuration" groups="base.group_no_one">
- <label for="website_menu" string="Website Submenu"/>
- <field name="website_menu"/>
<label for="menu_register_cta" string="Register Button"/>
<field name="menu_register_cta"/>
</div>
diff --git a/addons/website_event_track/__manifest__.py b/addons/website_event_track/__manifest__.py
index f86ee9a3a22..bdcf7efc16c 100644
--- a/addons/website_event_track/__manifest__.py
+++ b/addons/website_event_track/__manifest__.py
@@ -27,7 +27,6 @@
'views/event_sponsor_views.xml',
'views/event_event_views.xml',
'views/event_type_views.xml',
- 'views/website_event_menu_views.xml',
'views/event_menus.xml',
],
'demo': [
diff --git a/addons/website_event_track/models/event_event.py b/addons/website_event_track/models/event_event.py
index 134999a50e7..7d7dc086077 100644
--- a/addons/website_event_track/models/event_event.py
+++ b/addons/website_event_track/models/event_event.py
@@ -85,53 +85,10 @@ class Event(models.Model):
if (not menus_update_by_field) or (event in menus_update_by_field.get('website_track_proposal')):
event._update_website_menu_entry('website_track_proposal', 'track_proposal_menu_ids', '_get_track_proposal_menu_entries')
- def _update_website_menu_entry(self, fname_bool, fname_o2m, method_name):
- """ Generic method to create menu entries based on a flag on event. This
- method is a bit obscure, but is due to preparation of adding new menus
- entries and pages for event in a stable version, leading to some constraints
- while developing.
-
- :param fname_bool: field name (e.g. website_track)
- :param fname_o2m: o2m linking towards website.event.menu matching the
- boolean fields (normally an entry ot website.event.menu with type matching
- the boolean field name)
- :param method_name: method returning menu entries information: url, sequence, ...
- """
- self.ensure_one()
- new_menu = None
-
- if self[fname_bool] and not self[fname_o2m]:
- # menus not found but boolean True: get menus to create
- for sequence, menu_data in enumerate(getattr(self, method_name)()):
- # some modules have 4 data: name, url, xml_id, menu_type; however we
- # plan to support sequence in future modules, so this hackish code is
- # necessary to avoid crashing. Not nice, but stable target = meh.
- if len(menu_data) == 4:
- (name, url, xml_id, menu_type) = menu_data
- menu_sequence = sequence
- elif len(menu_data) == 5:
- (name, url, xml_id, menu_sequence, menu_type) = menu_data
- new_menu = self._create_menu(menu_sequence, name, url, xml_id, menu_type=menu_type)
- elif not self[fname_bool]:
- # will cascade delete to the website.event.menu
- self[fname_o2m].mapped('menu_id').sudo().unlink()
-
- return new_menu
-
- def _create_menu(self, sequence, name, url, xml_id, menu_type=False):
- """ Override menu creation from website_event to link a website.event.menu
- to the newly create menu (either page and url). """
- website_menu = super(Event, self)._create_menu(sequence, name, url, xml_id, menu_type=menu_type)
- if menu_type:
- self.env['website.event.menu'].create({
- 'menu_id': website_menu.id,
- 'event_id': self.id,
- 'menu_type': menu_type,
- })
- return website_menu
-
def _get_menu_type_field_matching(self):
- return {'track_proposal': 'website_track_proposal'}
+ res = super(Event, self)._get_menu_type_field_matching()
+ res['track_proposal'] = 'website_track_proposal'
+ return res
def _get_track_menu_entries(self):
""" Method returning menu entries to display on the website view of the
@@ -146,10 +103,11 @@ class Event(models.Model):
"""
self.ensure_one()
return [
- (_('Talks'), '/event/%s/track' % slug(self), False, 'track'),
- (_('Agenda'), '/event/%s/agenda' % slug(self), False, False)]
+ (_('Talks'), '/event/%s/track' % slug(self), False, 10, 'track'),
+ (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, False)
+ ]
def _get_track_proposal_menu_entries(self):
""" See website_event_track._get_track_menu_entries() """
self.ensure_one()
- return [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False, 'track_proposal')]
+ return [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False, 15, 'track_proposal')]
diff --git a/addons/website_event_track/models/website_event_menu.py b/addons/website_event_track/models/website_event_menu.py
index aa00003a58a..70561b0a28a 100644
--- a/addons/website_event_track/models/website_event_menu.py
+++ b/addons/website_event_track/models/website_event_menu.py
@@ -5,12 +5,8 @@ from odoo import fields, models
class EventMenu(models.Model):
- _name = "website.event.menu"
- _description = "Website Event Menu"
+ _inherit = "website.event.menu"
- menu_id = fields.Many2one('website.menu', string='Menu', ondelete='cascade')
- event_id = fields.Many2one('event.event', string='Event', ondelete='cascade')
- menu_type = fields.Selection([
- ('track', 'Event Tracks Menus'),
- ('track_proposal', 'Event Proposals Menus'),
- ])
+ menu_type = fields.Selection(
+ selection_add=[('track', 'Event Tracks Menus'), ('track_proposal', 'Event Proposals Menus')],
+ ondelete={'track': 'cascade', 'track_proposal': 'cascade'})
diff --git a/addons/website_event_track/models/website_menu.py b/addons/website_event_track/models/website_menu.py
index 72377d4e7ce..703c3afbe8d 100644
--- a/addons/website_event_track/models/website_menu.py
+++ b/addons/website_event_track/models/website_menu.py
@@ -18,9 +18,6 @@ class WebsiteMenu(models.Model):
# agenda page that has also menu_type='track'
if event_menu.menu_type == 'track' and '/track' in event_menu.menu_id.url:
to_update.append('website_track')
- for menu_type, fname in event_menu.event_id._get_menu_type_field_matching().items():
- if event_menu.menu_type == menu_type:
- to_update.append(fname)
# call super that resumes the unlink of menus entries (including website event menus)
res = super(WebsiteMenu, self).unlink()
diff --git a/addons/website_event_track/security/ir.model.access.csv b/addons/website_event_track/security/ir.model.access.csv
index a3c950c9457..9a52bad509d 100644
--- a/addons/website_event_track/security/ir.model.access.csv
+++ b/addons/website_event_track/security/ir.model.access.csv
@@ -12,5 +12,3 @@ access_event_track_sponsor_manager,event.track.sponsor.type.public,model_event_s
access_event_track_sponsor_public,event.track.sponsor.public,model_event_sponsor,,1,0,0,0
access_event_track_stage_all,event.track.stage.all,model_event_track_stage,,1,0,0,0
access_event_track_stage_event_manager,event.track.stage.event.manager,model_event_track_stage,event.group_event_manager,1,1,1,1
-access_website_event_menu_public,website.event.menu,model_website_event_menu,,1,0,0,0
-access_website_event_menu_manager,website.event.menu,model_website_event_menu,event.group_event_manager,1,1,1,1
diff --git a/addons/website_event_track/tests/test_website_event.py b/addons/website_event_track/tests/test_website_event.py
index bf6a2bd6965..1fedaf2d428 100644
--- a/addons/website_event_track/tests/test_website_event.py
+++ b/addons/website_event_track/tests/test_website_event.py
@@ -11,7 +11,7 @@ from odoo.tests.common import users
class TestEventWebsiteTrack(TestWebsiteEventCommon):
def _get_menus(self):
- return super(TestEventWebsiteTrack, self)._get_menus() | set(['Talks', 'Agenda', 'Talk Proposals'])
+ return super(TestEventWebsiteTrack, self)._get_menus() | set(['Community', 'Talks', 'Agenda', 'Talk Proposals'])
@users('user_eventmanager')
def test_create_menu(self):
@@ -24,6 +24,7 @@ class TestEventWebsiteTrack(TestWebsiteEventCommon):
'name': 'test_reg',
})],
'website_menu': True,
+ 'community_menu': True,
'website_track': True,
'website_track_proposal': True,
})
@@ -37,6 +38,7 @@ class TestEventWebsiteTrack(TestWebsiteEventCommon):
'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
'website_menu': True,
+ 'community_menu': True,
'website_track': True,
'website_track_proposal': True,
})
@@ -46,7 +48,7 @@ class TestEventWebsiteTrack(TestWebsiteEventCommon):
introduction_menu = event.menu_id.child_id.filtered(lambda menu: menu.name == 'Introduction')
introduction_menu.unlink()
- self._assert_website_menus(event, set(['Location', 'Register', 'Talks', 'Agenda', 'Talk Proposals']))
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talks', 'Agenda', 'Talk Proposals']))
menus = event.menu_id.child_id.filtered(lambda menu: menu.name in ['Agenda', 'Talk Proposals'])
menus.unlink()
@@ -58,12 +60,12 @@ class TestEventWebsiteTrack(TestWebsiteEventCommon):
self.assertFalse(event.website_track)
self.assertFalse(event.website_track_proposal)
- self._assert_website_menus(event, set(['Location', 'Register']))
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community']))
event.write({'website_track_proposal': True})
self.assertTrue(event.website_track)
self.assertTrue(event.website_track_proposal)
- self._assert_website_menus(event, set(['Location', 'Register', 'Talks', 'Agenda', 'Talk Proposals']))
+ self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talks', 'Agenda', 'Talk Proposals']))
@users('user_eventmanager')
def test_write_menu(self):
@@ -71,6 +73,7 @@ class TestEventWebsiteTrack(TestWebsiteEventCommon):
self.assertFalse(event.menu_id)
event.write({
'website_menu': True,
+ 'community_menu': True,
'website_track': True,
'website_track_proposal': True,
})
diff --git a/addons/website_event_track/views/event_menus.xml b/addons/website_event_track/views/event_menus.xml
index 9b5b597c5da..cec7203d774 100644
--- a/addons/website_event_track/views/event_menus.xml
+++ b/addons/website_event_track/views/event_menus.xml
@@ -39,11 +39,4 @@
groups="base.group_no_one"
sequence="40"/>
- <menuitem id="menu_website_event_menu"
- name="Website Menus"
- action="website_event_menu_action"
- parent="event.menu_event_configuration"
- groups="base.group_no_one"
- sequence="99"/>
-
</data></odoo>
diff --git a/addons/website_event_track_exhibitor/models/website_event_menu.py b/addons/website_event_track_exhibitor/models/website_event_menu.py
index ce37fadbbf5..5926607ef48 100644
--- a/addons/website_event_track_exhibitor/models/website_event_menu.py
+++ b/addons/website_event_track_exhibitor/models/website_event_menu.py
@@ -7,4 +7,6 @@ from odoo import fields, models
class EventMenu(models.Model):
_inherit = "website.event.menu"
- menu_type = fields.Selection(selection_add=[('exhibitor', 'Exhibitors Menus')])
+ menu_type = fields.Selection(
+ selection_add=[('exhibitor', 'Exhibitors Menus')],
+ ondelete={'exhibitor': 'cascade'})
diff --git a/addons/website_event_track_online/__manifest__.py b/addons/website_event_track_online/__manifest__.py
index 8ad731cd362..d9f2e82d2d6 100644
--- a/addons/website_event_track_online/__manifest__.py
+++ b/addons/website_event_track_online/__manifest__.py
@@ -32,7 +32,6 @@
'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 074cc5bfa61..e3798014924 100644
--- a/addons/website_event_track_online/controllers/__init__.py
+++ b/addons/website_event_track_online/controllers/__init__.py
@@ -2,4 +2,3 @@
# 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/models/__init__.py b/addons/website_event_track_online/models/__init__.py
index c8add27a1e3..a5e57fba9f1 100644
--- a/addons/website_event_track_online/models/__init__.py
+++ b/addons/website_event_track_online/models/__init__.py
@@ -1,14 +1,11 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import event_event
from . import event_sponsor
from . import event_sponsor_type
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
-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
deleted file mode 100644
index 36899d5e86b..00000000000
--- a/addons/website_event_track_online/models/event_event.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-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, False)
- ]
-
- def _get_track_proposal_menu_entries(self):
- """ See website_event_track._get_track_menu_entries() """
- self.ensure_one()
- return [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False, 15, 'track_proposal')]
diff --git a/addons/website_event_track_online/models/event_type.py b/addons/website_event_track_online/models/event_type.py
deleted file mode 100644
index 9b2efc94af8..00000000000
--- a/addons/website_event_track_online/models/event_type.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- 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
deleted file mode 100644
index 97c17aff19a..00000000000
--- a/addons/website_event_track_online/models/website_event_menu.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- 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 c1aa910cc07..a6a7b374e70 100644
--- a/addons/website_event_track_online/views/event_event_views.xml
+++ b/addons/website_event_track_online/views/event_event_views.xml
@@ -12,10 +12,6 @@
<label for="website_track_proposal" string="Allow Track Proposals"/>
<field name="website_track_proposal"/>
</xpath>
- <xpath expr="//div[@name='event_menu_configuration']" position='inside'>
- <label for="community_menu" string="Community"/>
- <field name="community_menu"/>
- </xpath>
</field>
</record>
diff --git a/addons/website_event_track_online/views/event_type_views.xml b/addons/website_event_track_online/views/event_type_views.xml
deleted file mode 100644
index 9ecd3283fd8..00000000000
--- a/addons/website_event_track_online/views/event_type_views.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<odoo><data>
- <record id="event_type_view_form" model="ir.ui.view">
- <field name="name">event.type.view.form.inherit.meet</field>
- <field name="model">event.type</field>
- <field name="inherit_id" ref="website_event.event_type_view_form"/>
- <field name="arch" type="xml">
- <xpath expr="//div[@name='website_menu']" position='after'>
- <div id="community-menu" class="row mt16" groups="base.group_no_one" attrs="{'invisible': [('website_menu', '=', False)]}">
- <label class="col-lg-4" for="community_menu"/> <field name="community_menu"/>
- </div>
- </xpath>
- </field>
- </record>
-
-</data></odoo>
diff --git a/addons/website_event_track_quiz/controllers/community.py b/addons/website_event_track_quiz/controllers/community.py
index f10f8e9dffb..7748a2dc1db 100644
--- a/addons/website_event_track_quiz/controllers/community.py
+++ b/addons/website_event_track_quiz/controllers/community.py
@@ -5,11 +5,11 @@ import math
from odoo import http
from odoo.addons.http_routing.models.ir_http import slug
-from odoo.addons.website_event_track_online.controllers.community import WebsiteEventCommunityController
+from odoo.addons.website_event.controllers.community import EventCommunityController
from odoo.http import request
-class WebsiteEventTrackQuizCommunityController(WebsiteEventCommunityController):
+class WebsiteEventTrackQuizCommunityController(EventCommunityController):
_visitors_per_page = 30
_pager_max_pages = 5