diff options
| author | Thibault Delavallée <tde@odoo.com> | 2020-08-21 09:05:42 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-08-24 10:16:48 +0000 |
| commit | ee806a01029a10ef5802aac0a22241b3c1158100 (patch) | |
| tree | c473bbbec8bf7f4edfeafb6fd90d5e8c8a588f14 | |
| parent | db4eda03849599f22277af00565aac603c747a2e (diff) | |
[FIX] website_event_track(_online): fix track menu computation
This commit fixes glitches when switching menus. Indeed agenda is not correctly
taken into account, meaning it could get duplicated. Moreover track was
constantly coming back as True event when not wanted.
Behavior is: when setting website menu, force it to True, otherwise let users
defined its value. Agenda is part of track menu so fix its declaration in
_track and _track_online methods.
Task ID-2314778 (event online fixes)
PR #56340
PR odoo/enterprise#12589
X-Original-PR #56254
X-Original-Commit odoo/odoo@5821758c4db480a4c94b7a73c18216bed1c07394
4 files changed, 22 insertions, 12 deletions
diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py index 72f8096b5a1..f897d2eaffd 100644 --- a/addons/website_event/models/event_event.py +++ b/addons/website_event/models/event_event.py @@ -118,7 +118,7 @@ class Event(models.Model): 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: + 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 @@ -129,7 +129,7 @@ class Event(models.Model): for event in self: if event.event_type_id and event.event_type_id != event._origin.event_type_id: event.menu_register_cta = event.event_type_id.menu_register_cta - elif event.website_menu and event.website_menu != event._origin.website_menu or not event.menu_register_cta: + elif event.website_menu and (event.website_menu != event._origin.website_menu or not event.menu_register_cta): event.menu_register_cta = True elif not event.website_menu: event.menu_register_cta = False diff --git a/addons/website_event_track/models/event_event.py b/addons/website_event_track/models/event_event.py index 7d7dc086077..1b62b47a27e 100644 --- a/addons/website_event_track/models/event_event.py +++ b/addons/website_event_track/models/event_event.py @@ -37,17 +37,17 @@ class Event(models.Model): for event in self: event.sponsor_count = result.get(event.id, 0) - @api.depends('event_type_id', 'website_menu', 'website_track_proposal') + @api.depends('event_type_id', 'website_menu') def _compute_website_track(self): """ Propagate event_type configuration (only at change); otherwise propagate website_menu updated value. Also force True is track_proposal changes. """ for event in self: if event.event_type_id and event.event_type_id != event._origin.event_type_id: event.website_track = event.event_type_id.website_track - elif event.website_menu != event._origin.website_menu or not event.website_menu or not event.website_track: - event.website_track = event.website_menu - elif event.website_track_proposal and not event.website_track: + elif event.website_menu and (event.website_menu != event._origin.website_menu or not event.website_track): event.website_track = True + elif not event.website_menu: + event.website_track = False @api.depends('event_type_id', 'website_track') def _compute_website_track_proposal(self): @@ -80,9 +80,9 @@ class Event(models.Model): def _update_website_menus(self, menus_update_by_field=None): super(Event, 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('website_track')): + if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('website_track')): event._update_website_menu_entry('website_track', 'track_menu_ids', '_get_track_menu_entries') - if (not menus_update_by_field) or (event in menus_update_by_field.get('website_track_proposal')): + if event.menu_id and (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 _get_menu_type_field_matching(self): @@ -104,7 +104,7 @@ class Event(models.Model): self.ensure_one() return [ (_('Talks'), '/event/%s/track' % slug(self), False, 10, 'track'), - (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, False) + (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, 'track') ] def _get_track_proposal_menu_entries(self): diff --git a/addons/website_event_track/tests/test_website_event.py b/addons/website_event_track/tests/test_website_event.py index 1fedaf2d428..233018d449a 100644 --- a/addons/website_event_track/tests/test_website_event.py +++ b/addons/website_event_track/tests/test_website_event.py @@ -63,13 +63,23 @@ class TestEventWebsiteTrack(TestWebsiteEventCommon): self._assert_website_menus(event, set(['Location', 'Register', 'Community'])) event.write({'website_track_proposal': True}) + self.assertFalse(event.website_track) + self.assertTrue(event.website_track_proposal) + self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talk Proposals'])) + + event.write({'website_track': True}) self.assertTrue(event.website_track) self.assertTrue(event.website_track_proposal) self._assert_website_menus(event, set(['Location', 'Register', 'Community', 'Talks', 'Agenda', 'Talk Proposals'])) @users('user_eventmanager') def test_write_menu(self): - event = self.env['event.event'].browse(self.event_0.id) + event = self.env['event.event'].create({ + 'name': 'TestEvent', + 'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)), + 'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)), + 'website_menu': False, + }) self.assertFalse(event.menu_id) event.write({ 'website_menu': True, diff --git a/addons/website_event_track_exhibitor/models/event_event.py b/addons/website_event_track_exhibitor/models/event_event.py index 49081272586..acb75f24152 100644 --- a/addons/website_event_track_exhibitor/models/event_event.py +++ b/addons/website_event_track_exhibitor/models/event_event.py @@ -20,7 +20,7 @@ class EventEvent(models.Model): for event in self: if event.event_type_id and event.event_type_id != event._origin.event_type_id: event.exhibitor_menu = event.event_type_id.exhibitor_menu - elif event.website_menu and event.website_menu != event._origin.website_menu or not event.exhibitor_menu: + elif event.website_menu and (event.website_menu != event._origin.website_menu or not event.exhibitor_menu): event.exhibitor_menu = True elif not event.website_menu: event.exhibitor_menu = False @@ -38,7 +38,7 @@ class EventEvent(models.Model): 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('exhibitor_menu'): + if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('exhibitor_menu')): event._update_website_menu_entry('exhibitor_menu', 'exhibitor_menu_ids', '_get_exhibitor_menu_entries') def _get_menu_type_field_matching(self): |
