diff --git a/addons/website_sale_slides/views/website_slides_templates.xml b/addons/website_sale_slides/views/website_slides_templates.xml index c49f9a69dac..e4ff9ecddec 100644 --- a/addons/website_sale_slides/views/website_slides_templates.xml +++ b/addons/website_sale_slides/views/website_slides_templates.xml @@ -125,6 +125,23 @@ + + + Prerequisite: + + + + There are some + + prerequisite courses. + + +
diff --git a/addons/website_slides/__manifest__.py b/addons/website_slides/__manifest__.py index 99348388770..f50baa9cae4 100644 --- a/addons/website_slides/__manifest__.py +++ b/addons/website_slides/__manifest__.py @@ -95,6 +95,7 @@ Featuring 'website_slides/static/src/js/slides_course_fullscreen_player.js', 'website_slides/static/src/js/slides_course_join.js', 'website_slides/static/src/js/slides_course_enroll_email.js', + 'website_slides/static/src/js/slides_course_prerequisite.js', 'website_slides/static/src/js/slides_course_quiz.js', 'website_slides/static/src/js/slides_course_quiz_question_form.js', 'website_slides/static/src/js/slides_course_quiz_finish.js', @@ -109,6 +110,7 @@ Featuring 'website_slides/static/src/xml/website_slides_unsubscribe.xml', 'website_slides/static/src/xml/slide_management.xml', 'website_slides/static/src/xml/slide_course_join.xml', + 'website_slides/static/src/xml/slide_course_prerequisite.xml', 'website_slides/static/src/xml/slide_quiz_create.xml', 'website_slides/static/src/xml/slide_quiz.xml', ], diff --git a/addons/website_slides/data/slide_channel_demo.xml b/addons/website_slides/data/slide_channel_demo.xml index 78bf078a86e..54d5d1e5df8 100644 --- a/addons/website_slides/data/slide_channel_demo.xml +++ b/addons/website_slides/data/slide_channel_demo.xml @@ -42,6 +42,9 @@ Trees, Wood and Gardens + public documentation diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 3568c48e215..60df5748662 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -359,6 +359,16 @@ class Channel(models.Model): can_review = fields.Boolean('Can Review', compute='_compute_action_rights', compute_sudo=False) can_comment = fields.Boolean('Can Comment', compute='_compute_action_rights', compute_sudo=False) can_vote = fields.Boolean('Can Vote', compute='_compute_action_rights', compute_sudo=False) + # prerequisite settings + prerequisite_channel_ids = fields.Many2many( + 'slide.channel', 'slide_channel_prerequisite_slide_channel_rel', 'channel_id', 'prerequisite_channel_id', + string='Prerequisites', help='Prerequisite courses to complete before accessing this one.', + domain="[('id', '!=', id), ('visibility', '=', visibility), ('website_published', '=', website_published)]") + prerequisite_of_channel_ids = fields.Many2many( + 'slide.channel', 'slide_channel_prerequisite_slide_channel_rel', 'prerequisite_channel_id', 'channel_id', + string='Prerequisite Of', help='Courses that have this course as prerequisite.') + prerequisite_user_has_completed = fields.Boolean( + 'Has Completed Prerequisite', compute='_compute_prerequisite_user_has_completed') _sql_constraints = [ ( @@ -540,6 +550,22 @@ class Channel(models.Model): channel.can_comment = user_karma >= channel.karma_slide_comment channel.can_vote = user_karma >= channel.karma_slide_vote + ###################### + # Prerequisite Compute + ###################### + + @api.depends('prerequisite_channel_ids', 'channel_partner_ids.completed') + @api.depends_context('uid') + def _compute_prerequisite_user_has_completed(self): + completed_prerequisite_channels = self.env['slide.channel.partner'].sudo().search([ + ('partner_id', '=', self.env.user.partner_id.id), + ('channel_id', 'in', self.prerequisite_channel_ids.ids), + ('completed', '=', True), + ]).mapped('channel_id') + for channel in self: + channel.prerequisite_user_has_completed = all( + channel in completed_prerequisite_channels for channel in channel.prerequisite_channel_ids) + # --------------------------------------------------------- # ORM Overrides # --------------------------------------------------------- diff --git a/addons/website_slides/static/src/js/slides_course_enroll_email.js b/addons/website_slides/static/src/js/slides_course_enroll_email.js index 077cf58ec94..473fc1eda76 100644 --- a/addons/website_slides/static/src/js/slides_course_enroll_email.js +++ b/addons/website_slides/static/src/js/slides_course_enroll_email.js @@ -58,7 +58,7 @@ publicWidget.registry.websiteSlidesEnroll = publicWidget.Widget.extend({ _openDialog: function (channelId) { new SlideEnrollDialog(this, { channelId: channelId, - $element: this.$el + $element: this.$el.closest('.alert') }).open(); }, diff --git a/addons/website_slides/static/src/js/slides_course_prerequisite.js b/addons/website_slides/static/src/js/slides_course_prerequisite.js new file mode 100644 index 00000000000..85b8d8fecf9 --- /dev/null +++ b/addons/website_slides/static/src/js/slides_course_prerequisite.js @@ -0,0 +1,24 @@ +/** @odoo-module **/ + +import { qweb } from 'web.core'; +import publicWidget from 'web.public.widget'; + +publicWidget.registry.websiteSlidesCoursePrerequisite = publicWidget.Widget.extend({ + selector: '.o_wslides_js_prerequisite_course', + + async start() { + await this._super(...arguments); + const channels = this.$el.data('channels'); + this.$el.popover({ + trigger: 'focus', + placement: 'bottom', + container: 'body', + html: true, + content: qweb.render('slide.course.prerequisite', {channels: channels}), + }); + }, +}); + +export default { + websiteSlidesCoursePrerequisite: publicWidget.registry.websiteSlidesCoursePrerequisite +}; diff --git a/addons/website_slides/static/src/xml/slide_course_prerequisite.xml b/addons/website_slides/static/src/xml/slide_course_prerequisite.xml new file mode 100644 index 00000000000..6487f0827d9 --- /dev/null +++ b/addons/website_slides/static/src/xml/slide_course_prerequisite.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index ab9df39b499..b7054d3ff50 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -98,6 +98,10 @@ + + + diff --git a/addons/website_slides/views/website_slides_templates_course.xml b/addons/website_slides/views/website_slides_templates_course.xml index 772c3f18aca..65b9a97f18d 100644 --- a/addons/website_slides/views/website_slides_templates_course.xml +++ b/addons/website_slides/views/website_slides_templates_course.xml @@ -275,37 +275,6 @@