[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:
committed by
Thibault Delavallée
parent
eea58a3cf8
commit
c4c067509e
@@ -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
|
||||
|
||||
@@ -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">['&',
|
||||
'|', ('is_preview', '=', True), ('channel_id.member_ids', '=', user.partner_id.id),
|
||||
'|', ('is_preview', '=', True), ('channel_id.partner_ids', '=', user.partner_id.id),
|
||||
'&', ('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):
|
||||
|
||||
Reference in New Issue
Block a user