diff --git a/addons/website_slides/__manifest__.py b/addons/website_slides/__manifest__.py index 047c21cb97e..5373f5bd6de 100644 --- a/addons/website_slides/__manifest__.py +++ b/addons/website_slides/__manifest__.py @@ -3,7 +3,7 @@ 'name': 'eLearning', 'version': '2.0', 'sequence': 145, - 'summary': 'Create online Courses', + 'summary': 'Manage and publish an eLearning platform', 'website': 'https://www.odoo.com/page/slides', 'category': 'Website', 'description': """ @@ -28,6 +28,8 @@ Featuring 'views/assets.xml', 'views/res_config_settings_views.xml', 'views/res_partner_views.xml', + 'views/rating_rating_views.xml', + 'views/slide_question_views.xml', 'views/slide_slide_views.xml', 'views/slide_channel_partner_views.xml', 'views/slide_channel_views.xml', @@ -41,7 +43,6 @@ Featuring 'views/website_slides_templates_profile.xml', 'views/website_slides_templates_utils.xml', 'wizard/slide_channel_invite_views.xml', - 'data/ir_data.xml', 'data/gamification_data.xml', 'data/mail_data.xml', 'data/slide_data.xml', diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index df03b5410b7..ca0a8d83c72 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -835,8 +835,8 @@ class WebsiteSlides(WebsiteProfile): if slide.slide_type == 'webpage': redirect_url += "?enable_editor=1" if slide.slide_type == "quiz": - action_id = request.env.ref('website_slides.action_slides_slides').id - redirect_url = '/web#id=%s&action=%s&model=slide.slide&view_type=form' % (slide.id, action_id) + action_id = request.env.ref('website_slides.slide_slide_action').id + redirect_url = '/web#id=%s&action=%s&model=slide.slide&view_type=form' %( slide.id, action_id) return { 'url': redirect_url, 'channel_type': channel.channel_type, diff --git a/addons/website_slides/data/ir_data.xml b/addons/website_slides/data/ir_data.xml deleted file mode 100644 index 3b298c1e27d..00000000000 --- a/addons/website_slides/data/ir_data.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - Channels - self - - - - - open - - - diff --git a/addons/website_slides/models/res_config_settings.py b/addons/website_slides/models/res_config_settings.py index 9425ba89108..fa9e7508afc 100644 --- a/addons/website_slides/models/res_config_settings.py +++ b/addons/website_slides/models/res_config_settings.py @@ -8,4 +8,6 @@ class ResConfigSettings(models.TransientModel): _inherit = "res.config.settings" website_slide_google_app_key = fields.Char(related='website_id.website_slide_google_app_key', readonly=False) - module_website_sale_slides = fields.Boolean("Sell courses") + module_website_sale_slides = fields.Boolean(string="Sell courses") + module_website_slides_forum = fields.Boolean(string="Forum on Courses") + module_website_slides_survey = fields.Boolean(string="Certifications") diff --git a/addons/website_slides/models/slide_question.py b/addons/website_slides/models/slide_question.py index 9d497190434..98c51585dda 100644 --- a/addons/website_slides/models/slide_question.py +++ b/addons/website_slides/models/slide_question.py @@ -14,6 +14,10 @@ class SlideQuestion(models.Model): question = fields.Char("Question Name", required=True, translate=True) slide_id = fields.Many2one('slide.slide', string="Slide", required=True) answer_ids = fields.One2many('slide.answer', 'question_id', string="Answer") + # statistics + attempts_count = fields.Integer(compute='_compute_statistics', groups='website.group_website_publisher') + attempts_avg = fields.Float(compute="_compute_statistics", digits=(6, 2), groups='website.group_website_publisher') + done_count = fields.Integer(compute="_compute_statistics", groups='website.group_website_publisher') @api.constrains('answer_ids') def _check_only_one_good_answer(self): @@ -37,6 +41,23 @@ class SlideQuestion(models.Model): if len(question.answer_ids) < 2: raise ValidationError(_("A question must at least have two possible answers")) + @api.depends('slide_id') + def _compute_statistics(self): + slide_partners = self.env['slide.slide.partner'].sudo().search([('slide_id', 'in', self.slide_id.ids)]) + slide_stats = dict((s.slide_id.id, dict({'attempts_count': 0, 'attempts_unique': 0, 'done_count': 0})) for s in slide_partners) + + for slide_partner in slide_partners: + slide_stats[slide_partner.slide_id.id]['attempts_count'] += slide_partner.quiz_attempts_count + slide_stats[slide_partner.slide_id.id]['attempts_unique'] += 1 + if slide_partner.completed: + slide_stats[slide_partner.slide_id.id]['done_count'] += 1 + + for question in self: + stats = slide_stats.get(question.slide_id.id) + question.attempts_count = stats.get('attempts_count', 0) if stats else 0 + question.attempts_avg = stats.get('attempts_count', 0) / stats.get('attempts_unique', 1) if stats else 0 + question.done_count = stats.get('done_count', 0) if stats else 0 + class SlideAnswer(models.Model): _name = "slide.answer" diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index 6cb8083536d..2cc0e839616 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -116,12 +116,11 @@ class Slide(models.Model): 'slide.slide.partner', string="Subscriber information", compute='_compute_user_membership_id', help="Subscriber information for the current logged in user") # Quiz related fields - question_ids = fields.One2many("slide.question","slide_id", string="Questions") + question_ids = fields.One2many("slide.question", "slide_id", string="Questions") quiz_first_attempt_reward = fields.Integer("First attempt reward", default=10) quiz_second_attempt_reward = fields.Integer("Second attempt reward", default=7) quiz_third_attempt_reward = fields.Integer("Third attempt reward", default=5,) quiz_fourth_attempt_reward = fields.Integer("Reward for every attempt after the third try", default=2) - # content slide_type = fields.Selection([ ('infographic', 'Infographic'), diff --git a/addons/website_slides/views/rating_rating_views.xml b/addons/website_slides/views/rating_rating_views.xml new file mode 100644 index 00000000000..b3128c56460 --- /dev/null +++ b/addons/website_slides/views/rating_rating_views.xml @@ -0,0 +1,60 @@ + + + + rating.rating.view.search.slides + rating.rating + 20 + + primary + + + + + + + + + + + + + rating.rating.graph + rating.rating + 20 + + + + + + + + + + Courses Rating + rating.rating + kanban,tree,graph,pivot,form + [('consumed', '=', True), ('res_model', '=', 'slide.channel')] + {'search_default_groupby_course': 1} + + +

+ There is no rating for those courses at the moment +

+
+
+ + + Courses Rating + rating.rating + graph,tree + [('consumed', '=', True), ('res_model', '=', 'slide.channel')] + {} + + + +

+ There is no rating for those courses at the moment +

+
+
+
diff --git a/addons/website_slides/views/res_config_settings_views.xml b/addons/website_slides/views/res_config_settings_views.xml index cc53296289c..6925fbc33b5 100644 --- a/addons/website_slides/views/res_config_settings_views.xml +++ b/addons/website_slides/views/res_config_settings_views.xml @@ -5,7 +5,7 @@ res.config.settings -
+
Slides @@ -26,19 +26,58 @@
-
-
-
- -
-
-