Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# © 2020 Le Filament (<https://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from odoo import http
from odoo.addons.survey.controllers.main import Survey
from odoo.http import request
_logger = logging.getLogger(__name__)
class WebsiteSurveyExtend(Survey):
# Printing routes
@http.route(['/survey/print/<model("survey.survey"):survey>',
'/survey/print/<model("survey.survey"):survey>/<string:token>'],
type='http', auth='public', website=True)
def print_survey(self, survey, token=None, **post):
'''Display an survey in printable view; if <token> is set, it will
grab the answers of the user_input_id that has <token>.'''
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})
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# TODO - Trouver un moyen d'afficher le fichier téléchargé cas de retour sur la page
# # AJAX prefilling of a survey
# @http.route(['/survey/prefill/<model("survey.survey"):survey>/<string:token>',
# '/survey/prefill/<model("survey.survey"):survey>/<string:token>/<model("survey.page"):page>'],
# type='http', auth='public', website=True)
# def prefill(self, survey, token, page=None, **post):
# UserInputLine = request.env['survey.user_input_line']
# ret = {}
#
# # Fetch previous answers
# if page:
# previous_answers = UserInputLine.sudo().search([('user_input_id.token', '=', token), ('page_id', '=', page.id)])
# else:
# previous_answers = UserInputLine.sudo().search([('user_input_id.token', '=', token)])
#
# # Return non empty answers in a JSON compatible format
# for answer in previous_answers:
# if not answer.skipped:
# answer_tag = '%s_%s_%s' % (answer.survey_id.id, answer.page_id.id, answer.question_id.id)
# answer_value = None
# if answer.answer_type == 'free_text':
# answer_value = answer.value_free_text
# elif answer.answer_type == 'text' and answer.question_id.type == 'textbox':
# answer_value = answer.value_text
# elif answer.answer_type == 'text' and answer.question_id.type != 'textbox':
# # here come comment answers for matrices, simple choice and multiple choice
# answer_tag = "%s_%s" % (answer_tag, 'comment')
# answer_value = answer.value_text
# elif answer.answer_type == 'number':
# answer_value = str(answer.value_number)
# elif answer.answer_type == 'date':
# answer_value = fields.Date.to_string(answer.value_date)
# elif answer.answer_type == 'suggestion' and not answer.value_suggested_row:
# answer_value = answer.value_suggested.id
# elif answer.answer_type == 'suggestion' and answer.value_suggested_row:
# answer_tag = "%s_%s" % (answer_tag, answer.value_suggested_row.id)
# answer_value = answer.value_suggested.id
# # elif answer.answer_type == 'upload_file':
# # answer_value = answer.file
# if answer_value:
# ret.setdefault(answer_tag, []).append(answer_value)
# else:
# _logger.warning("[survey] No answer has been found for question %s marked as non skipped" % answer_tag)
# print('------- RET', ret)
# return json.dumps(ret, default=str)