[REF] survey: globally rename survey.user_input_line model to survey.user_input.line

PURPOSE

As new features are about to land in survey, notably live interactions [1]
and new survey building [2] performing a pre cleaning is necessary. In this
PR we clean survey models by: removing unnecessary fields, cleaning some code
and finally renaming models.

SPECIFICATIONS

Main user answer model is ``survey.user_input``. It holds lines related to
answers given to specific questions. In this commit we rename this model from
``survey.user_input_line`` to ``survey.user_input.line`` to be coherent with
general odoo naming guidelines.

LINKS

[0] Related to Task ID 2061901 (survey models cleaning and preparation)
[1] Task ID 1972640 (live interactions)
[2] Task ID 2119587 (new frontend for building surveys)

PR #40765
This commit is contained in:
Thibault Delavallée
2019-12-05 15:21:28 +00:00
parent 2592e72f2c
commit 7edeb24de9
13 changed files with 47 additions and 47 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ sent mails with personal token for the invitation of the survey.
'data/survey_demo_user.xml',
'data/survey_demo_feedback.xml',
'data/survey_demo_certification.xml',
'data/survey.user_input_line.csv'
'data/survey.user_input.line.csv'
],
'installable': True,
'auto_install': False,
+1 -1
View File
@@ -328,7 +328,7 @@ class Survey(http.Controller):
for question in questions:
answer = prepared_questions[question.id]['answer']
comment = prepared_questions[question.id]['comment']
request.env['survey.user_input_line'].sudo().save_lines(answer_sudo.id, question, answer, comment)
request.env['survey.user_input.line'].sudo().save_lines(answer_sudo.id, question, answer, comment)
if answer_sudo.is_time_limit_reached or survey_sudo.questions_layout == 'one_page':
answer_sudo._mark_done()
+1 -1
View File
@@ -112,7 +112,7 @@ class SurveyQuestion(models.Model):
constr_error_msg = fields.Char('Error message', translate=True, default=lambda self: _("This question requires an answer."))
# answers
user_input_line_ids = fields.One2many(
'survey.user_input_line', 'question_id', string='Answers',
'survey.user_input.line', 'question_id', string='Answers',
domain=[('skipped', '=', False)], groups='survey.group_survey_user')
_sql_constraints = [
+1 -1
View File
@@ -572,7 +572,7 @@ class Survey(models.Model):
domain_filter.insert(0, ('value_suggested.id', 'in', choice))
else:
domain_filter = domain_filter[1:]
input_lines = self.env['survey.user_input_line'].search(domain_filter)
input_lines = self.env['survey.user_input.line'].search(domain_filter)
filtered_input_ids = [input_line.user_input_id.id for input_line in input_lines]
else:
filtered_input_ids = []
+3 -3
View File
@@ -40,7 +40,7 @@ class SurveyUserInput(models.Model):
partner_id = fields.Many2one('res.partner', string='Partner', readonly=True)
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)
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)
quizz_score = fields.Float("Score (%)", compute="_compute_quizz_score", store=True, compute_sudo=True) # stored for perf reasons
quizz_passed = fields.Boolean('Quizz Passed', compute='_compute_quizz_passed', store=True, compute_sudo=True) # stored for perf reasons
@@ -171,10 +171,10 @@ class SurveyUserInput(models.Model):
class SurveyUserInputLine(models.Model):
_name = 'survey.user_input_line'
_name = 'survey.user_input.line'
_description = 'Survey User Input Line'
_rec_name = 'user_input_id'
_order = 'question_sequence,id'
_order = 'question_sequence, id'
# survey data
user_input_id = fields.Many2one('survey.user_input', string='User Input', ondelete='cascade', required=True)
+4 -4
View File
@@ -15,8 +15,8 @@ access_survey_user_input_all,survey.user_input.all,model_survey_user_input,,0,0,
access_survey_user_input_user,survey.user_input.user,model_survey_user_input,base.group_user,0,0,0,0
access_survey_user_input_survey_user,survey.user_input.survey.user,model_survey_user_input,group_survey_user,1,1,1,1
access_survey_user_input_survey_manager,survey.user_input.survey.manager,model_survey_user_input,group_survey_manager,1,1,1,1
access_survey_user_input_line_all,survey.user_input_line.all,model_survey_user_input_line,,0,0,0,0
access_survey_user_input_line_user,survey.user_input_line.user,model_survey_user_input_line,base.group_user,0,0,0,0
access_survey_user_input_line_survey_user,survey.user_input_line.survey.user,model_survey_user_input_line,group_survey_user,1,1,1,1
access_survey_user_input_line_survey_manager,survey.user_input_line.survey.manager,model_survey_user_input_line,group_survey_manager,1,1,1,1
access_survey_user_input_line_all,survey.user_input.line.all,model_survey_user_input_line,,0,0,0,0
access_survey_user_input_line_user,survey.user_input.line.user,model_survey_user_input_line,base.group_user,0,0,0,0
access_survey_user_input_line_survey_user,survey.user_input.line.survey.user,model_survey_user_input_line,group_survey_user,1,1,1,1
access_survey_user_input_line_survey_manager,survey.user_input.line.survey.manager,model_survey_user_input_line,group_survey_manager,1,1,1,1
access_gamification_badge_survey_user,gamification.badge.survey.user,model_gamification_badge,group_survey_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
15 access_survey_user_input_user survey.user_input.user model_survey_user_input base.group_user 0 0 0 0
16 access_survey_user_input_survey_user survey.user_input.survey.user model_survey_user_input group_survey_user 1 1 1 1
17 access_survey_user_input_survey_manager survey.user_input.survey.manager model_survey_user_input group_survey_manager 1 1 1 1
18 access_survey_user_input_line_all survey.user_input_line.all survey.user_input.line.all model_survey_user_input_line 0 0 0 0
19 access_survey_user_input_line_user survey.user_input_line.user survey.user_input.line.user model_survey_user_input_line base.group_user 0 0 0 0
20 access_survey_user_input_line_survey_user survey.user_input_line.survey.user survey.user_input.line.survey.user model_survey_user_input_line group_survey_user 1 1 1 1
21 access_survey_user_input_line_survey_manager survey.user_input_line.survey.manager survey.user_input.line.survey.manager model_survey_user_input_line group_survey_manager 1 1 1 1
22 access_gamification_badge_survey_user gamification.badge.survey.user model_gamification_badge group_survey_user 1 1 1 1
+1 -1
View File
@@ -208,7 +208,7 @@ class TestSurveyCommon(common.SavepointCase):
}
base_alvals[answer_fname] = answer_value
base_alvals.update(kwargs)
return self.env['survey.user_input_line'].create(base_alvals)
return self.env['survey.user_input.line'].create(base_alvals)
def _access_start(self, survey):
return self.url_open('/survey/start/%s' % survey.access_token)
+2 -2
View File
@@ -61,9 +61,9 @@ class TestSurveyFlow(common.TestSurveyCommon, HttpCase):
# fetch starting data to check only newly created data during this flow
answers = self.env['survey.user_input'].search([('survey_id', '=', survey.id)])
answer_lines = self.env['survey.user_input_line'].search([('survey_id', '=', survey.id)])
answer_lines = self.env['survey.user_input.line'].search([('survey_id', '=', survey.id)])
self.assertEqual(answers, self.env['survey.user_input'])
self.assertEqual(answer_lines, self.env['survey.user_input_line'])
self.assertEqual(answer_lines, self.env['survey.user_input.line'])
# Step: customer takes the survey
# --------------------------------------------------
+19 -19
View File
@@ -165,17 +165,17 @@ class TestAccess(common.TestSurveyCommon):
with self.assertRaises(AccessError):
self.env['survey.user_input'].create({'survey_id': self.survey.id})
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
self.env['survey.user_input.line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
# Read: nope
with self.assertRaises(AccessError):
self.env['survey.user_input'].search([('survey_id', 'in', [self.survey.id])])
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].search([('survey_id', 'in', [self.survey.id])])
self.env['survey.user_input.line'].search([('survey_id', 'in', [self.survey.id])])
with self.assertRaises(AccessError):
self.env['survey.user_input'].browse(self.answer_0.ids).read(['state'])
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].browse(self.answer_0_0.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(self.answer_0_0.ids).read(['value_number'])
# Write: nope
with self.assertRaises(AccessError):
@@ -194,17 +194,17 @@ class TestAccess(common.TestSurveyCommon):
with self.assertRaises(AccessError):
self.env['survey.user_input'].create({'survey_id': self.survey.id})
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
self.env['survey.user_input.line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
# Read: nope
with self.assertRaises(AccessError):
self.env['survey.user_input'].search([('survey_id', 'in', [self.survey.id])])
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].search([('survey_id', 'in', [self.survey.id])])
self.env['survey.user_input.line'].search([('survey_id', 'in', [self.survey.id])])
with self.assertRaises(AccessError):
self.env['survey.user_input'].browse(self.answer_0.ids).read(['state'])
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].browse(self.answer_0_0.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(self.answer_0_0.ids).read(['value_number'])
# Write: nope
with self.assertRaises(AccessError):
@@ -223,17 +223,17 @@ class TestAccess(common.TestSurveyCommon):
with self.assertRaises(AccessError):
self.env['survey.user_input'].create({'survey_id': self.survey.id})
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
self.env['survey.user_input.line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
# Read: nope
with self.assertRaises(AccessError):
self.env['survey.user_input'].search([('survey_id', 'in', [self.survey.id])])
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].search([('survey_id', 'in', [self.survey.id])])
self.env['survey.user_input.line'].search([('survey_id', 'in', [self.survey.id])])
with self.assertRaises(AccessError):
self.env['survey.user_input'].browse(self.answer_0.ids).read(['state'])
with self.assertRaises(AccessError):
self.env['survey.user_input_line'].browse(self.answer_0_0.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(self.answer_0_0.ids).read(['value_number'])
# Write: nope
with self.assertRaises(AccessError):
@@ -254,26 +254,26 @@ class TestAccess(common.TestSurveyCommon):
# Create: own survey only
answer_own = self.env['survey.user_input'].create({'survey_id': survey_own.id})
answer_line_own = self.env['survey.user_input_line'].create({'question_id': question_own.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': answer_own.id})
answer_line_own = self.env['survey.user_input.line'].create({'question_id': question_own.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': answer_own.id})
# Read: always
answers = self.env['survey.user_input'].search([('survey_id', 'in', [survey_own.id, self.survey.id])])
self.assertEqual(answers, answer_own | self.answer_0)
answer_lines = self.env['survey.user_input_line'].search([('survey_id', 'in', [survey_own.id, self.survey.id])])
answer_lines = self.env['survey.user_input.line'].search([('survey_id', 'in', [survey_own.id, self.survey.id])])
self.assertEqual(answer_lines, answer_line_own | self.answer_0_0 | self.answer_0_1)
self.env['survey.user_input'].browse(answer_own.ids).read(['state'])
self.env['survey.user_input'].browse(self.answer_0.ids).read(['state'])
self.env['survey.user_input_line'].browse(answer_line_own.ids).read(['value_number'])
self.env['survey.user_input_line'].browse(self.answer_0_0.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(answer_line_own.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(self.answer_0_0.ids).read(['value_number'])
# Create: own survey only (moved after read because DB not correctly rollbacked with assertRaises)
with self.assertRaises(AccessError):
answer_other = self.env['survey.user_input'].create({'survey_id': self.survey.id})
with self.assertRaises(AccessError):
answer_line_other = self.env['survey.user_input_line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
answer_line_other = self.env['survey.user_input.line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': self.answer_0.id})
# Write: own survey only
answer_own.write({'state': 'done'})
@@ -300,21 +300,21 @@ class TestAccess(common.TestSurveyCommon):
# Create: always
answer_own = self.env['survey.user_input'].create({'survey_id': self.survey.id})
answer_other = self.env['survey.user_input'].create({'survey_id': survey_other.id})
answer_line_own = self.env['survey.user_input_line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': answer_own.id})
answer_line_other = self.env['survey.user_input_line'].create({'question_id': question_other.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': answer_other.id})
answer_line_own = self.env['survey.user_input.line'].create({'question_id': self.question_num.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': answer_own.id})
answer_line_other = self.env['survey.user_input.line'].create({'question_id': question_other.id, 'answer_type': 'number', 'value_number': 3, 'user_input_id': answer_other.id})
# Read: always
answers = self.env['survey.user_input'].search([('survey_id', 'in', [survey_other.id, self.survey.id])])
self.assertEqual(answers, answer_own | answer_other | self.answer_0)
answer_lines = self.env['survey.user_input_line'].search([('survey_id', 'in', [survey_other.id, self.survey.id])])
answer_lines = self.env['survey.user_input.line'].search([('survey_id', 'in', [survey_other.id, self.survey.id])])
self.assertEqual(answer_lines, answer_line_own | answer_line_other | self.answer_0_0 | self.answer_0_1)
self.env['survey.user_input'].browse(answer_own.ids).read(['state'])
self.env['survey.user_input'].browse(self.answer_0.ids).read(['state'])
self.env['survey.user_input_line'].browse(answer_line_own.ids).read(['value_number'])
self.env['survey.user_input_line'].browse(self.answer_0_0.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(answer_line_own.ids).read(['value_number'])
self.env['survey.user_input.line'].browse(self.answer_0_0.ids).read(['value_number'])
# Write: always
answer_own.write({'state': 'done'})
+13 -13
View File
@@ -148,9 +148,9 @@
<!-- USER INPUT LINES
.. note:: these views are useful mainly for technical users/administrators -->
<record model="ir.ui.view" id="survey_user_input_line_form">
<field name="name">survey_user_input_line_form</field>
<field name="model">survey.user_input_line</field>
<record id="survey_user_input_line_view_form" model="ir.ui.view">
<field name="name">survey.user_input.line.view.form</field>
<field name="model">survey.user_input.line</field>
<field name="arch" type="xml">
<form string="User input line details" create="false">
<sheet>
@@ -174,9 +174,9 @@
</form>
</field>
</record>
<record model="ir.ui.view" id="survey_response_line_tree">
<field name="name">survey_response_line_tree</field>
<field name="model">survey.user_input_line</field>
<record id="survey_response_line_view_tree" model="ir.ui.view">
<field name="name">survey.user_input.line.view.tree</field>
<field name="model">survey.user_input.line</field>
<field name="arch" type="xml">
<tree string="Survey Answer Line" create="false">
<field name="survey_id"/>
@@ -189,9 +189,9 @@
</tree>
</field>
</record>
<record id="survey_response_line_search" model="ir.ui.view">
<field name="name">survey_response_line_search</field>
<field name="model">survey.user_input_line</field>
<record id="survey_user_input_line_view_search" model="ir.ui.view">
<field name="name">survey.user_input.line.view.search</field>
<field name="model">survey.user_input.line</field>
<field name="arch" type="xml">
<search string="Search User input lines">
<field name="user_input_id"/>
@@ -204,11 +204,11 @@
</field>
</record>
<record model="ir.actions.act_window" id="action_survey_user_input_line">
<record id="survey_user_input_line_action" model="ir.actions.act_window">
<field name="name">Detailed Answers</field>
<field name="res_model">survey.user_input_line</field>
<field name="res_model">survey.user_input.line</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="survey_response_line_search"/>
<field name="search_view_id" ref="survey_user_input_line_view_search"/>
<field name="context">{'search_default_group_by_survey': True, 'search_default_group_by_user_input': True}</field>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
@@ -224,7 +224,7 @@
sequence="1"/>
<menuitem name="Detailed Answers"
id="menu_survey_response_line_form"
action="action_survey_user_input_line"
action="survey_user_input_line_action"
parent="survey_menu_user_inputs"
sequence="4"
groups="base.group_no_one"/>
+1 -1
View File
@@ -27,6 +27,6 @@
'demo': [
'data/survey_demo.xml',
'data/slide_slide_demo.xml',
'data/survey.user_input_line.csv',
'data/survey.user_input.line.csv',
],
}