[IMP] website_event_track: clean website.visitors wishlisted tracks
This commit is the community counterpart of the enterprise commit that consolidates push tokens on website.visitors. We now don't need to keep wishlisted tracks on children records of a website.visitor and we can keep the whole wishlisted tracks list consolidated on the parent only. This allows some code cleaning and some simplification as well as a few performance improvements. Task-2429652 Part-of: odoo/odoo#65113
This commit is contained in:
@@ -22,27 +22,21 @@ class WebsiteVisitor(models.Model):
|
||||
compute="_compute_event_track_wishlisted_ids", compute_sudo=True,
|
||||
groups='event.group_event_user')
|
||||
|
||||
@api.depends('parent_id', 'event_track_visitor_ids.track_id', 'event_track_visitor_ids.is_wishlisted')
|
||||
@api.depends('event_track_visitor_ids.track_id', 'event_track_visitor_ids.is_wishlisted')
|
||||
def _compute_event_track_wishlisted_ids(self):
|
||||
# include parent's track visitors in a visitor o2m field. We don't add
|
||||
# child one as child should not have track visitors (moved to the parent)
|
||||
all_visitors = self + self.parent_id
|
||||
results = self.env['event.track.visitor'].read_group(
|
||||
[('visitor_id', 'in', all_visitors.ids), ('is_wishlisted', '=', True)],
|
||||
[('visitor_id', 'in', self.ids), ('is_wishlisted', '=', True)],
|
||||
['visitor_id', 'track_id:array_agg'],
|
||||
['visitor_id']
|
||||
)
|
||||
track_ids_map = {result['visitor_id'][0]: result['track_id'] for result in results}
|
||||
for visitor in self:
|
||||
visitor_track_ids = track_ids_map.get(visitor.id, [])
|
||||
parent_track_ids = track_ids_map.get(visitor.parent_id.id, [])
|
||||
visitor.event_track_wishlisted_ids = visitor_track_ids + [track_id for track_id in parent_track_ids if track_id not in visitor_track_ids]
|
||||
visitor.event_track_wishlisted_ids = track_ids_map.get(visitor.id, [])
|
||||
visitor.event_track_wishlisted_count = len(visitor.event_track_wishlisted_ids)
|
||||
|
||||
def _search_event_track_wishlisted_ids(self, operator, operand):
|
||||
""" Search visitors with terms on wishlisted tracks. E.g. [('event_track_wishlisted_ids',
|
||||
'in', [1, 2])] should return visitors having wishlisted tracks 1, 2 as
|
||||
well as their children for notification purpose. """
|
||||
'in', [1, 2])] should return visitors having wishlisted tracks 1, 2. """
|
||||
if operator == "not in":
|
||||
raise NotImplementedError("Unsupported 'Not In' operation on track wishlist visitors")
|
||||
|
||||
@@ -50,17 +44,8 @@ class WebsiteVisitor(models.Model):
|
||||
('track_id', operator, operand),
|
||||
('is_wishlisted', '=', True)
|
||||
])
|
||||
if track_visitors:
|
||||
visitors = track_visitors.visitor_id
|
||||
# search children, even archived one, to contact them
|
||||
children = self.env['website.visitor'].with_context(
|
||||
active_test=False
|
||||
).sudo().search([('parent_id', 'in', visitors.ids)])
|
||||
visitor_ids = (visitors + children).ids
|
||||
else:
|
||||
visitor_ids = []
|
||||
|
||||
return [('id', 'in', visitor_ids)]
|
||||
return [('id', 'in', track_visitors.visitor_id.ids)]
|
||||
|
||||
def _inactive_visitors_domain(self):
|
||||
""" Visitors registered to push subscriptions are considered always active and should not be
|
||||
|
||||
Reference in New Issue
Block a user