diff options
| author | Aurélien Warnon <awa@odoo.com> | 2019-02-08 10:53:41 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2019-02-08 11:33:09 +0000 |
| commit | c4c067509e1d6802943ca99d5e5806da5f38438e (patch) | |
| tree | 8d70e0191883206bcca4475398fbc2425fc73e38 | |
| parent | eea58a3cf85b08e58c8b2f755fca933af171d1f7 (diff) | |
[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.
| -rw-r--r-- | addons/website_slides/controllers/main.py | 2 | ||||
| -rw-r--r-- | addons/website_slides/models/slide_channel.py | 28 | ||||
| -rw-r--r-- | addons/website_slides/security/website_slides_security.xml | 2 | ||||
| -rw-r--r-- | addons/website_slides/tests/test_security.py | 10 |
4 files changed, 7 insertions, 35 deletions
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index daa3dc4ba32..31502c33e5a 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -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 diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 43dffcf31eb..64bd38a1b16 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -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) diff --git a/addons/website_slides/security/website_slides_security.xml b/addons/website_slides/security/website_slides_security.xml index a3e00c1f7de..d3b54d240a1 100644 --- a/addons/website_slides/security/website_slides_security.xml +++ b/addons/website_slides/security/website_slides_security.xml @@ -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> diff --git a/addons/website_slides/tests/test_security.py b/addons/website_slides/tests/test_security.py index c73af1d932a..449dd7fca32 100644 --- a/addons/website_slides/tests/test_security.py +++ b/addons/website_slides/tests/test_security.py @@ -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): |
