summaryrefslogtreecommitdiff
path: root/addons/website_event/models
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2020-07-31 19:36:01 +0000
committerThibault Delavallée <tde@odoo.com>2020-08-03 15:10:14 +0000
commit01f93f7a4be95fce924755afa228583f442fe28e (patch)
treedec32dce157b7d707db674cc023fea5303cdc647 /addons/website_event/models
parent47677c5f0cc1be65ce4e6beddad3c198dda7ea78 (diff)
[FIX] website_event(_track): allow event managers to unlink menus
Followup of 69d2513de21c2e80de605f77912a3687b8a79c6d : fix computation of menu fields values to be more inlined with base menu option (website_menu) + True by default when activating menus. Also force update when writing directly on a menu field to ensure coherency of website.event.menu. PR #55325 closes odoo/odoo#55340 X-original-commit: 19d028aa885d5623ae98b26ad135a1b29c89d5ee Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/website_event/models')
-rw-r--r--addons/website_event/models/event_event.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py
index b2a89b3787a..01d76489777 100644
--- a/addons/website_event/models/event_event.py
+++ b/addons/website_event/models/event_event.py
@@ -75,7 +75,7 @@ class Event(models.Model):
def write(self, vals):
menus_state_by_field = self._split_menus_state_by_field()
res = super(Event, self).write(vals)
- menus_update_by_field = self._get_menus_update_by_field(menus_state_by_field)
+ menus_update_by_field = self._get_menus_update_by_field(menus_state_by_field, force_update=vals.keys())
self._update_website_menus(menus_update_by_field=menus_update_by_field)
return res
@@ -113,20 +113,28 @@ class Event(models.Model):
}
return menus_state_by_field
- def _get_menus_update_by_field(self, menus_state_by_field):
+ def _get_menus_update_by_field(self, menus_state_by_field, force_update=None):
""" For each field linked to a menu, get the set of events requiring
this menu to be activated or de-activated based on previous recorded
value.
+ :param menus_state_by_field: see ``_split_menus_state_by_field``;
+ :param force_update: list of field to which we force update of menus. This
+ is used notably when a direct write to a stored editable field messes with
+ its pre-computed value, notably in a transient mode (aka demo for example);
+
:return dict: key = name of field triggering a website menu update, get {
'activated': subset of self having its menu toggled to True
'deactivated': subset of self having its menu toggled to False
} """
menus_update_by_field = dict()
for fname in self._get_menu_update_fields():
- menus_update_by_field[fname] = self.env['event.event']
- menus_update_by_field[fname] |= menus_state_by_field[fname]['activated'].filtered(lambda event: not event[fname])
- menus_update_by_field[fname] |= menus_state_by_field[fname]['deactivated'].filtered(lambda event: event[fname])
+ if fname in force_update:
+ menus_update_by_field[fname] = self
+ else:
+ menus_update_by_field[fname] = self.env['event.event']
+ menus_update_by_field[fname] |= menus_state_by_field[fname]['activated'].filtered(lambda event: not event[fname])
+ 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):