From ee5649cdff08b0cd413a8d1d6b0d01aea290e50a Mon Sep 17 00:00:00 2001 From: Jitendra Prajapati Date: Thu, 29 Aug 2019 13:11:32 +0000 Subject: [PATCH] [IMP] survey: improve user answers model and display in backend PURPOSE Perform a back2basics review of survey to improve daily use, new user onboarding and labelling. SPECIFICATIONS Order answer lines following question order. Display section in answer lines form view to better understand question and answer organization. Add a correct flag on answer lines and display it in user input embedded view in order to know which line are correct. LINKS Task 2039068 PR #36229 --- addons/survey/models/survey_user.py | 11 +++++++++++ addons/survey/views/survey_user_views.xml | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/addons/survey/models/survey_user.py b/addons/survey/models/survey_user.py index b7fa5f1f92a..8cfa9e9dde4 100644 --- a/addons/survey/models/survey_user.py +++ b/addons/survey/models/survey_user.py @@ -199,12 +199,14 @@ class SurveyUserInputLine(models.Model): _name = 'survey.user_input_line' _description = 'Survey User Input Line' _rec_name = 'user_input_id' + _order = 'question_sequence,id' # survey data user_input_id = fields.Many2one('survey.user_input', string='User Input', ondelete='cascade', required=True) survey_id = fields.Many2one(related='user_input_id.survey_id', string='Survey', store=True, readonly=False) question_id = fields.Many2one('survey.question', string='Question', ondelete='cascade', required=True) page_id = fields.Many2one(related='question_id.page_id', string="Section", readonly=False) + question_sequence = fields.Integer('Sequence', related='question_id.sequence', store=True) # answer skipped = fields.Boolean('Skipped') answer_type = fields.Selection([ @@ -222,6 +224,15 @@ class SurveyUserInputLine(models.Model): value_suggested = fields.Many2one('survey.label', string="Suggested answer") value_suggested_row = fields.Many2one('survey.label', string="Row answer") answer_score = fields.Float('Score') + answer_is_correct = fields.Boolean('Correct', compute='_compute_answer_is_correct') + + @api.depends('value_suggested', 'question_id') + def _compute_answer_is_correct(self): + for answer in self: + if answer.value_suggested and answer.question_id.question_type in ['simple_choice', 'multiple_choice']: + answer.answer_is_correct = answer.value_suggested.is_correct + else: + answer.answer_is_correct = False @api.constrains('skipped', 'answer_type') def _answered_or_skipped(self): diff --git a/addons/survey/views/survey_user_views.xml b/addons/survey/views/survey_user_views.xml index fd7249da958..3d9384ead5d 100644 --- a/addons/survey/views/survey_user_views.xml +++ b/addons/survey/views/survey_user_views.xml @@ -66,11 +66,14 @@ + + - + +