Sélectionner une révision Git
survey_question.py 2,41 Kio
# © 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