Skip to content
Extraits de code Groupes Projets
main.py 4,65 ko
Newer Older
  • Learn to ignore specific revisions
  • jordan's avatar
    jordan a validé
    # © 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})
    
    
        # 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)