diff --git a/survey_attachment/__init__.py b/survey_attachment/__init__.py new file mode 100644 index 0000000..91c5580 --- /dev/null +++ b/survey_attachment/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/survey_attachment/__manifest__.py b/survey_attachment/__manifest__.py new file mode 100644 index 0000000..4be772e --- /dev/null +++ b/survey_attachment/__manifest__.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Survey Attachment', + 'version': '1.0.0', + 'summary': """ + This module provides a new type of question in surveys, that allows to join a file as answer. + """, + 'description': """ """, + 'author': 'Fogits Solutions', + 'website': 'https://www.fogits.com/', + 'license': 'AGPL-3', + 'category': 'Marketing', + 'depends': [ + 'survey', + ], + 'data': [ + 'templates/upload_file.xml', + 'templates/page.xml', + 'templates/survey_print.xml', + 'views/survey_user_input_line.xml', + ], + 'demo': [], + 'auto_install': False, + 'external_dependencies': [], + 'application': False, + 'css': [], + 'images': ['static/description/survey.jpg'], + 'js': [], + 'installable': True, + 'maintainer': 'Fogits Solutions, Sudokeys', + 'pre_init_hook': '', + 'post_init_hook': '', + 'uninstall_hook': '', +} diff --git a/survey_attachment/controllers/__init__.py b/survey_attachment/controllers/__init__.py new file mode 100644 index 0000000..cd4d6a8 --- /dev/null +++ b/survey_attachment/controllers/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import main \ No newline at end of file diff --git a/survey_attachment/controllers/main.py b/survey_attachment/controllers/main.py new file mode 100644 index 0000000..064ce8a --- /dev/null +++ b/survey_attachment/controllers/main.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from odoo import fields, http, SUPERUSER_ID +from odoo.http import request +from odoo.addons.survey.controllers.main import Survey +import logging + +_logger = logging.getLogger(__name__) + + +class SurveyAttachment(Survey): + # Printing routes + @http.route(['/survey/print/', + '/survey/print//'], + type='http', auth='public', website=True) + def print_survey(self, survey, token=None, **post): + '''Display an survey in printable view; if is set, it will + grab the answers of the user_input_id that has .''' + + survey_question = request.env['survey.question'] + user_input = request.env['survey.user_input'] + user_input_line = request.env['survey.user_input_line'] + + question_ids = survey_question.sudo().search([('type', '=', 'upload_file'), ('survey_id', '=', survey.id)]) + user_input_id = user_input.sudo().search([('token', '=', token), ('survey_id', '=', survey.id)]) + + user_input_line_upload_file = [] + for question in question_ids: + user_input_line = user_input_line.search([ + ('user_input_id', '=', user_input_id.id), + ('survey_id', '=', survey.id), + ('question_id', '=', question.id), + ('answer_type', '=', 'upload_file') + ]) + user_input_line_upload_file.append(user_input_line) + return request.render('survey.survey_print', + {'survey': survey, + 'token': token, + 'page_nr': 0, + 'quizz_correction': True if survey.quizz_mode and token else False, + 'user_input_line_upload_file': user_input_line_upload_file}) diff --git a/survey_attachment/i18n/fr.po b/survey_attachment/i18n/fr.po new file mode 100644 index 0000000..8438cfb --- /dev/null +++ b/survey_attachment/i18n/fr.po @@ -0,0 +1,139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * survey_attachment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-03-31 13:31+0000\n" +"PO-Revision-Date: 2020-03-31 13:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__answer_type +msgid "Answer Type" +msgstr "Type de réponse" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:9 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Attachment" +msgstr " jointe" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:8 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Date" +msgstr "Date" + +#. module: survey_attachment +#: model_terms:ir.ui.view,arch_db:survey_attachment.upload_file +msgid "Download" +msgstr "Télécharger" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__file_type +msgid "File type" +msgstr "Type de fichier" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_user_input_line.py:7 +#: selection:survey.user_input_line,file_type:0 +#, python-format +msgid "Image" +msgstr "Image" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_question__question_attachment +msgid "Joined attachment" +msgstr "Pièce jointe" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:12 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Matrix" +msgstr "Matrice" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:5 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Multiple Lines Text Box" +msgstr "Plusieurs lignes de champ de texte" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:11 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Multiple choice: multiple answers allowed" +msgstr "Choix multiples : réponses multiples" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:10 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Multiple choice: only one answer" +msgstr "Choix multiples : une seule réponse possible" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:7 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Numerical Value" +msgstr "Valeur numérique" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_user_input_line.py:8 +#: selection:survey.user_input_line,file_type:0 +#, python-format +msgid "PDF file" +msgstr "Fichier PDF" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:6 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Single Line Text Box" +msgstr "Ligne de texte unique" + +#. module: survey_attachment +#: model:ir.model,name:survey_attachment.model_survey_question +msgid "Survey Question" +msgstr "Question du sondage" + +#. module: survey_attachment +#: model:ir.model,name:survey_attachment.model_survey_user_input_line +msgid "Survey User Input Line" +msgstr "Ligne de saisie pour l'utilisateur du sondage" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_question__type +msgid "Type of Question" +msgstr "Type de question" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__file +msgid "Uploaded file" +msgstr "Fichier joint" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__filename +msgid "Uploaded file name" +msgstr "Nom du fichier joint" diff --git a/survey_attachment/i18n/survey_attachment.pot b/survey_attachment/i18n/survey_attachment.pot new file mode 100644 index 0000000..6c8ad0b --- /dev/null +++ b/survey_attachment/i18n/survey_attachment.pot @@ -0,0 +1,139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * survey_attachment +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-03-31 13:32+0000\n" +"PO-Revision-Date: 2020-03-31 13:32+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__answer_type +msgid "Answer Type" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:9 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Attachment" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:8 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Date" +msgstr "" + +#. module: survey_attachment +#: model_terms:ir.ui.view,arch_db:survey_attachment.upload_file +msgid "Download" +msgstr "" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__file_type +msgid "File type" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_user_input_line.py:7 +#: selection:survey.user_input_line,file_type:0 +#, python-format +msgid "Image" +msgstr "" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_question__question_attachment +msgid "Joined attachment" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:12 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Matrix" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:5 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Multiple Lines Text Box" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:11 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Multiple choice: multiple answers allowed" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:10 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Multiple choice: only one answer" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:7 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Numerical Value" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_user_input_line.py:8 +#: selection:survey.user_input_line,file_type:0 +#, python-format +msgid "PDF file" +msgstr "" + +#. module: survey_attachment +#: code:addons/survey_attachment/models/survey_question.py:6 +#: selection:survey.question,type:0 +#: selection:survey.user_input_line,answer_type:0 +#, python-format +msgid "Single Line Text Box" +msgstr "" + +#. module: survey_attachment +#: model:ir.model,name:survey_attachment.model_survey_question +msgid "Survey Question" +msgstr "" + +#. module: survey_attachment +#: model:ir.model,name:survey_attachment.model_survey_user_input_line +msgid "Survey User Input Line" +msgstr "" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_question__type +msgid "Type of Question" +msgstr "" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__file +msgid "Uploaded file" +msgstr "" + +#. module: survey_attachment +#: model:ir.model.fields,field_description:survey_attachment.field_survey_user_input_line__filename +msgid "Uploaded file name" +msgstr "" diff --git a/survey_attachment/models/__init__.py b/survey_attachment/models/__init__.py new file mode 100644 index 0000000..948dcfa --- /dev/null +++ b/survey_attachment/models/__init__.py @@ -0,0 +1,2 @@ +from . import survey_question +from . import survey_user_input_line diff --git a/survey_attachment/models/survey_question.py b/survey_attachment/models/survey_question.py new file mode 100644 index 0000000..72e38de --- /dev/null +++ b/survey_attachment/models/survey_question.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, _ + +TYPES = [ + ('free_text', _('Multiple Lines Text Box')), + ('textbox', _('Single Line Text Box')), + ('numerical_box', _('Numerical Value')), + ('date', _('Date')), + ('upload_file', _('Attachment')), + ('simple_choice', _('Multiple choice: only one answer')), + ('multiple_choice', _('Multiple choice: multiple answers allowed')), + ('matrix', _('Matrix')), +] + + +class SurveyQuestion(models.Model): + _inherit = 'survey.question' + + question_attachment = fields.Binary(string="Joined attachment") + type = fields.Selection(selection=TYPES) diff --git a/survey_attachment/models/survey_user_input_line.py b/survey_attachment/models/survey_user_input_line.py new file mode 100644 index 0000000..5068203 --- /dev/null +++ b/survey_attachment/models/survey_user_input_line.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +import base64 +from odoo import models, fields, api, _ +from .survey_question import TYPES + +FILE_TYPES = [ + ('image', _('Image')), + ('pdf', _('PDF file')), +] + + +class SurveyUserInputLine(models.Model): + _inherit = 'survey.user_input_line' + + answer_type = fields.Selection(selection=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 + } + if question.constr_mandatory: + file = base64.encodebytes(post[answer_tag].read()) + else: + file = base64.encodebytes(post[answer_tag].read()) if post[answer_tag] else None + if answer_tag in post: + 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 diff --git a/survey_attachment/static/description/icon.png b/survey_attachment/static/description/icon.png new file mode 100644 index 0000000..a7086ee Binary files /dev/null and b/survey_attachment/static/description/icon.png differ diff --git a/survey_attachment/static/description/image_2.png b/survey_attachment/static/description/image_2.png new file mode 100644 index 0000000..7cd2e04 Binary files /dev/null and b/survey_attachment/static/description/image_2.png differ diff --git a/survey_attachment/static/description/imge_1.png b/survey_attachment/static/description/imge_1.png new file mode 100644 index 0000000..60923d8 Binary files /dev/null and b/survey_attachment/static/description/imge_1.png differ diff --git a/survey_attachment/static/description/index.html b/survey_attachment/static/description/index.html new file mode 100644 index 0000000..bc1d505 --- /dev/null +++ b/survey_attachment/static/description/index.html @@ -0,0 +1,21 @@ +
+
+
+

Survey Attachment

+
+

This module allows you to upload file to survey !

+
+

Choose Type of question upload file

+ +
+

Upload File here

+
+ +
+ +
+ +
+
+
+
diff --git a/survey_attachment/static/description/survey.jpg b/survey_attachment/static/description/survey.jpg new file mode 100644 index 0000000..7d89241 Binary files /dev/null and b/survey_attachment/static/description/survey.jpg differ diff --git a/survey_attachment/templates/page.xml b/survey_attachment/templates/page.xml new file mode 100644 index 0000000..7c33902 --- /dev/null +++ b/survey_attachment/templates/page.xml @@ -0,0 +1,57 @@ + + + + + + diff --git a/survey_attachment/templates/survey_print.xml b/survey_attachment/templates/survey_print.xml new file mode 100644 index 0000000..e765a1d --- /dev/null +++ b/survey_attachment/templates/survey_print.xml @@ -0,0 +1,49 @@ + + + + + + diff --git a/survey_attachment/templates/upload_file.xml b/survey_attachment/templates/upload_file.xml new file mode 100644 index 0000000..b24dc6c --- /dev/null +++ b/survey_attachment/templates/upload_file.xml @@ -0,0 +1,44 @@ + + + + + + diff --git a/survey_attachment/views/survey_user_input_line.xml b/survey_attachment/views/survey_user_input_line.xml new file mode 100644 index 0000000..060d16d --- /dev/null +++ b/survey_attachment/views/survey_user_input_line.xml @@ -0,0 +1,17 @@ + + + + + survey_attachment survey.user_input_line form + survey.user_input_line + + 20 + + + + + + + + +