[IMP] website_slides: clean partner_all_ids field
Follow up of odoo/odoo#139104 After fixing the performance of ir rules, previously using partner_all_ids on slide.channel, that field is not used anymore except for tests. Adapt tests and remove it as well as its search method. Also adapt a search domain to use is_member field. UPG PR: odoo/upgrade#5218 Task-3444633 Part-of: odoo/odoo#130030
This commit is contained in:
committed by
Thibault Delavallée
parent
cd0d313a3d
commit
f2a2881e65
@@ -412,14 +412,11 @@ class Channel(models.Model):
|
||||
compute='_compute_members_counts')
|
||||
members_completed_count = fields.Integer('# Completed Attendees', compute='_compute_members_counts')
|
||||
members_invited_count = fields.Integer('# Invited Attendees', compute='_compute_members_counts')
|
||||
# partner_ids and partner_all_ids implemented as compute/search instead of specifying the relation table
|
||||
# directly, this is done because we want to exclude active=False records on the joining table
|
||||
# partner_ids is implemented as compute/search instead of specifying the relation table
|
||||
# directly because we want to exclude active=False records on the joining table
|
||||
partner_ids = fields.Many2many(
|
||||
'res.partner', string='Attendees', help="Enrolled partners in the course",
|
||||
compute="_compute_partners", search="_search_partner_ids")
|
||||
partner_all_ids = fields.Many2many(
|
||||
'res.partner', string='All Attendees', help="Partners in the course (both enrolled and invited)",
|
||||
compute="_compute_partners", search="_search_partner_all_ids")
|
||||
# not stored access fields, depending on each user
|
||||
completed = fields.Boolean('Done', compute='_compute_user_statistics', compute_sudo=False)
|
||||
completion = fields.Integer('Completion', compute='_compute_user_statistics', compute_sudo=False)
|
||||
@@ -468,18 +465,15 @@ class Channel(models.Model):
|
||||
@api.depends('channel_partner_all_ids', 'channel_partner_all_ids.member_status', 'channel_partner_all_ids.active')
|
||||
def _compute_partners(self):
|
||||
data = {
|
||||
(slide_channel, member_status): partner_ids
|
||||
for slide_channel, member_status, partner_ids in self.env['slide.channel.partner'].sudo()._read_group(
|
||||
[('channel_id', 'in', self.ids)],
|
||||
['channel_id', 'member_status'],
|
||||
slide_channel: partner_ids
|
||||
for slide_channel, partner_ids in self.env['slide.channel.partner'].sudo()._read_group(
|
||||
[('channel_id', 'in', self.ids), ('member_status', '!=', 'invited')],
|
||||
['channel_id'],
|
||||
aggregates=['partner_id:array_agg']
|
||||
)
|
||||
}
|
||||
|
||||
for slide_channel in self:
|
||||
partner_ids = data.get((slide_channel, 'joined'), []) + data.get((slide_channel, 'ongoing'), []) + data.get((slide_channel, 'completed'), [])
|
||||
slide_channel.partner_ids = partner_ids
|
||||
slide_channel.partner_all_ids = partner_ids + data.get((slide_channel, 'invited'), [])
|
||||
slide_channel.partner_ids = data.get(slide_channel, [])
|
||||
|
||||
def _search_partner_ids(self, operator, value):
|
||||
if isinstance(value, int) and operator == 'in':
|
||||
@@ -492,16 +486,6 @@ class Channel(models.Model):
|
||||
)
|
||||
)]
|
||||
|
||||
def _search_partner_all_ids(self, operator, value):
|
||||
if isinstance(value, int) and operator == 'in':
|
||||
value = [value]
|
||||
return [(
|
||||
'channel_partner_all_ids', '=', self.env['slide.channel.partner']._search(
|
||||
[('partner_id', operator, value),
|
||||
('active', '=', True)],
|
||||
)
|
||||
)]
|
||||
|
||||
@api.depends('slide_ids.is_published')
|
||||
def _compute_slide_last_update(self):
|
||||
for record in self:
|
||||
@@ -1244,7 +1228,7 @@ class Channel(models.Model):
|
||||
slide_category = options.get('slide_category')
|
||||
domain = [website.website_domain()]
|
||||
if my:
|
||||
domain.append([('partner_ids', '=', self.env.user.partner_id.id)])
|
||||
domain.append([('is_member', '=', True)])
|
||||
if search_tags:
|
||||
ChannelTag = self.env['slide.channel.tag']
|
||||
try:
|
||||
|
||||
@@ -169,7 +169,7 @@ class TestAttendee(common.SlidesCase):
|
||||
'member_status': 'invited'
|
||||
})
|
||||
|
||||
self.assertTrue(user_portal_partner.id in self.channel.partner_all_ids.ids)
|
||||
self.assertTrue(user_portal_partner in self.channel.channel_partner_all_ids.partner_id)
|
||||
self.assertFalse(user_portal_partner.id in self.channel.partner_ids.ids)
|
||||
# Invited partner can join the course and enroll itself. Sudo is used in controller if invited.
|
||||
self.assertTrue(self.channel.with_user(self.user_portal).is_member_invited)
|
||||
@@ -192,7 +192,7 @@ class TestAttendee(common.SlidesCase):
|
||||
|
||||
@users('user_officer')
|
||||
def test_partners_and_search_on_slide_channel(self):
|
||||
''' Check that partner_ids contains enrolled partners and partner_all_ids contains both invited and enrolled partners'''
|
||||
''' Check that partner_ids contains (only) active enrolled partners '''
|
||||
invited_cp, joined_cp = self.env['slide.channel.partner'].create([{
|
||||
'channel_id': self.channel.id,
|
||||
'partner_id': self.user_portal.partner_id.id,
|
||||
@@ -209,21 +209,25 @@ class TestAttendee(common.SlidesCase):
|
||||
joined_cp_channel_ids = self.env['slide.channel'].search([('partner_ids', '=', joined_cp.partner_id.id)])
|
||||
self.assertTrue(self.channel in joined_cp_channel_ids)
|
||||
|
||||
# Search partner_all_ids on model
|
||||
invited_cp_channel_ids = self.env['slide.channel'].search([('partner_all_ids', '=', invited_cp.partner_id.id)])
|
||||
self.assertTrue(self.channel in invited_cp_channel_ids)
|
||||
joined_cp_channel_ids = self.env['slide.channel'].search([('partner_all_ids', '=', joined_cp.partner_id.id)])
|
||||
self.assertTrue(self.channel in joined_cp_channel_ids)
|
||||
|
||||
# partner_ids should only contain enrolled channel partners
|
||||
partner_ids = self.channel.partner_ids
|
||||
self.assertFalse(invited_cp.partner_id in partner_ids)
|
||||
self.assertTrue(joined_cp.partner_id in partner_ids)
|
||||
|
||||
# partner_all_ids also contains invited channel partners.
|
||||
partner_all_ids = self.channel.partner_all_ids
|
||||
self.assertTrue(joined_cp.partner_id in partner_all_ids)
|
||||
self.assertTrue(invited_cp.partner_id in partner_all_ids)
|
||||
partner_ids = self.channel.partner_ids
|
||||
self.assertFalse(invited_cp.partner_id in partner_ids)
|
||||
self.assertTrue(joined_cp.partner_id in partner_ids)
|
||||
|
||||
invited_cp.action_archive()
|
||||
joined_cp.action_archive()
|
||||
|
||||
partner_ids = self.channel.partner_ids
|
||||
self.assertFalse(invited_cp.partner_id in partner_ids)
|
||||
self.assertFalse(joined_cp.partner_id in partner_ids)
|
||||
|
||||
invited_cp_channel_ids = self.env['slide.channel'].search([('partner_ids', '=', invited_cp.partner_id.id)])
|
||||
self.assertFalse(self.channel in invited_cp_channel_ids)
|
||||
joined_cp_channel_ids = self.env['slide.channel'].search([('partner_ids', '=', joined_cp.partner_id.id)])
|
||||
self.assertFalse(self.channel in joined_cp_channel_ids)
|
||||
|
||||
def test_copy_partner_not_course_member(self):
|
||||
""" To check members of the channel after duplication of contact """
|
||||
|
||||
Reference in New Issue
Block a user