summaryrefslogtreecommitdiff
path: root/addons/website_event_track_quiz/models/event_track.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website_event_track_quiz/models/event_track.py')
-rw-r--r--addons/website_event_track_quiz/models/event_track.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/addons/website_event_track_quiz/models/event_track.py b/addons/website_event_track_quiz/models/event_track.py
new file mode 100644
index 00000000..3011b98a
--- /dev/null
+++ b/addons/website_event_track_quiz/models/event_track.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+from odoo.osv import expression
+
+
+class EventTrack(models.Model):
+ _inherit = ['event.track']
+
+ quiz_id = fields.Many2one('event.quiz', string="Quiz", groups="event.group_event_user")
+ quiz_questions_count = fields.Integer(string="# Quiz Questions", compute='_compute_quiz_questions_count', groups="event.group_event_user")
+ is_quiz_completed = fields.Boolean('Is Quiz Done', compute='_compute_quiz_data')
+ quiz_points = fields.Integer('Quiz Points', compute='_compute_quiz_data')
+
+ @api.depends('quiz_id.question_ids')
+ def _compute_quiz_questions_count(self):
+ for track in self:
+ track.quiz_questions_count = len(track.quiz_id.question_ids)
+
+ @api.depends('quiz_id', 'event_track_visitor_ids.visitor_id',
+ 'event_track_visitor_ids.partner_id', 'event_track_visitor_ids.quiz_completed',
+ 'event_track_visitor_ids.quiz_points')
+ @api.depends_context('uid')
+ def _compute_quiz_data(self):
+ tracks_quiz = self.filtered(lambda track: track.quiz_id)
+ (self - tracks_quiz).is_quiz_completed = False
+ (self - tracks_quiz).quiz_points = 0
+ if tracks_quiz:
+ current_visitor = self.env['website.visitor']._get_visitor_from_request(force_create=False)
+ if self.env.user._is_public() and not current_visitor:
+ for track in tracks_quiz:
+ track.is_quiz_completed = False
+ track.quiz_points = 0
+ else:
+ if self.env.user._is_public():
+ domain = [('visitor_id', '=', current_visitor.id)]
+ elif current_visitor:
+ domain = [
+ '|',
+ ('partner_id', '=', self.env.user.partner_id.id),
+ ('visitor_id', '=', current_visitor.id)
+ ]
+ else:
+ domain = [('partner_id', '=', self.env.user.partner_id.id)]
+
+ event_track_visitors = self.env['event.track.visitor'].sudo().search_read(
+ expression.AND([
+ domain,
+ [('track_id', 'in', tracks_quiz.ids)]
+ ]), fields=['track_id', 'quiz_completed', 'quiz_points']
+ )
+
+ quiz_visitor_map = {
+ track_visitor['track_id'][0]: {
+ 'quiz_completed': track_visitor['quiz_completed'],
+ 'quiz_points': track_visitor['quiz_points']
+ } for track_visitor in event_track_visitors
+ }
+ for track in tracks_quiz:
+ if quiz_visitor_map.get(track.id):
+ track.is_quiz_completed = quiz_visitor_map[track.id]['quiz_completed']
+ track.quiz_points = quiz_visitor_map[track.id]['quiz_points']
+ else:
+ track.is_quiz_completed = False
+ track.quiz_points = 0