Please fill information about you: who you are, what are your education, experience, and activities.
diff --git a/addons/survey/models/survey_question.py b/addons/survey/models/survey_question.py
index 6b368527170..0d74c108285 100644
--- a/addons/survey/models/survey_question.py
+++ b/addons/survey/models/survey_question.py
@@ -45,13 +45,6 @@ class SurveyQuestion(models.Model):
_rec_name = 'title'
_order = 'sequence,id'
- @api.model
- def default_get(self, fields):
- defaults = super(SurveyQuestion, self).default_get(fields)
- if (not fields or 'question_type' in fields):
- defaults['question_type'] = False if defaults.get('is_page') else 'simple_choice'
- return defaults
-
# question generic data
title = fields.Char('Title', required=True, translate=True)
description = fields.Html(
@@ -169,6 +162,20 @@ class SurveyQuestion(models.Model):
'All "Is a scored question = True" and "Question Type: Date" questions need an answer')
]
+ # -------------------------------------------------------------------------
+ # CONSTRAINT METHODS
+ # -------------------------------------------------------------------------
+
+ @api.constrains("is_page")
+ def _check_question_type_for_pages(self):
+ invalid_pages = self.filtered(lambda question: question.is_page and question.question_type)
+ if invalid_pages:
+ raise ValidationError(_("Question type should be empty for these pages: %s", ', '.join(invalid_pages.mapped('title'))))
+
+ # -------------------------------------------------------------------------
+ # COMPUTE METHODS
+ # -------------------------------------------------------------------------
+
@api.depends('question_type')
def _compute_question_placeholder(self):
for question in self:
@@ -206,9 +213,9 @@ class SurveyQuestion(models.Model):
@api.depends('is_page')
def _compute_question_type(self):
- for question in self:
- if not question.question_type or question.is_page:
- question.question_type = False
+ pages = self.filtered(lambda question: question.is_page)
+ pages.question_type = False
+ (self - pages).filtered(lambda question: not question.question_type).question_type = 'simple_choice'
@api.depends('survey_id.question_and_page_ids.is_page', 'survey_id.question_and_page_ids.sequence')
def _compute_question_ids(self):
diff --git a/addons/survey/tests/common.py b/addons/survey/tests/common.py
index 01db7d8843e..67687d5d336 100644
--- a/addons/survey/tests/common.py
+++ b/addons/survey/tests/common.py
@@ -300,6 +300,7 @@ class TestSurveyCommon(SurveyCase):
'survey_id': self.survey.id,
'sequence': 1,
'is_page': True,
+ 'question_type': False,
})
self.question_ft = self.env['survey.question'].with_user(self.survey_manager).create({
'title': 'Test Free Text',
diff --git a/addons/survey/tests/test_survey_compute_pages_questions.py b/addons/survey/tests/test_survey_compute_pages_questions.py
index 335683d445f..7ddb3a38f7e 100644
--- a/addons/survey/tests/test_survey_compute_pages_questions.py
+++ b/addons/survey/tests/test_survey_compute_pages_questions.py
@@ -13,6 +13,7 @@ class TestSurveyComputePagesQuestions(common.TestSurveyCommon):
page_0 = self.env['survey.question'].create({
'is_page': True,
+ 'question_type': False,
'sequence': 1,
'title': 'P1',
'survey_id': survey.id
@@ -25,6 +26,7 @@ class TestSurveyComputePagesQuestions(common.TestSurveyCommon):
page_1 = self.env['survey.question'].create({
'is_page': True,
+ 'question_type': False,
'sequence': 7,
'title': 'P2',
'survey_id': survey.id,
diff --git a/addons/survey/tests/test_survey_flow.py b/addons/survey/tests/test_survey_flow.py
index d09f0d74e15..d13c2187fe9 100644
--- a/addons/survey/tests/test_survey_flow.py
+++ b/addons/survey/tests/test_survey_flow.py
@@ -31,6 +31,7 @@ class TestSurveyFlow(common.TestSurveyCommon, HttpCase):
# First page is about customer data
page_0 = self.env['survey.question'].create({
'is_page': True,
+ 'question_type': False,
'sequence': 1,
'title': 'Page1: Your Data',
'survey_id': survey.id,
@@ -47,6 +48,7 @@ class TestSurveyFlow(common.TestSurveyCommon, HttpCase):
# Second page is about tarte al djotte
page_1 = self.env['survey.question'].create({
'is_page': True,
+ 'question_type': False,
'sequence': 4,
'title': 'Page2: Tarte Al Djotte',
'survey_id': survey.id,
diff --git a/addons/survey/tests/test_survey_flow_with_conditions.py b/addons/survey/tests/test_survey_flow_with_conditions.py
index 494e064e84d..374a80c5693 100644
--- a/addons/survey/tests/test_survey_flow_with_conditions.py
+++ b/addons/survey/tests/test_survey_flow_with_conditions.py
@@ -23,6 +23,7 @@ class TestSurveyFlowWithConditions(common.TestSurveyCommon, HttpCase):
'survey_id': survey.id,
'sequence': 1,
'is_page': True,
+ 'question_type': False,
})
q01 = self._add_question(
diff --git a/addons/survey/tests/test_survey_invite.py b/addons/survey/tests/test_survey_invite.py
index 0208a8a5b0b..6f71b2b29e1 100644
--- a/addons/survey/tests/test_survey_invite.py
+++ b/addons/survey/tests/test_survey_invite.py
@@ -30,13 +30,13 @@ class TestSurveyInvite(common.TestSurveyCommon):
# no page
self.env['survey.survey'].create({'title': 'Test survey'}),
# no questions
- self.env['survey.survey'].create({'title': 'Test survey', 'question_and_page_ids': [(0, 0, {'is_page': True, 'title': 'P0', 'sequence': 1})]}),
+ self.env['survey.survey'].create({'title': 'Test survey', 'question_and_page_ids': [(0, 0, {'is_page': True, 'question_type': False, 'title': 'P0', 'sequence': 1})]}),
# closed
self.env['survey.survey'].with_user(self.survey_manager).create({
'title': 'S0',
'active': False,
'question_and_page_ids': [
- (0, 0, {'is_page': True, 'title': 'P0', 'sequence': 1}),
+ (0, 0, {'is_page': True, 'question_type': False, 'title': 'P0', 'sequence': 1}),
(0, 0, {'title': 'Q0', 'sequence': 2, 'question_type': 'text_box'})
]
})
diff --git a/addons/survey/tests/test_survey_randomize.py b/addons/survey/tests/test_survey_randomize.py
index fa926b1895c..0af3fde45dc 100644
--- a/addons/survey/tests/test_survey_randomize.py
+++ b/addons/survey/tests/test_survey_randomize.py
@@ -12,6 +12,7 @@ class TestSurveyRandomize(TransactionCase):
page_1 = Question.create({
'title': 'Page 1',
'is_page': True,
+ 'question_type': False,
'sequence': 1,
'random_questions_count': 3
})
@@ -21,6 +22,7 @@ class TestSurveyRandomize(TransactionCase):
page_2 = Question.create({
'title': 'Page 2',
'is_page': True,
+ 'question_type': False,
'sequence': 100,
'random_questions_count': 5
})
@@ -30,6 +32,7 @@ class TestSurveyRandomize(TransactionCase):
page_3 = Question.create({
'title': 'Page 2',
'is_page': True,
+ 'question_type': False,
'sequence': 1000,
'random_questions_count': 4
})
diff --git a/addons/survey/tests/test_survey_security.py b/addons/survey/tests/test_survey_security.py
index 0696d15810e..517d4f43501 100644
--- a/addons/survey/tests/test_survey_security.py
+++ b/addons/survey/tests/test_survey_security.py
@@ -27,7 +27,7 @@ class TestAccess(common.TestSurveyCommon):
with self.assertRaises(AccessError):
self.env['survey.survey'].create({'title': 'Test Survey 2'})
with self.assertRaises(AccessError):
- self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'survey_id': self.survey.id})
+ self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': self.survey.id})
with self.assertRaises(AccessError):
self.env['survey.question'].create({'title': 'My Question', 'sequence': 1, 'page_id': self.page_0.id})
@@ -60,7 +60,7 @@ class TestAccess(common.TestSurveyCommon):
with self.assertRaises(AccessError):
self.env['survey.survey'].create({'title': 'Test Survey 2'})
with self.assertRaises(AccessError):
- self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'survey_id': self.survey.id})
+ self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': self.survey.id})
with self.assertRaises(AccessError):
self.env['survey.question'].create({'title': 'My Question', 'sequence': 1, 'page_id': self.page_0.id})
@@ -93,7 +93,7 @@ class TestAccess(common.TestSurveyCommon):
with self.assertRaises(AccessError):
self.env['survey.survey'].create({'title': 'Test Survey 2'})
with self.assertRaises(AccessError):
- self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'survey_id': self.survey.id})
+ self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': self.survey.id})
with self.assertRaises(AccessError):
self.env['survey.question'].create({'title': 'My Question', 'sequence': 1, 'page_id': self.page_0.id})
@@ -123,7 +123,7 @@ class TestAccess(common.TestSurveyCommon):
def test_access_survey_survey_manager(self):
# Create: all
survey = self.env['survey.survey'].create({'title': 'Test Survey 2'})
- self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'survey_id': survey.id})
+ self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': survey.id})
self.env['survey.question'].create({'title': 'My Question', 'sequence': 1, 'survey_id': survey.id})
# Read: all
@@ -142,7 +142,7 @@ class TestAccess(common.TestSurveyCommon):
def test_access_survey_survey_user(self):
# Create: own only
survey = self.env['survey.survey'].create({'title': 'Test Survey 2'})
- self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'survey_id': survey.id})
+ self.env['survey.question'].create({'title': 'My Page', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': survey.id})
self.env['survey.question'].create({'title': 'My Question', 'sequence': 1, 'survey_id': survey.id})
# Read: all
@@ -251,7 +251,7 @@ class TestAccess(common.TestSurveyCommon):
@users('survey_user')
def test_access_answers_survey_user(self):
survey_own = self.env['survey.survey'].create({'title': 'Other'})
- self.env['survey.question'].create({'title': 'Other', 'sequence': 0, 'is_page': True, 'survey_id': survey_own.id})
+ self.env['survey.question'].create({'title': 'Other', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': survey_own.id})
question_own = self.env['survey.question'].create({'title': 'Other Question', 'sequence': 1, 'survey_id': survey_own.id})
# Create: own survey only
@@ -294,7 +294,7 @@ class TestAccess(common.TestSurveyCommon):
admin = self.env.ref('base.user_admin')
with self.with_user(admin.login):
survey_other = self.env['survey.survey'].create({'title': 'Other'})
- self.env['survey.question'].create({'title': 'Other', 'sequence': 0, 'is_page': True, 'survey_id': survey_other.id})
+ self.env['survey.question'].create({'title': 'Other', 'sequence': 0, 'is_page': True, 'question_type': False, 'survey_id': survey_other.id})
question_other = self.env['survey.question'].create({'title': 'Other Question', 'sequence': 1, 'survey_id': survey_other.id})
self.assertEqual(survey_other.create_uid, admin)
self.assertEqual(question_other.create_uid, admin)
diff --git a/addons/test_website_slides_full/tests/test_ui_wslides.py b/addons/test_website_slides_full/tests/test_ui_wslides.py
index bd8ba5e21aa..ccb77732f1d 100644
--- a/addons/test_website_slides_full/tests/test_ui_wslides.py
+++ b/addons/test_website_slides_full/tests/test_ui_wslides.py
@@ -70,6 +70,7 @@ class TestUi(TestUICommon):
'title': 'Furniture',
'sequence': 1,
'is_page': True,
+ 'question_type': False,
'description': "<p>Test your furniture knowledge!</p>",
}), (0, 0, {
'title': 'What type of wood is the best for furniture?',
diff --git a/addons/website_slides_survey/data/survey_demo.xml b/addons/website_slides_survey/data/survey_demo.xml
index 41598dbedbd..d59ea0e910d 100644
--- a/addons/website_slides_survey/data/survey_demo.xml
+++ b/addons/website_slides_survey/data/survey_demo.xml
@@ -22,6 +22,7 @@