# -*- coding: utf-8 -*- import base64 from odoo import models, fields, api, _ ANSWER_TYPES = [ ('text', _('Text')), ('number', _('Number')), ('date', _('Date')), ('free_text', _('Free Text')), ('upload_file', _('Attachment')), ('suggestion', _('Suggestion')), ] FILE_TYPES = [ ('image', _('Image')), ('pdf', _('PDF file')), ] class SurveyUserInputLine(models.Model): _inherit = 'survey.user_input_line' answer_type = fields.Selection(selection=ANSWER_TYPES) file = fields.Binary(string='Uploaded file') filename = fields.Char(string='Uploaded file name') file_type = fields.Selection(selection=FILE_TYPES, string="File type") @api.model def save_line_upload_file(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 } file = False # import ipdb; ipdb.set_trace() if question.constr_mandatory: file = base64.encodebytes(post[answer_tag].read()) else: file = base64.encodebytes(post[answer_tag].read()) if not isinstance(post[answer_tag], str) else None if answer_tag in post and not isinstance(post[answer_tag], str): vals.update({ 'answer_type': 'upload_file', 'file': file, 'filename': post[answer_tag].filename, }) if post[answer_tag].content_type == 'application/pdf': vals.update({'file_type': 'pdf'}) if 'image/' in post[answer_tag].content_type: vals.update({'file_type': 'image'}) else: vals.update({ 'answer_type': None, 'file': False, 'filename': False, 'skipped': True, }) old_uil = self.search([ ('user_input_id', '=', user_input_id), ('survey_id', '=', question.survey_id.id), ('question_id', '=', question.id) ]) if old_uil: old_uil.write(vals) else: old_uil.create(vals) return True