Odoo modules related to surveys
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
5.3 KiB

# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.addons.survey.models.survey import dict_keys_startswith
class SurveyUserInputLine(models.Model):
_inherit = 'survey.user_input_line'
answer_type = fields.Selection(selection_add=[('dropdown', 'Dropdown')], string='Answer Type')
matrix_subtype = fields.Selection(related='question_id.matrix_subtype')
value_id = fields.Many2one('survey.label.value', string="Value Dropdown")
@api.model
def save_line_matrix(self, user_input_id, question, post, answer_tag):
vals = {
'user_input_id': user_input_id,
'question_id': question.id,
'survey_id': question.survey_id.id,
'skipped': False
}
suil = self.search([
('user_input_id', '=', user_input_id),
('survey_id', '=', question.survey_id.id),
('question_id', '=', question.id)
])
suil.sudo().unlink()
no_answers = True
ca_dict = dict_keys_startswith(post, answer_tag + '_')
comment_answer = ca_dict.pop(("%s_%s" % (answer_tag, 'comment')), '').strip()
if comment_answer:
vals.update({
'answer_type': 'text',
'value_text': comment_answer,
})
self.create(vals)
no_answers = False
if question.matrix_subtype == 'simple':
for row in question.labels_ids_2:
a_tag = "%s_%s" % (answer_tag, row.id)
if a_tag in ca_dict:
no_answers = False
vals.update({
'answer_type': 'suggestion',
'value_suggested': ca_dict[a_tag],
'value_suggested_row': row.id,
})
self.create(vals)
elif question.matrix_subtype == 'multiple':
for col in question.labels_ids:
for row in question.labels_ids_2:
a_tag = "%s_%s_%s" % (answer_tag, row.id, col.id)
if a_tag in ca_dict:
no_answers = False
vals.update({
'answer_type': 'suggestion',
'value_suggested': col.id,
'value_suggested_row': row.id,
})
self.create(vals)
elif question.matrix_subtype == 'custom':
for col in question.labels_ids:
for row in question.labels_ids_2:
a_tag = "%s_%s_%s" % (answer_tag, row.id, col.id)
if a_tag in ca_dict:
no_answers = False
if post.get(a_tag):
sline = a_tag.split('_')[-1]
label_obj = question.labels_ids.browse(int(sline))
if label_obj.type == 'textbox':
vals.update({
'answer_type': 'text',
'value_suggested': col.id,
'value_suggested_row': row.id,
'value_text': post.get(a_tag),
})
elif label_obj.type == 'free_text':
vals.update({
'answer_type': 'free_text',
'value_suggested': col.id,
'value_suggested_row': row.id,
'value_free_text': post.get(a_tag),
})
elif label_obj.type == 'numerical_box':
vals.update({
'answer_type': 'number',
'value_suggested': col.id,
'value_suggested_row': row.id,
'value_number': post.get(a_tag),
})
elif label_obj.type == 'date':
vals.update({
'answer_type': 'date',
'value_suggested': col.id,
'value_suggested_row': row.id,
'value_date': post.get(a_tag),
})
elif label_obj.type == 'dropdown':
vals.update({
'answer_type': 'dropdown',
'value_suggested': col.id,
'value_suggested_row': row.id,
'value_id': int(post.get(a_tag)),
})
else:
vals.update({
'answer_type': 'suggestion',
'value_suggested': col.id,
'value_suggested_row': row.id})
self.create(vals)
if no_answers:
vals.update({
'answer_type': None,
'skipped': True,
})
self.create(vals)
return True