# © 2020 Le Filament (<https://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models import base64 class SurveyQuestion(models.Model): _inherit = 'survey.question' type = fields.Selection([ ('free_text', 'Multiple Lines Text Box'), ('textbox', 'Single Line Text Box'), ('numerical_box', 'Numerical Value'), ('date', 'Date'), ('upload_file', 'Télécharger un fichier'), ('simple_choice', 'Multiple choice: only one answer'), ('multiple_choice', 'Multiple choice: multiple answers allowed'), ('matrix', 'Matrix')], string='Type of Question', default='free_text', required=True) @api.multi def validate_upload_file(self, post, answer_tag): self.ensure_one() errors = {} answer = post[answer_tag] # Empty answer to mandatory question if self.constr_mandatory and not answer: errors.update({answer_tag: self.constr_error_msg}) return errors class SurveyUserInputLine(models.Model): _inherit = 'survey.user_input_line' answer_type = fields.Selection([ ('text', 'Text'), ('number', 'Number'), ('date', 'Date'), ('free_text', 'Free Text'), ('upload_file', 'Upload file'), ('suggestion', 'Suggestion'), ('list', 'List box'), ('matrix_models', 'Matrix models')], string='Answer Type') file = fields.Binary('Fichier téléchargé') file_type = fields.Char('Type de fichier') @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 = base64.encodebytes(post[answer_tag].read()) if post[answer_tag] else None if file: vals.update({'answer_type': 'upload_file', 'file': file, 'file_type': post[answer_tag].mimetype}) else: vals.update({'answer_type': None, '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