76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import logging
|
|
|
|
from odoo import models, fields, api
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SurveyQuestion(models.Model):
|
|
_inherit = 'survey.question'
|
|
|
|
question_type = fields.Selection(
|
|
selection_add=[('file', 'Upload file')])
|
|
upload_multiple_file = fields.Boolean()
|
|
|
|
|
|
class SurveyUserInputLine(models.Model):
|
|
_inherit = 'survey.user_input.line'
|
|
|
|
answer_type = fields.Selection(
|
|
selection_add=[('file', 'Upload file')])
|
|
value_file_ids = fields.Many2many(
|
|
comodel_name='ir.attachment', string='Survey file', readonly=True,)
|
|
value_file = fields.Many2one(
|
|
comodel_name='ir.attachment', string='Survey file', readonly=True,)
|
|
filename = fields.Char(
|
|
compute='_compute_filename', )
|
|
|
|
@api.depends('value_file_ids')
|
|
def _compute_filename(self):
|
|
for obj in self:
|
|
if not obj.value_file_ids:
|
|
obj.filename = ''
|
|
continue
|
|
filename = ', '.join(
|
|
['{}'.format(x.name) for x in obj.value_file_ids])
|
|
obj.filename = filename
|
|
|
|
@api.constrains('skipped', 'answer_type')
|
|
def _check_answer_type_skipped(self):
|
|
for line in self:
|
|
if line.answer_type != 'file':
|
|
return super(
|
|
SurveyUserInputLine, line)._check_answer_type_skipped()
|
|
return None
|
|
|
|
|
|
class SurveyUserInput(models.Model):
|
|
_inherit = "survey.user_input"
|
|
|
|
# pylint: disable=R1710
|
|
def save_lines(self, question, answer, comment=None):
|
|
old_answers = self.env['survey.user_input.line'].search([
|
|
('user_input_id', '=', self.id),
|
|
('question_id', '=', question.id)])
|
|
if question.question_type != 'file':
|
|
return super(SurveyUserInput, self).save_lines(
|
|
question, answer, comment)
|
|
self._save_line_files(question, old_answers, answer)
|
|
|
|
def _save_line_files(self, question, old_answers, answers):
|
|
vals = {
|
|
'user_input_id': self.id, 'question_id': question.id,
|
|
'skipped': False, 'answer_type': question.question_type, }
|
|
if answers and answers.get('values') \
|
|
and answers.get('is_answer_update'):
|
|
value_file_lines = [(0, 0, {
|
|
'name': answer.get('file_name'), 'datas': answer.get('data'),
|
|
'type': 'binary', }) for answer in answers.get('values')]
|
|
vals.update({'value_file_ids': value_file_lines})
|
|
if old_answers:
|
|
old_answers.unlink()
|
|
old_answers.create(vals)
|
|
else:
|
|
vals.update({'answer_type': None, 'skipped': True})
|
|
return old_answers
|