# -*- coding: utf-8 -*-
from odoo import models, fields, api
from markupsafe import Markup
class SurveyUserInputLine(models.Model):
_inherit = 'survey.user_input.line'
file_display = fields.Html('File Display', compute='_compute_file_display')
signature_display = fields.Html('Signature Display', compute='_compute_signature_display')
many2one_display = fields.Html('Many2one Display', compute='_compute_many2one_display')
many2many_display = fields.Html('Many2many Display', compute='_compute_many2many_display')
extra_field_display = fields.Html('Extra Field Display', compute='_compute_extra_field_display')
show_value_char_box = fields.Boolean('Show Value Char Box', compute='_compute_show_value_char_box')
show_file_display = fields.Boolean('Show File Display', compute='_compute_show_file_display')
show_signature_display = fields.Boolean('Show Signature Display', compute='_compute_show_signature_display')
show_many2one_display = fields.Boolean('Show Many2one Display', compute='_compute_show_many2one_display')
show_many2many_display = fields.Boolean('Show Many2many Display', compute='_compute_show_many2many_display')
show_extra_field_display = fields.Boolean('Show Extra Field Display', compute='_compute_show_extra_field_display')
answer_type_display = fields.Char('Answer Type Display', compute='_compute_answer_type_display')
@api.depends('value_char_box', 'question_id.question_type', 'answer_type')
def _compute_file_display(self):
for line in self:
if line.answer_type == 'char_box' and line.question_id and line.question_id.question_type == 'file':
if line.value_char_box and line.value_char_box.isdigit():
attachment = self.env['ir.attachment'].sudo().browse(int(line.value_char_box))
if attachment.exists():
line.file_display = Markup(f'{attachment.name}')
else:
line.file_display = 'File not found'
else:
line.file_display = line.value_char_box or 'No file'
else:
line.file_display = False
@api.depends('value_char_box', 'question_id.question_type', 'answer_type')
def _compute_signature_display(self):
for line in self:
if line.answer_type == 'char_box' and line.question_id and line.question_id.question_type == 'signature':
if line.value_char_box and line.value_char_box.startswith('data:image/'):
line.signature_display = Markup(f'')
else:
line.signature_display = 'No signature'
else:
line.signature_display = False
@api.depends('value_char_box', 'question_id.question_type', 'answer_type')
def _compute_many2one_display(self):
for line in self:
if line.answer_type == 'char_box' and line.question_id and line.question_id.question_type == 'many2one':
if line.value_char_box and ',' in line.value_char_box:
model_name, record_id = line.value_char_box.split(',', 1)
try:
record = self.env[model_name].sudo().browse(int(record_id))
if record.exists():
line.many2one_display = record.display_name
else:
line.many2one_display = 'Record not found'
except:
line.many2one_display = line.value_char_box
else:
line.many2one_display = line.value_char_box or 'No selection'
else:
line.many2one_display = False
@api.depends('value_char_box', 'question_id.question_type', 'answer_type')
def _compute_many2many_display(self):
for line in self:
if line.answer_type == 'char_box' and line.question_id and line.question_id.question_type == 'many2many':
if line.value_char_box and line.question_id.many2many_model:
record_ids = line.value_char_box.split(',') if line.value_char_box else []
names = []
for record_id in record_ids:
try:
record = self.env[line.question_id.many2many_model].sudo().browse(int(record_id.strip()))
if record.exists():
names.append(record.display_name)
except:
continue
line.many2many_display = ', '.join(names) if names else 'No selections'
else:
line.many2many_display = line.value_char_box or 'No selections'
else:
line.many2many_display = False
@api.depends('value_char_box', 'question_id.question_type', 'answer_type')
def _compute_extra_field_display(self):
for line in self:
if line.answer_type == 'char_box' and line.question_id and line.question_id.question_type in ['color', 'email', 'url', 'time', 'range', 'week', 'password', 'month', 'address', 'name']:
if line.question_id.question_type == 'color':
line.extra_field_display = Markup(f'