summaryrefslogtreecommitdiff
path: root/addons/website_slides/models/slide_question.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website_slides/models/slide_question.py')
-rw-r--r--addons/website_slides/models/slide_question.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/addons/website_slides/models/slide_question.py b/addons/website_slides/models/slide_question.py
new file mode 100644
index 00000000000..0193558ba46
--- /dev/null
+++ b/addons/website_slides/models/slide_question.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+
+
+class SlideQuestion(models.Model):
+ _name = "slide.question"
+ _rec_name = "question"
+ _description = """
+ Question for a slide. A slide can have multiple questions and each question
+ must have at least 2 possible answers and only one good answer.
+ """
+
+ sequence = fields.Integer("Sequence", default=10)
+ question = fields.Char("Question Name", required=True)
+ slide_id = fields.Many2one('slide.slide', string="Slide")
+ answer_ids = fields.One2many('slide.answer', 'question_id', string="Answer")
+
+ @api.constrains('answer_ids')
+ def _check_only_one_good_answer(self):
+ for question in self:
+ good_answer_count = 0
+ for answer in question.answer_ids:
+ if answer.is_correct:
+ good_answer_count += 1
+ if good_answer_count > 1:
+ raise ValidationError(_('A question can only have one good answer'))
+
+ @api.constrains('answer_ids')
+ def _check_correct_answer(self):
+ for question in self:
+ if not any([answer.is_correct for answer in question.answer_ids]):
+ raise ValidationError(_("A question must at least have one good answer"))
+
+ @api.constrains('answer_ids')
+ def _check_at_least_2_answers(self):
+ for question in self:
+ if len(question.answer_ids) < 2:
+ raise ValidationError(_("A question must at least have two possible answers"))
+
+
+class SlideAnswer(models.Model):
+ _name = "slide.answer"
+ _rec_name = "text_value"
+ _description = """Answer for a slide question"""
+
+ question_id = fields.Many2one('slide.question', string="Question")
+ text_value = fields.Char("Answer", required=True,)
+ is_correct = fields.Boolean("Is correct answer", default=False)