[IMP] survey: improve validation parameters UI and logic
Purpose: Showing validation parameters with an arrow on one line (when
possible) is prettier.
Additionally, we now
- Improve data consistency by preventing saving `validation_required` without
setting validation parameters (also allows to keep arrow invisible when no
value is set)
- Explicitly add required flags to float values as they cannot be not set (see
c5ae9b38).
Task-2623482
Part of odoo#78705
Part-of: odoo/odoo#78705
This commit is contained in:
@@ -124,7 +124,7 @@ class SurveyQuestion(models.Model):
|
||||
validation_max_date = fields.Date('Maximum Date')
|
||||
validation_min_datetime = fields.Datetime('Minimum Datetime')
|
||||
validation_max_datetime = fields.Datetime('Maximum Datetime')
|
||||
validation_error_msg = fields.Char('Validation Error message', translate=True)
|
||||
validation_error_msg = fields.Char('Validation Error', translate=True)
|
||||
constr_mandatory = fields.Boolean('Mandatory Answer')
|
||||
constr_error_msg = fields.Char('Error message', translate=True)
|
||||
# answers
|
||||
@@ -312,6 +312,20 @@ class SurveyQuestion(models.Model):
|
||||
else:
|
||||
question.is_scored_question = False
|
||||
|
||||
@api.onchange('question_type', 'validation_required')
|
||||
def _onchange_validation_parameters(self):
|
||||
"""Ensure no value stays set but not visible on form,
|
||||
preventing saving (+consistency with question type)."""
|
||||
self.validation_email = False
|
||||
self.validation_length_min = 0
|
||||
self.validation_length_max = 0
|
||||
self.validation_min_date = False
|
||||
self.validation_max_date = False
|
||||
self.validation_min_datetime = False
|
||||
self.validation_max_datetime = False
|
||||
self.validation_min_float_value = 0
|
||||
self.validation_max_float_value = 0
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# VALIDATION
|
||||
# ------------------------------------------------------------
|
||||
|
||||
@@ -23,4 +23,11 @@
|
||||
.o_preview_questions_choice {
|
||||
line-height: 1rem;
|
||||
}
|
||||
|
||||
.o_survey_question_validation_parameters {
|
||||
@extend .oe_inline;
|
||||
> div, input.o_survey_question_validation_inline {
|
||||
width: 45% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
</div>
|
||||
<div class="oe_title" style="width: 100%;">
|
||||
<label for="title" string="Section" attrs="{'invisible': [('is_page', '=', False)]}"/>
|
||||
<label for="title" string="Question" attrs="{'invisible': [('is_page', '=', True)]}"/>
|
||||
<label for="title" string="Question" attrs="{'invisible': [('is_page', '=', True)]}"/><br/>
|
||||
<field name="title" placeholder="e.g. "What is the..."" colspan="4"/>
|
||||
<field name="questions_selection" invisible="1"/>
|
||||
</div>
|
||||
@@ -115,12 +115,15 @@
|
||||
]}">
|
||||
<group>
|
||||
<group attrs="{'invisible': [('question_type', 'not in', ['char_box', 'numerical_box', 'date', 'datetime'])]}">
|
||||
<field name="answer_numerical_box" string="Correct Answer"
|
||||
attrs="{'invisible': [('question_type', '!=', 'numerical_box')], 'required': [('is_scored_question', '=', True), ('question_type', '=', 'numerical_box')]}" class="oe_inline"/>
|
||||
<field name="answer_date" string="Correct Answer"
|
||||
attrs="{'invisible': [('question_type', '!=', 'date')], 'required': [('is_scored_question', '=', True), ('question_type', '=', 'date')]}" class="oe_inline"/>
|
||||
<field name="answer_datetime" string="Correct Answer"
|
||||
attrs="{'invisible': [('question_type', '!=', 'datetime')], 'required': [('is_scored_question', '=', True), ('question_type', '=', 'datetime')]}" class="oe_inline"/>
|
||||
<field name="answer_numerical_box" string="Correct Answer" class="oe_inline"
|
||||
attrs="{'invisible': [('question_type', '!=', 'numerical_box')],
|
||||
'required': [('is_scored_question', '=', True), ('question_type', '=', 'numerical_box')]}" />
|
||||
<field name="answer_date" string="Correct Answer" class="oe_inline"
|
||||
attrs="{'invisible': [('question_type', '!=', 'date')],
|
||||
'required': [('is_scored_question', '=', True), ('question_type', '=', 'date')]}"/>
|
||||
<field name="answer_datetime" string="Correct Answer" class="oe_inline"
|
||||
attrs="{'invisible': [('question_type', '!=', 'datetime')],
|
||||
'required': [('is_scored_question', '=', True), ('question_type', '=', 'datetime')]}"/>
|
||||
|
||||
<field name="validation_email" attrs="{'invisible': [('question_type', '!=', 'char_box')]}"/>
|
||||
<field name="save_as_email" attrs="{'invisible': ['|', ('validation_email', '=', False), ('question_type', '!=', 'char_box')]}"/>
|
||||
@@ -171,35 +174,50 @@
|
||||
<group string="Answers">
|
||||
<!-- Global validation setting -->
|
||||
<field name="validation_required"
|
||||
attrs="{'invisible': [('question_type', 'not in', ['char_box', 'numerical_box', 'date', 'datetime'])]}"/>
|
||||
<!-- Char -->
|
||||
<field name="validation_length_min" attrs="{'invisible': ['|', ('question_type', '!=', 'char_box'), ('validation_required', '=', False)]}"/>
|
||||
<field name="validation_length_max" attrs="{'invisible': ['|', ('question_type', '!=', 'char_box'), ('validation_required', '=', False)]}"/>
|
||||
<!-- Numerical -->
|
||||
<field name="validation_min_float_value"
|
||||
attrs="{'invisible': ['|', ('question_type', '!=', 'numerical_box'), ('validation_required', '=', False)]}"/>
|
||||
<field name="validation_max_float_value"
|
||||
attrs="{'invisible': ['|', ('question_type', '!=', 'numerical_box'), ('validation_required', '=', False)]}"/>
|
||||
<!-- Date and datetime -->
|
||||
<field name="validation_min_date" attrs="{'invisible': ['|', ('question_type', '!=', 'date'), ('validation_required', '=', False)]}"/>
|
||||
<field name="validation_max_date" attrs="{'invisible': ['|', ('question_type', '!=', 'date'), ('validation_required', '=', False)]}"/>
|
||||
<field name="validation_min_datetime" widget="datetime"
|
||||
attrs="{'invisible': ['|', ('question_type', '!=', 'datetime'), ('validation_required', '=', False)]}"/>
|
||||
<field name="validation_max_datetime" widget="datetime"
|
||||
attrs="{'invisible': ['|', ('question_type', '!=', 'datetime'), ('validation_required', '=', False)]}"/>
|
||||
attrs="{'invisible': [('question_type', 'not in', ['char_box', 'numerical_box', 'date', 'datetime'])]}"/>
|
||||
<div class="o_wrap_label o_form_label" attrs="{'invisible': [('validation_required', '=', False)]}">Min/Max Limits</div>
|
||||
<div class="o_survey_question_validation_parameters" attrs="{'invisible': [('validation_required', '=', False)]}">
|
||||
<!-- Minima -->
|
||||
<field name="validation_length_min" class="o_survey_question_validation_inline" nolabel="1" placeholder="Minimum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'char_box')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'char_box')]}"/>
|
||||
<field name="validation_min_float_value" class="o_survey_question_validation_inline" nolabel="1" placeholder="Minimum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'numerical_box')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'numerical_box')]}"/>
|
||||
<field name="validation_min_date" nolabel="1" placeholder="Minimum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'date')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'date'), ('validation_max_date', '=', False)]}"/>
|
||||
<field name="validation_min_datetime" nolabel="1" placeholder="Minimum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'datetime')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'datetime'), ('validation_max_datetime', '=', False)]}"/>
|
||||
|
||||
<i class="fa fa-long-arrow-right mx-2" aria-label="Arrow icon" title="Arrow"/>
|
||||
<!-- Maxima -->
|
||||
<field name="validation_length_max" class="o_survey_question_validation_inline" nolabel="1" placeholder="Maximum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'char_box')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'char_box')]}"/>
|
||||
<field name="validation_max_float_value" class="o_survey_question_validation_inline" nolabel="1" placeholder="Maximum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'numerical_box')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'numerical_box')]}"/>
|
||||
<field name="validation_max_date" nolabel="1" placeholder="Maximum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'date')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'date'), ('validation_min_date', '=', False)]}"/>
|
||||
<field name="validation_max_datetime" nolabel="1" placeholder="Maximum"
|
||||
attrs="{'invisible': [('question_type', '!=', 'datetime')],
|
||||
'required': [('validation_required', '=', True), ('question_type', '=', 'datetime'), ('validation_min_datetime', '=', False)]}"/>
|
||||
</div>
|
||||
<field name="validation_error_msg" attrs="{
|
||||
'invisible': [('validation_required', '=', False)]}"
|
||||
placeholder="The answer you entered is not valid."/>
|
||||
placeholder="Displayed when the answer entered is not valid."/>
|
||||
|
||||
<field name="matrix_subtype" attrs="{'invisible':[('question_type','not in',['matrix'])],'required':[('question_type','=','matrix')]}"/>
|
||||
<field name="question_placeholder"
|
||||
attrs="{'invisible': [('question_type', 'not in', ['text_box', 'char_box', 'date', 'datetime', 'numerical_box'])]}"
|
||||
placeholder="Help Participants know what to write"/>
|
||||
<field name='comments_allowed' attrs="{'invisible':[('question_type','not in',['simple_choice','multiple_choice', 'matrix'])]}"/>
|
||||
<field name='comments_message'
|
||||
attrs="{'invisible': ['|', ('question_type', 'not in', ['simple_choice','multiple_choice', 'matrix']), ('comments_allowed', '=', False)]}"
|
||||
placeholder="If other, please specify:"/>
|
||||
attrs="{'invisible': [('question_type', 'not in', ['text_box', 'char_box', 'date', 'datetime', 'numerical_box'])]}"
|
||||
placeholder="Help Participants know what to write"/>
|
||||
<field name="comments_allowed" attrs="{'invisible':[('question_type','not in',['simple_choice','multiple_choice', 'matrix'])]}"/>
|
||||
<field name="comments_message"
|
||||
attrs="{'invisible': ['|', ('question_type', 'not in', ['simple_choice','multiple_choice', 'matrix']), ('comments_allowed', '=', False)]}"
|
||||
placeholder="If other, please specify:"/>
|
||||
<field name='comment_count_as_answer'
|
||||
attrs="{'invisible': ['|', ('question_type', 'not in', ['simple_choice','multiple_choice', 'matrix']), ('comments_allowed', '=', False)]}"/>
|
||||
</group>
|
||||
|
||||
Reference in New Issue
Block a user