# -*- 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