[REF] survey: globally rename survey.label model to survey.question.answer

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

In this commit we rename the long standing ``survey.label`` model. Indeed
a label is something before a question, like an input label. Labels in survey
are used for suggested answers and sometimes as rows for matrix answers.

After much thoughts we rename ``survey.label`` to ``survey.question.answer``.
It indicates this model holds answers. Moreover it is namespaced within the
``survey.question`` model name to avoid conflict with user input / user answer
model.

As model naming changes, some fields also evolve. In survey.question model

  * ``labels_id`` is renamed to ``suggested_answer_ids`` to indicate it is
    used to display suggested values to the user;
  * ``labels_id_2`` is renamed to ``matrix_row_ids`` to indicate it is used
    to generate the rows of the matrix-type question. A matrix is therefore
    done using ``matrix_row_ids`` for rows and ``suggested_answer_ids`` for
    columns which seems easier to understand;

In survey.question.answer (old survey.label) model

  * ``question_id_2`` is renamed to ``matrix_question_id`` to ease its
    understanding, notably that it is used for matrix questions;

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 84bb9c748d
commit 2592e72f2c
19 changed files with 182 additions and 175 deletions
@@ -83,58 +83,58 @@
<field name="question_type">matrix</field>
<field name="matrix_subtype">simple</field>
</record>
<record id="survey_recruitment_form_p1_q8_col1" model="survey.label">
<record id="survey_recruitment_form_p1_q8_col1" model="survey.question.answer">
<field name="question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">1</field>
<field name="value">Not important</field>
</record>
<record id="survey_recruitment_form_p1_q8_col2" model="survey.label">
<record id="survey_recruitment_form_p1_q8_col2" model="survey.question.answer">
<field name="question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">3</field>
<field name="value">Important</field>
</record>
<record id="survey_recruitment_form_p1_q8_col3" model="survey.label">
<record id="survey_recruitment_form_p1_q8_col3" model="survey.question.answer">
<field name="question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">4</field>
<field name="value">Very important</field>
</record>
<record id="survey_recruitment_form_p1_q8_row1" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row1" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">1</field>
<field name="value">Having a good pay</field>
</record>
<record id="survey_recruitment_form_p1_q8_row2" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row2" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">2</field>
<field name="value">Getting on with colleagues</field>
</record>
<record id="survey_recruitment_form_p1_q8_row3" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row3" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">3</field>
<field name="value">Having a nice office environment</field>
</record>
<record id="survey_recruitment_form_p1_q8_row4" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row4" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">5</field>
<field name="value">Working with state of the art technology</field>
</record>
<record id="survey_recruitment_form_p1_q8_row5" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row5" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">6</field>
<field name="value">Office location</field>
</record>
<record id="survey_recruitment_form_p1_q8_row6" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row6" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">7</field>
<field name="value">Management quality</field>
</record>
<record id="survey_recruitment_form_p1_q8_row7" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row7" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">8</field>
<field name="value">Having freebies such as tea, coffee and stationery</field>
</record>
<record id="survey_recruitment_form_p1_q8_row8" model="survey.label">
<field name="question_id_2" ref="survey_recruitment_form_p1_q8"/>
<record id="survey_recruitment_form_p1_q8_row8" model="survey.question.answer">
<field name="matrix_question_id" ref="survey_recruitment_form_p1_q8"/>
<field name="sequence">9</field>
<field name="value">Getting perks such as free parking, gym passes</field>
</record>
@@ -46,12 +46,12 @@
<field name="display_mode">dropdown</field>
<field name="constr_mandatory" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_1_question_1_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_1_question_1_choice_1">
<field name="question_id" ref="vendor_certification_page_1_question_1"/>
<field name="sequence">1</field>
<field name="value">No</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_1_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_1_question_1_choice_2">
<field name="question_id" ref="vendor_certification_page_1_question_1"/>
<field name="sequence">2</field>
<field name="value">Yes</field>
@@ -66,34 +66,34 @@
<field name="question_type">multiple_choice</field>
<field name="column_nb">4</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_2_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_1_question_2_choice_1">
<field name="question_id" ref="vendor_certification_page_1_question_2"/>
<field name="sequence">1</field>
<field name="value">Chair floor protection</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_2_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_1_question_2_choice_2">
<field name="question_id" ref="vendor_certification_page_1_question_2"/>
<field name="sequence">2</field>
<field name="value">Fanta</field>
<field name="answer_score">-1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_2_choice_3">
<record model="survey.question.answer" id="vendor_certification_page_1_question_2_choice_3">
<field name="question_id" ref="vendor_certification_page_1_question_2"/>
<field name="sequence">3</field>
<field name="value">Conference chair</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_2_choice_4">
<record model="survey.question.answer" id="vendor_certification_page_1_question_2_choice_4">
<field name="question_id" ref="vendor_certification_page_1_question_2"/>
<field name="sequence">4</field>
<field name="value">Drawer</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_2_choice_5">
<record model="survey.question.answer" id="vendor_certification_page_1_question_2_choice_5">
<field name="question_id" ref="vendor_certification_page_1_question_2"/>
<field name="sequence">5</field>
<field name="value">Customizable Lamp</field>
@@ -107,34 +107,34 @@
<field name="question_type">multiple_choice</field>
<field name="column_nb">4</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_3_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_1_question_3_choice_1">
<field name="question_id" ref="vendor_certification_page_1_question_3"/>
<field name="sequence">1</field>
<field name="value">Color</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_3_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_1_question_3_choice_2">
<field name="question_id" ref="vendor_certification_page_1_question_3"/>
<field name="sequence">2</field>
<field name="value">Height</field>
<field name="answer_score">-1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_3_choice_3">
<record model="survey.question.answer" id="vendor_certification_page_1_question_3_choice_3">
<field name="question_id" ref="vendor_certification_page_1_question_3"/>
<field name="sequence">3</field>
<field name="value">Width</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_3_choice_4">
<record model="survey.question.answer" id="vendor_certification_page_1_question_3_choice_4">
<field name="question_id" ref="vendor_certification_page_1_question_3"/>
<field name="sequence">4</field>
<field name="value">Legs</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_3_choice_5">
<record model="survey.question.answer" id="vendor_certification_page_1_question_3_choice_5">
<field name="question_id" ref="vendor_certification_page_1_question_3"/>
<field name="sequence">5</field>
<field name="value">Number of drawers</field>
@@ -149,24 +149,24 @@
<field name="display_mode">dropdown</field>
<field name="constr_mandatory" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_1_question_4_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_1_question_4_choice_1">
<field name="question_id" ref="vendor_certification_page_1_question_4"/>
<field name="sequence">1</field>
<field name="value">1</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_4_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_1_question_4_choice_2">
<field name="question_id" ref="vendor_certification_page_1_question_4"/>
<field name="sequence">2</field>
<field name="value">2</field>
<field name="is_correct" eval="True" />
<field name="answer_score">2.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_4_choice_3">
<record model="survey.question.answer" id="vendor_certification_page_1_question_4_choice_3">
<field name="question_id" ref="vendor_certification_page_1_question_4"/>
<field name="sequence">3</field>
<field name="value">3</field>
</record>
<record model="survey.label" id="vendor_certification_page_1_question_4_choice_4">
<record model="survey.question.answer" id="vendor_certification_page_1_question_4_choice_4">
<field name="question_id" ref="vendor_certification_page_1_question_4"/>
<field name="sequence">4</field>
<field name="value">4</field>
@@ -196,34 +196,34 @@
<field name="display_mode">dropdown</field>
<field name="constr_mandatory" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_2_question_1_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_2_question_1_choice_1">
<field name="question_id" ref="vendor_certification_page_2_question_1"/>
<field name="sequence">1</field>
<field name="value">20$</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_1_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_2_question_1_choice_2">
<field name="question_id" ref="vendor_certification_page_2_question_1"/>
<field name="sequence">2</field>
<field name="value">50$</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_1_choice_3">
<record model="survey.question.answer" id="vendor_certification_page_2_question_1_choice_3">
<field name="question_id" ref="vendor_certification_page_2_question_1"/>
<field name="sequence">3</field>
<field name="value">80$</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_1_choice_4">
<record model="survey.question.answer" id="vendor_certification_page_2_question_1_choice_4">
<field name="question_id" ref="vendor_certification_page_2_question_1"/>
<field name="sequence">4</field>
<field name="value">100$</field>
<field name="is_correct" eval="True" />
<field name="answer_score">2.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_1_choice_5">
<record model="survey.question.answer" id="vendor_certification_page_2_question_1_choice_5">
<field name="question_id" ref="vendor_certification_page_2_question_1"/>
<field name="sequence">5</field>
<field name="value">200$</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_1_choice_6">
<record model="survey.question.answer" id="vendor_certification_page_2_question_1_choice_6">
<field name="question_id" ref="vendor_certification_page_2_question_1"/>
<field name="sequence">6</field>
<field name="value">300$</field>
@@ -236,40 +236,40 @@
<field name="question_type">multiple_choice</field>
<field name="column_nb">2</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_2_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_2_question_2_choice_1">
<field name="question_id" ref="vendor_certification_page_2_question_2"/>
<field name="sequence">1</field>
<field name="value">Corner Desk Right Sit</field>
<field name="answer_score">1.0</field>
<field name="is_correct" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_2_question_2_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_2_question_2_choice_2">
<field name="question_id" ref="vendor_certification_page_2_question_2"/>
<field name="sequence">2</field>
<field name="value">Desk Combination</field>
<field name="answer_score">1.0</field>
<field name="is_correct" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_2_question_2_choice_3">
<record model="survey.question.answer" id="vendor_certification_page_2_question_2_choice_3">
<field name="question_id" ref="vendor_certification_page_2_question_2"/>
<field name="sequence">3</field>
<field name="value">Cabinet with Doors</field>
<field name="answer_score">-1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_2_choice_4">
<record model="survey.question.answer" id="vendor_certification_page_2_question_2_choice_4">
<field name="question_id" ref="vendor_certification_page_2_question_2"/>
<field name="sequence">4</field>
<field name="value">Large Desk</field>
<field name="answer_score">1.0</field>
<field name="is_correct" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_2_question_2_choice_5">
<record model="survey.question.answer" id="vendor_certification_page_2_question_2_choice_5">
<field name="question_id" ref="vendor_certification_page_2_question_2"/>
<field name="sequence">5</field>
<field name="value">Letter Tray</field>
<field name="answer_score">-1.0</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_2_choice_5">
<record model="survey.question.answer" id="vendor_certification_page_2_question_2_choice_5">
<field name="question_id" ref="vendor_certification_page_2_question_2"/>
<field name="sequence">6</field>
<field name="value">Office Chair Black</field>
@@ -284,27 +284,27 @@
<field name="display_mode">dropdown</field>
<field name="constr_mandatory" eval="True" />
</record>
<record model="survey.label" id="vendor_certification_page_2_question_3_choice_1">
<record model="survey.question.answer" id="vendor_certification_page_2_question_3_choice_1">
<field name="question_id" ref="vendor_certification_page_2_question_3"/>
<field name="sequence">1</field>
<field name="value">Very underpriced</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_3_choice_2">
<record model="survey.question.answer" id="vendor_certification_page_2_question_3_choice_2">
<field name="question_id" ref="vendor_certification_page_2_question_3"/>
<field name="sequence">2</field>
<field name="value">Underpriced</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_3_choice_3">
<record model="survey.question.answer" id="vendor_certification_page_2_question_3_choice_3">
<field name="question_id" ref="vendor_certification_page_2_question_3"/>
<field name="sequence">3</field>
<field name="value">Correctly priced</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_3_choice_4">
<record model="survey.question.answer" id="vendor_certification_page_2_question_3_choice_4">
<field name="question_id" ref="vendor_certification_page_2_question_3"/>
<field name="sequence">4</field>
<field name="value">A little bit overpriced</field>
</record>
<record model="survey.label" id="vendor_certification_page_2_question_3_choice_5">
<record model="survey.question.answer" id="vendor_certification_page_2_question_3_choice_5">
<field name="question_id" ref="vendor_certification_page_2_question_3"/>
<field name="sequence">5</field>
<field name="value">A lot overpriced</field>
+26 -26
View File
@@ -48,22 +48,22 @@
<field name="comment_count_as_answer" eval="True"/>
<field name="constr_mandatory" eval="True"/>
</record>
<record model="survey.label" id="survey_feedback_p1_q3_sug1">
<record model="survey.question.answer" id="survey_feedback_p1_q3_sug1">
<field name="question_id" ref="survey_feedback_p1_q3"/>
<field name="sequence">1</field>
<field name="value">Once a day</field>
</record>
<record model="survey.label" id="survey_feedback_p1_q3_sug2">
<record model="survey.question.answer" id="survey_feedback_p1_q3_sug2">
<field name="question_id" ref="survey_feedback_p1_q3"/>
<field name="sequence">2</field>
<field name="value">Once a week</field>
</record>
<record model="survey.label" id="survey_feedback_p1_q3_sug3">
<record model="survey.question.answer" id="survey_feedback_p1_q3_sug3">
<field name="question_id" ref="survey_feedback_p1_q3"/>
<field name="sequence">3</field>
<field name="value">Once a month</field>
</record>
<record model="survey.label" id="survey_feedback_p1_q3_sug4">
<record model="survey.question.answer" id="survey_feedback_p1_q3_sug4">
<field name="question_id" ref="survey_feedback_p1_q3"/>
<field name="sequence">4</field>
<field name="value">Once a year</field>
@@ -95,42 +95,42 @@
<field name="comments_allowed" eval="True"/>
<field name="comment_count_as_answer" eval="False"/>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug1">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug1">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">1</field>
<field name="value">High quality</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug2">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug2">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">2</field>
<field name="value">Useful</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug3">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug3">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">3</field>
<field name="value">Unique</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug4">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug4">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">4</field>
<field name="value">Good value for money</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug5">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug5">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">5</field>
<field name="value">Overpriced</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug6">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug6">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">6</field>
<field name="value">Impractical</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug7">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug7">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">7</field>
<field name="value">Ineffective</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q1_sug8">
<record model="survey.question.answer" id="survey_feedback_p2_q1_sug8">
<field name="question_id" ref="survey_feedback_p2_q1"/>
<field name="sequence">8</field>
<field name="value">Poor quality</field>
@@ -143,48 +143,48 @@
<field name="matrix_subtype">multiple</field>
<field name="constr_mandatory" eval="True"/>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_col1">
<record model="survey.question.answer" id="survey_feedback_p2_q2_col1">
<field name="question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">1</field>
<field name="value">Totally disagree</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_col2">
<record model="survey.question.answer" id="survey_feedback_p2_q2_col2">
<field name="question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">2</field>
<field name="value">Disagree</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_col3">
<record model="survey.question.answer" id="survey_feedback_p2_q2_col3">
<field name="question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">3</field>
<field name="value">Agree</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_col4">
<record model="survey.question.answer" id="survey_feedback_p2_q2_col4">
<field name="question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">4</field>
<field name="value">Totally agree</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_row1">
<field name="question_id_2" ref="survey_feedback_p2_q2"/>
<record model="survey.question.answer" id="survey_feedback_p2_q2_row1">
<field name="matrix_question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">1</field>
<field name="value">The new layout and design is fresh and up-to-date</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_row2">
<field name="question_id_2" ref="survey_feedback_p2_q2"/>
<record model="survey.question.answer" id="survey_feedback_p2_q2_row2">
<field name="matrix_question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">2</field>
<field name="value">It is easy to find the product that I want</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_row3">
<field name="question_id_2" ref="survey_feedback_p2_q2"/>
<record model="survey.question.answer" id="survey_feedback_p2_q2_row3">
<field name="matrix_question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">3</field>
<field name="value">The tool to compare the products is useful to make a choice</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_row4">
<field name="question_id_2" ref="survey_feedback_p2_q2"/>
<record model="survey.question.answer" id="survey_feedback_p2_q2_row4">
<field name="matrix_question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">4</field>
<field name="value">The checkout process is clear and secure</field>
</record>
<record model="survey.label" id="survey_feedback_p2_q2_row5">
<field name="question_id_2" ref="survey_feedback_p2_q2"/>
<record model="survey.question.answer" id="survey_feedback_p2_q2_row5">
<field name="matrix_question_id" ref="survey_feedback_p2_q2"/>
<field name="sequence">5</field>
<field name="value">I have added products to my wishlist</field>
</record>
+21 -14
View File
@@ -74,15 +74,15 @@ class SurveyQuestion(models.Model):
('multiple_choice', 'Multiple choice: multiple answers allowed'),
('matrix', 'Matrix')], string='Question Type')
# -- simple choice / multiple choice / matrix
labels_ids = fields.One2many(
'survey.label', 'question_id', string='Types of answers', copy=True,
suggested_answer_ids = fields.One2many(
'survey.question.answer', 'question_id', string='Types of answers', copy=True,
help='Labels used for proposed choices: simple choice, multiple choice and columns of matrix')
# -- matrix
matrix_subtype = fields.Selection([
('simple', 'One choice per row'),
('multiple', 'Multiple choices per row')], string='Matrix Type', default='simple')
labels_ids_2 = fields.One2many(
'survey.label', 'question_id_2', string='Rows of the Matrix', copy=True,
matrix_row_ids = fields.One2many(
'survey.question.answer', 'matrix_question_id', string='Matrix Rows', copy=True,
help='Labels used for proposed choices: rows of matrix')
# -- display options
column_nb = fields.Selection([
@@ -261,7 +261,7 @@ class SurveyQuestion(models.Model):
def _validate_matrix(self, answers):
# Validate that each line has been answered
if self.constr_mandatory and len(self.labels_ids_2) != len(answers):
if self.constr_mandatory and len(self.matrix_row_ids) != len(answers):
return {self.id: self.constr_error_msg}
return {}
@@ -276,26 +276,33 @@ class SurveyQuestion(models.Model):
def get_correct_answer_ids(self):
self.ensure_one()
return self.labels_ids.filtered(lambda label: label.is_correct)
return self.suggested_answer_ids.filtered(lambda label: label.is_correct)
class SurveyLabel(models.Model):
""" A suggested answer for a question """
_name = 'survey.label'
class SurveyQuestionAnswer(models.Model):
""" A preconfigured answer for a question. This model stores values used
for
* simple choice, multiple choice: proposed values for the selection /
radio;
* matrix: row and column values;
"""
_name = 'survey.question.answer'
_rec_name = 'value'
_order = 'sequence,id'
_order = 'sequence, id'
_description = 'Survey Label'
question_id = fields.Many2one('survey.question', string='Question', ondelete='cascade')
question_id_2 = fields.Many2one('survey.question', string='Question 2', ondelete='cascade')
matrix_question_id = fields.Many2one('survey.question', string='Question (as matrix row)', ondelete='cascade')
sequence = fields.Integer('Label Sequence order', default=10)
value = fields.Char('Suggested value', translate=True, required=True)
is_correct = fields.Boolean('Is a correct answer')
answer_score = fields.Float('Score for this choice', help="A positive score indicates a correct choice; a negative or null score indicates a wrong answer")
@api.constrains('question_id', 'question_id_2')
@api.constrains('question_id', 'matrix_question_id')
def _check_question_not_empty(self):
"""Ensure that field question_id XOR field question_id_2 is not null"""
"""Ensure that field question_id XOR field matrix_question_id is not null"""
for label in self:
if not bool(label.question_id) != bool(label.question_id_2):
if not bool(label.question_id) != bool(label.matrix_question_id):
raise ValidationError(_("A label must be attached to only one question."))
+5 -5
View File
@@ -593,7 +593,7 @@ class Survey(models.Model):
"""
filter_display_data = []
if filters:
Label = self.env['survey.label']
Label = self.env['survey.question.answer']
for current_filter in filters:
row_id, answer_id = current_filter['row_id'], current_filter['answer_id']
label = Label.browse(answer_id)
@@ -616,7 +616,7 @@ class Survey(models.Model):
# Calculate and return statistics for choice
if question.question_type in ['simple_choice', 'multiple_choice']:
comments = []
answers = OrderedDict((label.id, {'text': label.value, 'count': 0, 'answer_id': label.id, 'answer_score': label.answer_score}) for label in question.labels_ids)
answers = OrderedDict((label.id, {'text': label.value, 'count': 0, 'answer_id': label.id, 'answer_score': label.answer_score}) for label in question.suggested_answer_ids)
for input_line in input_lines:
if input_line.answer_type == 'suggestion' and answers.get(input_line.value_suggested.id) and (not(current_filters) or input_line.user_input_id.id in current_filters):
answers[input_line.value_suggested.id]['count'] += 1
@@ -630,8 +630,8 @@ class Survey(models.Model):
answers = OrderedDict()
res = dict()
comments = []
[rows.update({label.id: label.value}) for label in question.labels_ids_2]
[answers.update({label.id: label.value}) for label in question.labels_ids]
[rows.update({label.id: label.value}) for label in question.matrix_row_ids]
[answers.update({label.id: label.value}) for label in question.suggested_answer_ids]
for cell in product(rows, answers):
res[cell] = 0
for input_line in input_lines:
@@ -692,7 +692,7 @@ class Survey(models.Model):
)
for question in scored_questions:
question_answer_correct = question.labels_ids.filtered(lambda answer: answer.is_correct)
question_answer_correct = question.suggested_answer_ids.filtered(lambda answer: answer.is_correct)
for user_answer in user_answers:
user_answer_lines_question = user_answer.user_input_line_ids.filtered(lambda line: line.question_id == question)
user_answer_correct = user_answer_lines_question.filtered(lambda line: line.answer_is_correct and not line.skipped).mapped('value_suggested')
+5 -5
View File
@@ -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('labels_ids.answer_score')
for answer_score in user_input.question_ids.mapped('suggested_answer_ids.answer_score')
])
if total_possible_score == 0:
@@ -196,8 +196,8 @@ class SurveyUserInputLine(models.Model):
value_date = fields.Date('Date answer')
value_datetime = fields.Datetime('Datetime answer')
value_free_text = fields.Text('Free Text answer')
value_suggested = fields.Many2one('survey.label', string="Suggested answer")
value_suggested_row = fields.Many2one('survey.label', string="Row answer")
value_suggested = fields.Many2one('survey.question.answer', string="Suggested answer")
value_suggested_row = fields.Many2one('survey.question.answer', string="Row answer")
answer_score = fields.Float('Score')
answer_is_correct = fields.Boolean('Correct', compute='_compute_answer_is_correct')
@@ -233,13 +233,13 @@ class SurveyUserInputLine(models.Model):
for vals in vals_list:
value_suggested = vals.get('value_suggested')
if value_suggested:
vals.update({'answer_score': self.env['survey.label'].browse(int(value_suggested)).answer_score})
vals.update({'answer_score': self.env['survey.question.answer'].browse(int(value_suggested)).answer_score})
return super(SurveyUserInputLine, self).create(vals_list)
def write(self, vals):
value_suggested = vals.get('value_suggested')
if value_suggested:
vals.update({'answer_score': self.env['survey.label'].browse(int(value_suggested)).answer_score})
vals.update({'answer_score': self.env['survey.question.answer'].browse(int(value_suggested)).answer_score})
return super(SurveyUserInputLine, self).write(vals)
def _get_save_line_values(self, answer, answer_type):
+4 -4
View File
@@ -7,10 +7,10 @@ access_survey_question_all,survey.question.all,model_survey_question,,0,0,0,0
access_survey_question_user,survey.question.user,model_survey_question,base.group_user,0,0,0,0
access_survey_question_survey_user,survey.question.survey.user,model_survey_question,group_survey_user,1,1,1,1
access_survey_question_survey_manager,survey.question.survey.manager,model_survey_question,group_survey_manager,1,1,1,1
access_survey_label_all,survey.label.all,model_survey_label,,0,0,0,0
access_survey_label_user,survey.label.user,model_survey_label,base.group_user,0,0,0,0
access_survey_label_survey_user,survey.label.survey.user,model_survey_label,group_survey_user,1,1,1,1
access_survey_label_survey_manager,survey.label.survey.manager,model_survey_label,group_survey_manager,1,1,1,1
access_survey_question_answer_all,survey.question.answer.all,model_survey_question_answer,,0,0,0,0
access_survey_question_answer_user,survey.question.answer.user,model_survey_question_answer,base.group_user,0,0,0,0
access_survey_question_answer_survey_user,survey.question.answer.survey.user,model_survey_question_answer,group_survey_user,1,1,1,1
access_survey_question_answer_survey_manager,survey.question.answer.survey.manager,model_survey_question_answer,group_survey_manager,1,1,1,1
access_survey_user_input_all,survey.user_input.all,model_survey_user_input,,0,0,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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
7 access_survey_question_user survey.question.user model_survey_question base.group_user 0 0 0 0
8 access_survey_question_survey_user survey.question.survey.user model_survey_question group_survey_user 1 1 1 1
9 access_survey_question_survey_manager survey.question.survey.manager model_survey_question group_survey_manager 1 1 1 1
10 access_survey_label_all access_survey_question_answer_all survey.label.all survey.question.answer.all model_survey_label model_survey_question_answer 0 0 0 0
11 access_survey_label_user access_survey_question_answer_user survey.label.user survey.question.answer.user model_survey_label model_survey_question_answer base.group_user 0 0 0 0
12 access_survey_label_survey_user access_survey_question_answer_survey_user survey.label.survey.user survey.question.answer.survey.user model_survey_label model_survey_question_answer group_survey_user 1 1 1 1
13 access_survey_label_survey_manager access_survey_question_answer_survey_manager survey.label.survey.manager survey.question.answer.survey.manager model_survey_label model_survey_question_answer group_survey_manager 1 1 1 1
14 access_survey_user_input_all survey.user_input.all model_survey_user_input 0 0 0 0
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
+10 -10
View File
@@ -87,9 +87,9 @@
<field name="perm_create" eval="1"/>
</record>
<record id="survey_label_rule_survey_manager" model="ir.rule">
<field name="name">Survey label: manager: all</field>
<field name="model_id" ref="survey.model_survey_label"/>
<record id="survey_question_answer_rule_survey_manager" model="ir.rule">
<field name="name">Survey question answer: manager: all</field>
<field name="model_id" ref="survey.model_survey_question_answer"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_survey_manager'))]"/>
<field name="perm_unlink" eval="1"/>
@@ -97,9 +97,9 @@
<field name="perm_read" eval="1"/>
<field name="perm_create" eval="1"/>
</record>
<record id="survey_label_rule_survey_user_read" model="ir.rule">
<field name="name">Survey label: officer: read all</field>
<field name="model_id" ref="survey.model_survey_label"/>
<record id="survey_question_answer_rule_survey_user_read" model="ir.rule">
<field name="name">Survey question answer: officer: read all</field>
<field name="model_id" ref="survey.model_survey_question_answer"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_survey_user'))]"/>
<field name="perm_unlink" eval="0"/>
@@ -107,10 +107,10 @@
<field name="perm_read" eval="1"/>
<field name="perm_create" eval="0"/>
</record>
<record id="survey_label_rule_survey_user_cw" model="ir.rule">
<field name="name">Survey label: officer: create/write/unlink linked to own survey only</field>
<field name="model_id" ref="survey.model_survey_question"/>
<field name="domain_force">[('survey_id.create_uid', '=', user.id)]</field>
<record id="survey_question_answer_rule_survey_user_cw" model="ir.rule">
<field name="name">Survey question answer: officer: create/write/unlink linked to own survey only</field>
<field name="model_id" ref="survey.model_survey_question_answer"/>
<field name="domain_force">['|', ('question_id.survey_id.create_uid', '=', user.id), ('matrix_question_id.survey_id.create_uid', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('group_survey_user'))]"/>
<field name="perm_unlink" eval="1"/>
<field name="perm_write" eval="1"/>
+3 -3
View File
@@ -163,7 +163,7 @@ class TestSurveyCommon(common.SavepointCase):
'constr_error_msg': constr_error_msg,
}
if qtype in ('simple_choice', 'multiple_choice'):
base_qvalues['labels_ids'] = [
base_qvalues['suggested_answer_ids'] = [
(0, 0, {
'value': label['value'],
'answer_score': label.get('answer_score', 0),
@@ -172,11 +172,11 @@ class TestSurveyCommon(common.SavepointCase):
]
elif qtype == 'matrix':
base_qvalues['matrix_subtype'] = kwargs.pop('matrix_subtype', 'simple')
base_qvalues['labels_ids'] = [
base_qvalues['suggested_answer_ids'] = [
(0, 0, {'value': label['value'], 'answer_score': label.get('answer_score', 0)})
for label in kwargs.pop('labels')
]
base_qvalues['labels_ids_2'] = [
base_qvalues['matrix_row_ids'] = [
(0, 0, {'value': label['value'], 'answer_score': label.get('answer_score', 0)})
for label in kwargs.pop('labels_2')
]
@@ -116,13 +116,13 @@ class TestCertificationFlow(common.TestSurveyCommon, HttpCase):
csrf_token = self._find_csrf_token(response.text)
with patch.object(IrMailServer, 'connect'):
self._answer_question(q01, q01.labels_ids.ids[3], answer_token, csrf_token)
self._answer_question(q02, q02.labels_ids.ids[1], answer_token, csrf_token)
self._answer_question(q01, q01.suggested_answer_ids.ids[3], answer_token, csrf_token)
self._answer_question(q02, q02.suggested_answer_ids.ids[1], answer_token, csrf_token)
self._answer_question(q03, "I think they're great!", answer_token, csrf_token)
self._answer_question(q04, q04.labels_ids.ids[0], answer_token, csrf_token, button_submit='previous')
self._answer_question(q04, q04.suggested_answer_ids.ids[0], answer_token, csrf_token, button_submit='previous')
self._answer_question(q03, "Just kidding, I don't like it...", answer_token, csrf_token)
self._answer_question(q04, q04.labels_ids.ids[0], answer_token, csrf_token)
self._answer_question(q05, [q05.labels_ids.ids[0], q05.labels_ids.ids[1], q05.labels_ids.ids[3]], answer_token, csrf_token)
self._answer_question(q04, q04.suggested_answer_ids.ids[0], answer_token, csrf_token)
self._answer_question(q05, [q05.suggested_answer_ids.ids[0], q05.suggested_answer_ids.ids[1], q05.suggested_answer_ids.ids[3]], answer_token, csrf_token)
user_inputs.invalidate_cache()
# Check that certification is successfully passed
+5 -5
View File
@@ -130,10 +130,10 @@ class TestSurveyInternals(common.TestSurveyCommon):
for i in range(3):
answer = self._add_answer(self.survey, False, email='public@example.com')
self._add_answer_line(
question, answer, random.choice(question.labels_ids.ids),
question, answer, random.choice(question.suggested_answer_ids.ids),
answer_type='suggestion', answer_fname='value_suggested')
lines = [line.value_suggested.id for line in question.user_input_line_ids]
answers = [{'text': label.value, 'count': lines.count(label.id), 'answer_id': label.id, 'answer_score': label.answer_score} for label in question.labels_ids]
answers = [{'text': label.value, 'count': lines.count(label.id), 'answer_id': label.id, 'answer_score': label.answer_score} for label in question.suggested_answer_ids]
prp_result = self.env['survey.survey'].prepare_result(question)['answers']
self.assertItemsEqual(prp_result, answers)
@@ -147,12 +147,12 @@ class TestSurveyInternals(common.TestSurveyCommon):
for i in range(3):
answer = self._add_answer(self.survey, False, email='public@example.com')
self._add_answer_line(
question, answer, random.choice(question.labels_ids.ids),
answer_type='suggestion', answer_fname='value_suggested', value_suggested_row=random.choice(question.labels_ids_2.ids)
question, answer, random.choice(question.suggested_answer_ids.ids),
answer_type='suggestion', answer_fname='value_suggested', value_suggested_row=random.choice(question.matrix_row_ids.ids)
)
lines = [(line.value_suggested_row.id, line.value_suggested.id) for line in question.user_input_line_ids]
res = {}
for i in product(question.labels_ids_2.ids, question.labels_ids.ids):
for i in product(question.matrix_row_ids.ids, question.suggested_answer_ids.ids):
res[i] = lines.count((i))
self.assertEqual(self.env['survey.survey'].prepare_result(question)['result'], res)
+1 -1
View File
@@ -106,7 +106,7 @@ class TestSurveyFlow(common.TestSurveyCommon, HttpCase):
# Customer submit second page answers
answer_data = {
page1_q0.id: {'value': [page1_q0.labels_ids.ids[0], page1_q0.labels_ids.ids[1]]},
page1_q0.id: {'value': [page1_q0.suggested_answer_ids.ids[0], page1_q0.suggested_answer_ids.ids[1]]},
}
post_data = self._format_submission_data(page_1, answer_data, {'csrf_token': csrf_token, 'token': answer_token, 'button_submit': 'next'})
r = self._access_submit(survey, answer_token, post_data)
@@ -38,7 +38,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'question_type': 'simple_choice',
'display_mode': 'dropdown',
'constr_mandatory': True,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'No',
'sequence': 1,
@@ -54,7 +54,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'sequence': 3,
'question_type': 'multiple_choice',
'column_nb': '4',
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Chair floor protection',
'sequence': 1,
@@ -85,7 +85,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'sequence': 4,
'question_type': 'multiple_choice',
'column_nb': '4',
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Color',
'sequence': 1,
@@ -117,7 +117,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'question_type': 'simple_choice',
'display_mode': 'dropdown',
'constr_mandatory': True,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 1,
'sequence': 1,
@@ -150,7 +150,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'question_type': 'simple_choice',
'display_mode': 'dropdown',
'constr_mandatory': True,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': '20$',
'sequence': 1,
@@ -178,7 +178,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'sequence': 9,
'question_type': 'multiple_choice',
'column_nb': '2',
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Corner Desk Right Sit',
'sequence': 1,
@@ -214,7 +214,7 @@ class TestUiCertification(HttpCaseWithUserDemo):
'question_type': 'simple_choice',
'display_mode': 'dropdown',
'constr_mandatory': True,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Very underpriced',
'sequence': 1,
@@ -43,7 +43,7 @@ class TestUiFeedback(HttpCaseWithUserDemo):
'comments_allowed': True,
'comment_count_as_answer': True,
'constr_mandatory': True,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Once a day',
'sequence': 1,
@@ -78,7 +78,7 @@ class TestUiFeedback(HttpCaseWithUserDemo):
'constr_mandatory': True,
'comments_allowed': True,
'comment_count_as_answer': False,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'High quality',
'sequence': 1,
@@ -113,7 +113,7 @@ class TestUiFeedback(HttpCaseWithUserDemo):
'question_type': 'matrix',
'matrix_subtype': 'multiple',
'constr_mandatory': True,
'labels_ids': [(0, 0, {
'suggested_answer_ids': [(0, 0, {
'value': 'Totally disagree',
'sequence': 1
}), (0, 0, {
@@ -126,7 +126,7 @@ class TestUiFeedback(HttpCaseWithUserDemo):
'value': 'Totally agree',
'sequence': 4,
})],
'labels_ids_2': [(0, 0, {
'matrix_row_ids': [(0, 0, {
'value': 'The new layout and design is fresh and up-to-date',
'sequence': 1,
}), (0, 0, {
+15 -15
View File
@@ -102,8 +102,8 @@
<field name="survey_id" invisible="1" readonly="1"/>
<field name="scoring_type" invisible="1"/>
<separator />
<label for="labels_ids" string="Columns of the Matrix" attrs="{'invisible': [('question_type', '!=', 'matrix')]}" />
<field name="labels_ids" string="Type of answers" context="{'default_question_id': active_id}" attrs="{'invisible': [('question_type', 'not in', ['simple_choice', 'multiple_choice', 'matrix'])]}">
<label for="suggested_answer_ids" string="Columns of the Matrix" attrs="{'invisible': [('question_type', '!=', 'matrix')]}" />
<field name="suggested_answer_ids" string="Type of answers" context="{'default_question_id': active_id}" attrs="{'invisible': [('question_type', 'not in', ['simple_choice', 'multiple_choice', 'matrix'])]}">
<tree editable="bottom">
<field name="sequence" widget="handle"/>
<field name="value" string="Choices"/>
@@ -112,8 +112,8 @@
</tree>
</field>
<separator />
<label for="labels_ids_2" attrs="{'invisible': [('question_type', '!=', 'matrix')]}" />
<field name="labels_ids_2" context="{'default_question_id_2': active_id}" attrs="{'invisible': [('question_type', '!=', 'matrix')]}">
<label for="matrix_row_ids" attrs="{'invisible': [('question_type', '!=', 'matrix')]}" />
<field name="matrix_row_ids" context="{'default_matrix_question_id': active_id}" attrs="{'invisible': [('question_type', '!=', 'matrix')]}">
<tree editable="bottom">
<field name="sequence" widget="handle"/>
<field name="value" string="Rows"/>
@@ -203,22 +203,22 @@
</record>
<!-- LABELS -->
<record model="ir.ui.view" id="survey_label_tree">
<field name="name">survey_label_tree</field>
<field name="model">survey.label</field>
<record id="survey_question_answer_view_tree" model="ir.ui.view">
<field name="name">survey.question.answer.view.tree</field>
<field name="model">survey.question.answer</field>
<field name="arch" type="xml">
<tree string="Survey Label" create="false">
<field name="sequence" widget="handle"/>
<field name="question_id"/>
<field name="question_id_2"/>
<field name="matrix_question_id"/>
<field name="value"/>
<field name="answer_score" groups="base.group_no_one"/>
</tree>
</field>
</record>
<record id="survey_label_search" model="ir.ui.view">
<field name="name">survey_label_search</field>
<field name="model">survey.label</field>
<record id="survey_question_answer_view_search" model="ir.ui.view">
<field name="name">survey.question.answer.view.search</field>
<field name="model">survey.question.answer</field>
<field name="arch" type="xml">
<search string="Search Label">
<field name="question_id"/>
@@ -229,11 +229,11 @@
</field>
</record>
<record model="ir.actions.act_window" id="action_survey_label_form">
<record id="survey_question_answer_action" model="ir.actions.act_window">
<field name="name">Suggested Values</field>
<field name="res_model">survey.label</field>
<field name="res_model">survey.question.answer</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="survey_label_search"/>
<field name="search_view_id" ref="survey_question_answer_view_search"/>
<field name="context">{'search_default_group_by_question': True}</field>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
@@ -249,7 +249,7 @@
sequence="2"/>
<menuitem name="Suggested Values"
id="menu_survey_label_form1"
action="action_survey_label_form"
action="survey_question_answer_action"
parent="survey_menu_questions"
sequence="3"/>
</data>
+6 -6
View File
@@ -241,7 +241,7 @@
<select class="form-control o_survey_form_choice_item">
<option disabled="1" selected="1" value=""
t-att-selected="not answer_line and (not comment_line or not question.comment_count_as_answer) and 'selected' or None">Choose...</option>
<t t-foreach='question.labels_ids' t-as='label'>
<t t-foreach='question.suggested_answer_ids' t-as='label'>
<option t-att-value='label.id'
t-att-selected="answer_line and answer_line.value_suggested == label and 'selected' or None"><t t-esc='label.value'/></option>
</t>
@@ -265,7 +265,7 @@
<div t-if="question.display_mode == 'columns'" class="row o_survey_form_choice o_survey_question_simple_choice_radio"
t-att-data-name="question.id"
data-question-type="simple_choice_radio">
<div t-foreach='question.labels_ids' t-as='label' t-attf-class="col-lg-#{question.column_nb}">
<div t-foreach='question.suggested_answer_ids' t-as='label' t-attf-class="col-lg-#{question.column_nb}">
<label t-att-class="' bg-success ' if quizz_correction and label.answer_score > 0.0 else None">
<input type="radio" t-att-value='label.id' class="o_survey_form_choice_item"
t-att-checked="answer_line and answer_line.value_suggested.id == label.id and 'checked' or None"/>
@@ -293,7 +293,7 @@
<div class="row o_survey_form_choice o_survey_question_multiple_choice"
t-att-data-name="question.id"
t-att-data-question-type="question.question_type">
<div t-foreach='question.labels_ids' t-as='label' t-attf-class="col-lg-#{question.column_nb}">
<div t-foreach='question.suggested_answer_ids' t-as='label' t-attf-class="col-lg-#{question.column_nb}">
<t t-set="answer_line" t-value="answer_lines.filtered(lambda line: line.value_suggested == label)"/>
<label t-att-class="' bg-success ' if quizz_correction and label.answer_score > 0.0 else None">
<input type="checkbox" t-att-value='label.id' class="o_survey_form_choice_item"
@@ -326,13 +326,13 @@
<thead>
<tr>
<th> </th>
<th t-foreach="question.labels_ids" t-as="col_label"><span t-field="col_label.value" /></th>
<th t-foreach="question.suggested_answer_ids" t-as="col_label"><span t-field="col_label.value" /></th>
</tr>
</thead>
<tbody>
<tr t-foreach="question.labels_ids_2" t-as="row_label">
<tr t-foreach="question.matrix_row_ids" t-as="row_label">
<th><span t-field="row_label.value" /></th>
<td t-foreach="question.labels_ids" t-as="col_label">
<td t-foreach="question.suggested_answer_ids" t-as="col_label">
<t t-set="answer" t-value="answer_lines.filtered(lambda line: line.value_suggested == col_label and line.value_suggested_row == row_label)"/>
<input t-att-type="'checkbox' if question.matrix_subtype == 'multiple' else 'radio'"
t-att-name="'%s_%s' % (question_id, row_label.id)" t-att-value='col_label.id'
@@ -77,7 +77,7 @@ class TestUi(TestUICommon):
'question_type': 'simple_choice',
'display_mode': 'dropdown',
'constr_mandatory': True,
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Fir',
'sequence': 1,
@@ -99,7 +99,7 @@ class TestUi(TestUICommon):
'sequence': 3,
'question_type': 'multiple_choice',
'column_nb': '4',
'labels_ids': [
'suggested_answer_ids': [
(0, 0, {
'value': 'Chair',
'sequence': 1,
@@ -34,24 +34,24 @@
<field name="display_mode">dropdown</field>
<field name="constr_mandatory" eval="True" />
</record>
<record model="survey.label" id="furniture_certification_page_1_question_1_choice_1">
<record model="survey.question.answer" id="furniture_certification_page_1_question_1_choice_1">
<field name="question_id" ref="furniture_certification_page_1_question_1"/>
<field name="sequence">1</field>
<field name="value">Fir</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_1_choice_2">
<record model="survey.question.answer" id="furniture_certification_page_1_question_1_choice_2">
<field name="question_id" ref="furniture_certification_page_1_question_1"/>
<field name="sequence">2</field>
<field name="value">Oak</field>
<field name="is_correct" eval="True" />
<field name="answer_score">2.0</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_1_choice_3">
<record model="survey.question.answer" id="furniture_certification_page_1_question_1_choice_3">
<field name="question_id" ref="furniture_certification_page_1_question_1"/>
<field name="sequence">3</field>
<field name="value">Ash</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_1_choice_4">
<record model="survey.question.answer" id="furniture_certification_page_1_question_1_choice_4">
<field name="question_id" ref="furniture_certification_page_1_question_1"/>
<field name="sequence">4</field>
<field name="value">Beech</field>
@@ -64,34 +64,34 @@
<field name="question_type">multiple_choice</field>
<field name="column_nb">4</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_2_choice_1">
<record model="survey.question.answer" id="furniture_certification_page_1_question_2_choice_1">
<field name="question_id" ref="furniture_certification_page_1_question_2"/>
<field name="sequence">1</field>
<field name="value">Chair</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_2_choice_2">
<record model="survey.question.answer" id="furniture_certification_page_1_question_2_choice_2">
<field name="question_id" ref="furniture_certification_page_1_question_2"/>
<field name="sequence">2</field>
<field name="value">Table</field>
<field name="answer_score">-1.0</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_2_choice_3">
<record model="survey.question.answer" id="furniture_certification_page_1_question_2_choice_3">
<field name="question_id" ref="furniture_certification_page_1_question_2"/>
<field name="sequence">3</field>
<field name="value">Desk</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_2_choice_4">
<record model="survey.question.answer" id="furniture_certification_page_1_question_2_choice_4">
<field name="question_id" ref="furniture_certification_page_1_question_2"/>
<field name="sequence">4</field>
<field name="value">Shelve</field>
<field name="is_correct" eval="True" />
<field name="answer_score">1.0</field>
</record>
<record model="survey.label" id="furniture_certification_page_1_question_2_choice_5">
<record model="survey.question.answer" id="furniture_certification_page_1_question_2_choice_5">
<field name="question_id" ref="furniture_certification_page_1_question_2"/>
<field name="sequence">5</field>
<field name="value">Bed</field>
@@ -108,7 +108,7 @@ class TestCourseCertificationFailureFlow(TestSurveyCommon):
def fill_in_answer(self, answer, questions, good_answers=False):
""" Fills in the user_input with answers for all given questions.
You can control whether the answer will be correct or not with the 'good_answers' param.
(It's assumed that wrong answers are at index 0 of question.labels_ids and good answers at index 1) """
(It's assumed that wrong answers are at index 0 of question.suggested_answer_ids and good answers at index 1) """
answer.write({
'state': 'done',
'user_input_line_ids': [
@@ -116,7 +116,7 @@ class TestCourseCertificationFailureFlow(TestSurveyCommon):
'question_id': question.id,
'answer_type': 'suggestion',
'answer_score': 1 if good_answers else 0,
'value_suggested': question.labels_ids[1 if good_answers else 0].id
'value_suggested': question.suggested_answer_ids[1 if good_answers else 0].id
}) for question in questions
]
})