survey/models/survey_survey_template.py
2024-10-31 15:22:02 +03:00

267 lines
12 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import ast
from odoo import api, models, _
class SurveyTemplate(models.Model):
"""This model defines additional actions on the 'survey.survey' model that
can be used to load a survey sample. The model defines a sample for each
survey type:
(1) survey: A feedback form
(2) assessment: A certification
(3) live_session: A live presentation
(4) custom: An empty survey
"""
_inherit = 'survey.survey'
@api.model
def action_load_sample_survey(self):
return self.env['survey.survey'].create({
'survey_type': 'survey',
'title': _('Feedback Form'),
'description': '<br>'.join([
_('Please complete this very short survey to let us know how satisfied your are with our products.'),
_('Your responses will help us improve our product range to serve you even better.')
]),
'description_done': _('Thank you very much for your feedback. We highly value your opinion!'),
'progression_mode': 'number',
'questions_layout': 'page_per_question',
'question_and_page_ids': [
(0, 0, { # survey.question
'title': _('How frequently do you use our products?'),
'question_type': 'simple_choice',
'constr_mandatory': True,
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('Often (1-3 times per week)')
}),
(0, 0, { # survey.question.answer
'value': _('Rarely (1-3 times per month)')
}),
(0, 0, { # survey.question.answer
'value': _('Never (less than once a month)')
})
]
}),
(0, 0, { # survey.question
'title': _('How many orders did you pass during the last 6 months?'),
'question_type': 'numerical_box',
}),
(0, 0, { # survey.question
'title': _('How likely are you to recommend the following products to a friend?'),
'question_type': 'matrix',
'matrix_subtype': 'simple',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('Unlikely')
}),
(0, 0, { # survey.question.answer
'value': _('Neutral')
}),
(0, 0, { # survey.question.answer
'value': _('Likely')
}),
],
'matrix_row_ids': [
(0, 0, { # survey.question.answer
'value': _('Red Pen')
}),
(0, 0, { # survey.question.answer
'value': _('Blue Pen')
}),
(0, 0, { # survey.question.answer
'value': _('Yellow Pen')
})
]
})
]
}).action_show_sample()
@api.model
def action_load_sample_assessment(self):
survey_values = {
'survey_type': 'assessment',
'title': _('Certification'),
'certification': True,
'access_mode': 'token',
'is_time_limited': True,
'time_limit': 15, # 15 minutes
'is_attempts_limited': True,
'attempts_limit': 1,
'progression_mode': 'number',
'scoring_type': 'scoring_without_answers',
'users_can_go_back': True,
'description': ''.join([
_('Welcome to this Odoo certification. You will receive 2 random questions out of a pool of 3.'),
'(<span style="font-style: italic">',
_('Cheating on your neighbors will not help!'),
'</span> 😁).<br>',
_('Good luck!')
]),
'description_done': _('Thank you. We will contact you soon.'),
'questions_layout': 'page_per_section',
'questions_selection': 'random',
'question_and_page_ids': [
(0, 0, { # survey.question
'title': _('Odoo Certification'),
'is_page': True,
'question_type': False,
'random_questions_count': 2
}),
(0, 0, { # survey.question
'title': _('What does "ODOO" stand for?'),
'question_type': 'simple_choice',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('It\'s a Belgian word for "Management"')
}),
(0, 0, { # survey.question.answer
'value': _('Object-Directed Open Organization')
}),
(0, 0, { # survey.question.answer
'value': _('Organizational Development for Operation Officers')
}),
(0, 0, { # survey.question.answer
'value': _('It does not mean anything specific'),
'is_correct': True,
'answer_score': 10
}),
]
}),
(0, 0, { # survey.question
'title': _('On Survey questions, one can define "placeholders". But what are they for?'),
'question_type': 'simple_choice',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('They are a default answer, used if the participant skips the question')
}),
(0, 0, { # survey.question.answer
'value': _('It is a small bit of text, displayed to help participants answer'),
'is_correct': True,
'answer_score': 10
}),
(0, 0, { # survey.question.answer
'value': _('They are technical parameters that guarantees the responsiveness of the page')
})
]
}),
(0, 0, { # survey.question
'title': _('What does one need to get to pass an Odoo Survey?'),
'question_type': 'simple_choice',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('It is an option that can be different for each Survey'),
'is_correct': True,
'answer_score': 10
}),
(0, 0, { # survey.question.answer
'value': _('One needs to get 50% of the total score')
}),
(0, 0, { # survey.question.answer
'value': _('One needs to answer at least half the questions correctly')
})
]
}),
]
}
mail_template = self.env.ref('survey.mail_template_certification', raise_if_not_found=False)
if mail_template:
survey_values.update({
'certification_mail_template_id': mail_template.id
})
return self.env['survey.survey'].create(survey_values).action_show_sample()
@api.model
def action_load_sample_live_session(self):
return self.env['survey.survey'].create({
'survey_type': 'live_session',
'title': _('Live Session'),
'description': '<br>'.join([
_('How good of a presenter are you? Let\'s find out!'),
_('But first, keep listening to the host.')
]),
'description_done': _('Thank you for your participation, hope you had a blast!'),
'progression_mode': 'number',
'scoring_type': 'scoring_with_answers',
'questions_layout': 'page_per_question',
'session_speed_rating': True,
'question_and_page_ids': [
(0, 0, { # survey.question
'title': _('What is the best way to catch the attention of an audience?'),
'question_type': 'simple_choice',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('Speak softly so that they need to focus to hear you')
}),
(0, 0, { # survey.question.answer
'value': _('Use a fun visual support, like a live presentation'),
'is_correct': True,
'answer_score': 20
}),
(0, 0, { # survey.question.answer
'value': _('Show them slides with a ton of text they need to read fast')
})
]
}),
(0, 0, { # survey.question
'title': _('What is a frequent mistake public speakers do?'),
'question_type': 'simple_choice',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('Practice in front of a mirror')
}),
(0, 0, { # survey.question.answer
'value': _('Speak too fast'),
'is_correct': True,
'answer_score': 20
}),
(0, 0, { # survey.question.answer
'value': _('Use humor and make jokes')
})
]
}),
(0, 0, { # survey.question
'title': _('Why should you consider making your presentation more fun with a small quiz?'),
'question_type': 'multiple_choice',
'suggested_answer_ids': [
(0, 0, { # survey.question.answer
'value': _('It helps attendees focus on what you are saying'),
'is_correct': True,
'answer_score': 20
}),
(0, 0, { # survey.question.answer
'value': _('It is more engaging for your audience'),
'is_correct': True,
'answer_score': 20
}),
(0, 0, { # survey.question.answer
'value': _('It helps attendees remember the content of your presentation'),
'is_correct': True,
'answer_score': 20
})
]
}),
]
}).action_show_sample()
@api.model
def action_load_sample_custom(self):
return self.env['survey.survey'].create({
'survey_type': 'custom',
'title': '',
}).action_show_sample()
def action_show_sample(self):
action = self.env['ir.actions.act_window']._for_xml_id('survey.action_survey_form')
action['views'] = [[self.env.ref('survey.survey_survey_view_form').id, 'form']]
action['res_id'] = self.id
action['context'] = dict(ast.literal_eval(action.get('context', {})),
create=False
)
return action