diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 5006320f52a..fc9af7d1812 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -105,7 +105,7 @@ class Channel(models.Model): 'slide.channel.tag', 'slide_channel_tag_rel', 'channel_id', 'tag_id', string='Tags', help='Used to categorize and filter displayed channels/courses') # slides: promote, statistics - slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides and categories") + slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides and categories", context={'active_test': False}) slide_content_ids = fields.One2many('slide.slide', string='Slides', compute="_compute_category_and_slide_ids") slide_category_ids = fields.One2many('slide.slide', string='Categories', compute="_compute_category_and_slide_ids") slide_last_update = fields.Date('Last Update', compute='_compute_slide_last_update', store=True) @@ -428,6 +428,7 @@ class Channel(models.Model): to_activate = self.filtered(lambda channel: not channel.active) res = super(Channel, self).toggle_active() if to_archive: + to_archive.is_published = False to_archive.mapped('slide_ids').action_archive() if to_activate: to_activate.with_context(active_test=False).mapped('slide_ids').action_unarchive() diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index 5c4596db921..13d65b6ad7e 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -466,6 +466,14 @@ class Slide(models.Model): category.channel_id._move_category_slides(category, False) super(Slide, self).unlink() + def toggle_active(self): + # archiving/unarchiving a channel does it on its slides, too + to_archive = self.filtered(lambda slide: slide.active) + res = super(Slide, self).toggle_active() + if to_archive: + to_archive.filtered(lambda slide: not slide.is_category).is_published = False + return res + # --------------------------------------------------------- # Mail/Rating # --------------------------------------------------------- diff --git a/addons/website_slides/tests/test_slide_utils.py b/addons/website_slides/tests/test_slide_utils.py index b4e58b0bbfd..6510b26cbd0 100644 --- a/addons/website_slides/tests/test_slide_utils.py +++ b/addons/website_slides/tests/test_slide_utils.py @@ -23,6 +23,24 @@ class TestSlidesManagement(slides_common.SlidesCase): self.assertEqual(categorized_slides[2]['total_slides'], 0) self.assertEqual(categorized_slides[2]['category'], new_category) + @users('user_manager') + def test_archive(self): + self.assertTrue(self.channel.active) + self.assertTrue(self.channel.is_published) + for slide in self.channel.slide_ids: + self.assertTrue(slide.active, "All slide should be archived when a channel is archived") + self.assertTrue(slide.is_published, "All slide should be unpublished when a channel is archived") + + self.channel.toggle_active() + self.assertFalse(self.channel.active) + self.assertFalse(self.channel.is_published) + + for slide in self.channel.slide_ids: + self.assertFalse(slide.active, "All slides should be archived when a channel is archived") + if not slide.is_category: + self.assertFalse(slide.is_published, "All slides should be unpublished when a channel is archived, except categories") + else: + self.assertTrue(slide.is_published, "All slides should be unpublished when a channel is archived, except categories") class TestSequencing(slides_common.SlidesCase):