diff --git a/addons/survey/data/survey_demo_certification.xml b/addons/survey/data/survey_demo_certification.xml index 7a59f6344d0..10f4a4154fe 100644 --- a/addons/survey/data/survey_demo_certification.xml +++ b/addons/survey/data/survey_demo_certification.xml @@ -314,64 +314,24 @@ douglas.fletcher51@example.com done - billy.fox45@example.com done - brandon.freeman55@example.com done - oscar.morgan11@example.com done - diff --git a/addons/survey/models/survey_survey.py b/addons/survey/models/survey_survey.py index fa70857abc5..cdd4edd014b 100644 --- a/addons/survey/models/survey_survey.py +++ b/addons/survey/models/survey_survey.py @@ -238,7 +238,6 @@ class Survey(models.Model): answer_vals = { 'survey_id': survey.id, 'test_entry': test_entry, - 'question_ids': [(6, 0, survey._prepare_answer_questions().ids)] } if user and not user._is_public(): answer_vals['partner_id'] = user.partner_id.id @@ -286,7 +285,7 @@ class Survey(models.Model): if check_attempts and not self._has_attempts_left(partner or (user and user.partner_id), email, invite_token): raise UserError(_('No attempts left.')) - def _prepare_answer_questions(self): + def _prepare_user_input_predefined_questions(self): """ Will generate the questions for a randomized survey. It uses the random_questions_count of every sections of the survey to pick a random number of questions and returns the merged recordset """ @@ -350,7 +349,7 @@ class Survey(models.Model): return None elif self.questions_layout == 'page_per_question' and self.questions_selection == 'random': return list(enumerate( - user_input.question_ids + user_input.predefined_question_ids )) else: return list(enumerate( @@ -425,7 +424,7 @@ class Survey(models.Model): # we need the intersection of the questions of this page AND the questions prepared for that user_input # (because randomized surveys do not use all the questions of every page) if answer: - questions = questions & answer.question_ids + questions = questions & answer.predefined_question_ids return questions, page_or_question_id # ------------------------------------------------------------ diff --git a/addons/survey/models/survey_user.py b/addons/survey/models/survey_user.py index ec13fbda55f..81a896afaa1 100644 --- a/addons/survey/models/survey_user.py +++ b/addons/survey/models/survey_user.py @@ -41,7 +41,7 @@ class SurveyUserInput(models.Model): email = fields.Char('E-mail', readonly=True) # questions / answers user_input_line_ids = fields.One2many('survey.user_input.line', 'user_input_id', string='Answers', copy=True) - question_ids = fields.Many2many('survey.question', string='Predefined Questions', readonly=True) + predefined_question_ids = fields.Many2many('survey.question', string='Predefined Questions', readonly=True) scoring_percentage = fields.Float("Score (%)", compute="_compute_scoring_percentage", store=True, compute_sudo=True) # stored for perf reasons scoring_success = fields.Boolean('Quizz Passed', compute='_compute_scoring_success', store=True, compute_sudo=True) # stored for perf reasons @@ -54,7 +54,7 @@ class SurveyUserInput(models.Model): for user_input in self: total_possible_score = sum([ answer_score if answer_score > 0 else 0 - for answer_score in user_input.question_ids.mapped('suggested_answer_ids.answer_score') + for answer_score in user_input.predefined_question_ids.mapped('suggested_answer_ids.answer_score') ]) if total_possible_score == 0: @@ -109,6 +109,15 @@ class SurveyUserInput(models.Model): user_input.attempts_number = attempts_number + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if 'predefined_question_ids' not in vals: + suvey_id = vals.get('survey_id', self.env.context.get('default_survey_id')) + survey = self.env['survey.survey'].browse(suvey_id) + vals['predefined_question_ids'] = [(6, 0, survey._prepare_user_input_predefined_questions().ids)] + return super(SurveyUserInput, self).create(vals_list) + def action_resend(self): partners = self.env['res.partner'] emails = [] diff --git a/addons/survey/tests/test_survey_randomize.py b/addons/survey/tests/test_survey_randomize.py index 1ab5ddefd6b..fa926b1895c 100644 --- a/addons/survey/tests/test_survey_randomize.py +++ b/addons/survey/tests/test_survey_randomize.py @@ -42,7 +42,7 @@ class TestSurveyRandomize(TransactionCase): 'questions_selection': 'random' }) - generated_questions = self.survey1._prepare_answer_questions() + generated_questions = self.survey1._prepare_user_input_predefined_questions() self.assertEqual(len(generated_questions.ids), 10, msg="Expected 10 unique questions") self.assertEqual(len(generated_questions.filtered(lambda question: question.page_id == page_1)), 3, msg="Expected 3 questions in page 1") diff --git a/addons/survey/views/survey_templates.xml b/addons/survey/views/survey_templates.xml index bc59d0c1bf7..81c6f3a44e5 100644 --- a/addons/survey/views/survey_templates.xml +++ b/addons/survey/views/survey_templates.xml @@ -79,7 +79,7 @@

- +
@@ -93,7 +93,7 @@ - +
@@ -110,7 +110,7 @@
-