[REM] website_slides: remove the 'state' field of slide.channel.partner

Purpose
=======

The 'state' field for a member of a channel did not imply anything functionally
so we decided to remove it. It allows to remove an unnecessary computed fields.
ACLs are updated accordingly.

If needed, we will soon be able to check partner_ids that have ordered but
not paid a channel / course product by searching the related 'sale.order' model
for such products.
This commit is contained in:
Aurélien Warnon
2019-02-08 11:33:09 +00:00
committed by Thibault Delavallée
parent eea58a3cf8
commit c4c067509e
4 changed files with 7 additions and 35 deletions
+1 -1
View File
@@ -259,7 +259,7 @@ class WebsiteSlides(http.Controller):
def slide_channel_join(self, channel_id):
if request.website.is_public_user():
return {'error': 'public_user'}
joined = request.env['slide.channel'].browse(channel_id).action_add_member(state='confirmed')
joined = request.env['slide.channel'].browse(channel_id).action_add_member()
if not joined:
return {'error': 'join_done'}
return joined.ids
+5 -23
View File
@@ -14,10 +14,6 @@ class ChannelUsersRelation(models.Model):
_table = 'slide_channel_partner'
channel_id = fields.Many2one('slide.channel', index=True, required=True)
state = fields.Selection([
('draft', 'Waiting confirmation'),
('confirmed', 'Confirmed'),
('canceled', 'Canceled')], default='draft', string='Member status')
partner_id = fields.Many2one('res.partner', index=True, required=True)
@@ -74,14 +70,10 @@ class Channel(models.Model):
('public', 'Public'),
('invite', 'Invite')],
default='public', required=True)
# members and access
partner_ids = fields.Many2many(
'res.partner', 'slide_channel_partner', 'channel_id', 'partner_id',
string='Members', help="All participants to the channel whatever their state.")
member_ids = fields.One2many(
comodel_name='res.partner', compute='_compute_member_ids', search='_search_member_ids',
string='Confirmed Members')
is_member = fields.Boolean(string='Is Member', compute='_compute_member_ids')
string='Members', help="All members of the channel.")
is_member = fields.Boolean(string='Is Member', compute='_compute_is_member')
channel_partner_ids = fields.One2many('slide.channel.partner', 'channel_id', string='Members Information', groups='base.group_system')
enroll_msg = fields.Html(
'Enroll Message', help="Message explaining the enroll process",
@@ -107,11 +99,10 @@ class Channel(models.Model):
limit=1, order=self._order_by_strategy[record.promote_strategy])
record.promoted_slide_id = slides and slides[0] or False
@api.depends('channel_partner_ids.partner_id', 'channel_partner_ids.state')
@api.depends('channel_partner_ids.partner_id')
@api.model
def _compute_member_ids(self):
def _compute_is_member(self):
channel_partners = self.env['slide.channel.partner'].sudo().search([
('state', '=', 'confirmed'),
('channel_id', 'in', self.ids),
])
result = dict()
@@ -121,14 +112,6 @@ class Channel(models.Model):
channel.valid_channel_partner_ids = result.get(channel.id, False)
channel.is_member = self.env.user.partner_id.id in channel.valid_channel_partner_ids if channel.valid_channel_partner_ids else False
@api.model
def _search_member_ids(self, operator, operand):
assert operator != "not in", "Do not search with 'not in'"
members = self.env['slide.channel.partner'].sudo().search([
('state', '=', 'confirmed'),
('partner_id', operator, operand)])
return [('id', 'in', [m.channel_id.id for m in members])]
@api.depends('slide_ids.slide_type', 'slide_ids.website_published')
def _count_presentations(self):
result = dict.fromkeys(self.ids, dict())
@@ -191,8 +174,7 @@ class Channel(models.Model):
# Ensure creator is member of its channel it is easier for him to manage it
if vals.get('visibility') == 'invite' and not vals.get('channel_partner_ids'):
vals['channel_partner_ids'] = [(0, 0, {
'partner_id': self.env.user.partner_id.id,
'state': 'confirmed',
'partner_id': self.env.user.partner_id.id
})]
return super(Channel, self.with_context(mail_create_nosubscribe=True)).create(vals)
@@ -38,7 +38,7 @@
<field name="model_id" ref="model_slide_slide"/>
<field name="groups" eval="[(4, ref('base.group_public')), (4, ref('base.group_portal')), (4, ref('base.group_user'))]"/>
<field name="domain_force">['&amp;',
'|', ('is_preview', '=', True), ('channel_id.member_ids', '=', user.partner_id.id),
'|', ('is_preview', '=', True), ('channel_id.partner_ids', '=', user.partner_id.id),
'&amp;', ('channel_id.website_published', '=', True), ('website_published', '=', True)]</field>
</record>
@@ -33,20 +33,11 @@ class TestAccess(common.SlidesCase):
# if member -> can read
membership = self.env['slide.channel.partner'].create({
'channel_id': self.channel.id,
'state': 'confirmed',
'partner_id': self.user_emp.partner_id.id,
})
self.channel.sudo(self.user_emp).read(['name'])
self.slide.sudo(self.user_emp).read(['name'])
# unvalidated member -> cannot read
membership.write({
'state': 'draft',
})
self.channel.sudo(self.user_emp).read(['name'])
with self.assertRaises(AccessError):
self.slide.sudo(self.user_emp).read(['name'])
# not member anymore -> cannot read
membership.unlink()
self.channel.sudo(self.user_emp).read(['name'])
@@ -98,7 +89,6 @@ class TestAccess(common.SlidesCase):
# even members cannot see unpublished content
self.env['slide.channel.partner'].create({
'channel_id': self.channel.id,
'state': 'confirmed',
'partner_id': self.user_emp.partner_id.id,
})
with self.assertRaises(AccessError):