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):
diff --git a/addons/website_event_track/data/event_demo.xml b/addons/website_event_track/data/event_demo.xml
index 130f6bf6fb1..e670cb16014 100644
--- a/addons/website_event_track/data/event_demo.xml
+++ b/addons/website_event_track/data/event_demo.xml
@@ -1,13 +1,11 @@
- True
- True
- True
+
+
- True
- True
- True
+
+
diff --git a/addons/website_event_track/models/event_event.py b/addons/website_event_track/models/event_event.py
index 9e5cc1b58cf..7759a0e4a5c 100644
--- a/addons/website_event_track/models/event_event.py
+++ b/addons/website_event_track/models/event_event.py
@@ -62,7 +62,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.website_track = event.event_type_id.website_track
- elif event.website_menu != event._origin.website_menu or not event.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:
event.website_track = True
@@ -74,7 +74,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.website_track_proposal = event.event_type_id.website_track_proposal
- elif event.website_track != event._origin.website_track or not event.website_track_proposal:
+ elif event.website_track != event._origin.website_track or not event.website_track or not event.website_track_proposal:
event.website_track_proposal = event.website_track
@api.depends('track_ids.tag_ids', 'track_ids.tag_ids.color')
@@ -98,9 +98,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 (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 (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):
diff --git a/addons/website_event_track/static/src/xml/customize_options.xml b/addons/website_event_track/static/src/xml/customize_options.xml
index 50f49f6b16c..b7d64bca0db 100644
--- a/addons/website_event_track/static/src/xml/customize_options.xml
+++ b/addons/website_event_track/static/src/xml/customize_options.xml
@@ -1,7 +1,7 @@
-
+