diff options
| author | Thibault Delavallée <tde@odoo.com> | 2020-08-18 13:56:08 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-08-21 17:30:13 +0000 |
| commit | 77d7a3cf6a2cf07e18804a2d9b59e3697b11006e (patch) | |
| tree | 435ca546a4b8eb5867dcd756e940b14e67513479 /addons/website_event_track | |
| parent | 8da7288453d43ff6ccfd6cb6d8332eec998d3927 (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/website_event_track')
8 files changed, 18 insertions, 125 deletions
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/views/website_event_menu_views.xml b/addons/website_event_track/views/website_event_menu_views.xml deleted file mode 100644 index ff93dff1796..00000000000 --- a/addons/website_event_track/views/website_event_menu_views.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0"?> -<odoo><data> - - <record id="website_event_menu_view_search" model="ir.ui.view"> - <field name="name">website.event.menu.view.search</field> - <field name="model">website.event.menu</field> - <field name="arch" type="xml"> - <search string="Website Event Menus"> - <field name="menu_id"/> - <field name="event_id"/> - <field name="menu_type"/> - </search> - </field> - </record> - - <record id="website_event_menu_view_form" model="ir.ui.view"> - <field name="name">website.event.menu.view.form</field> - <field name="model">website.event.menu</field> - <field name="arch" type="xml"> - <form string="Website Event Menu"> - <sheet> - <group> - <field name="menu_id"/> - <field name="event_id"/> - <field name="menu_type"/> - </group> - </sheet> - </form> - </field> - </record> - - <record id="website_event_menu_view_tree" model="ir.ui.view"> - <field name="name">website.event.menu.view.tree</field> - <field name="model">website.event.menu</field> - <field name="arch" type="xml"> - <tree string="Website Event Menus"> - <field name="menu_id"/> - <field name="event_id"/> - <field name="menu_type"/> - </tree> - </field> - </record> - - <record id="website_event_menu_action" model="ir.actions.act_window"> - <field name="name">Menus</field> - <field name="res_model">website.event.menu</field> - <field name="view_mode">tree,form</field> - </record> - -</data> -</odoo> |
