[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>
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="event.event_0" model="event.event">
|
||||
<field name="website_menu">True</field>
|
||||
<field name="website_track">True</field>
|
||||
<field name="website_track_proposal">True</field>
|
||||
<field name="website_track" eval="True"/>
|
||||
<field name="website_track_proposal" eval="True"/>
|
||||
</record>
|
||||
<record id="event.event_7" model="event.event">
|
||||
<field name="website_menu">True</field>
|
||||
<field name="website_track">True</field>
|
||||
<field name="website_track_proposal">True</field>
|
||||
<field name="website_track" eval="True"/>
|
||||
<field name="website_track_proposal" eval="True"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates xml:space="preserve">
|
||||
|
||||
<t t-name="website_event_track.customize_options" t-extend="website_event.customize_options">
|
||||
<t t-name="website_event.customize_options" t-extend="website_event.customize_options">
|
||||
<t t-jquery="a[name='display-website-menu']" t-operation="after">
|
||||
<a href="#" name="display-showcase-talks" class="dropdown-item" role="menuitem">
|
||||
<label class="o_switch" for="display-showcase-talks">
|
||||
|
||||
Reference in New Issue
Block a user