TIP: You can type at any time to perform a new search.
Surveys
survey · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 3.7
- Category
- Marketing/Surveys
- Folder size
- 12.24 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/surveys
- Last tracking update
- 2026-08-15 22:44:19
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Denis Ledoux, Goffin Simon, Aaron Bohy, Géry Debongnie, Christophe Monniez, Jorge Pinna Puissant, Julien Castiaux, Aurélien Warnon, Julien Mougenot, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, yhu-odoo, Florian Charlier, Abdelouahab (abla), Mathieu Walravens, Renaud Thiry, Louis Wicket (wil), Victor Piryns (pivi), amdi-odoo, Pierre-Yves Dufays, Maruan Aguerdouh (magm), Dylan Kiss (dyki), Mayurrajsinh Rathod, Walid (wasa), Astik Singh, bary, vava-odoo, Julien Carion (juca), adsh-odoo, Lopes Marc (loma), nihp-odoo, Shubham Thanki, aath-odoo, Xavier Luyckx (xlu), Pierre Lamotte (pila), Pierre Pulinckx, Anton Romanova (roan), Bastien PIERRE, João Horta Alves, pish-odoo, Hoste Patrick, lse-odoo, Krzysztof Magusiak (krma), utma-odoo, mojem, defl, Augustin (duau), Serhii Rubanskyi, Alessandro Lupo, Jérôme Belpaire, josv-odoo, lecr, saurabh, Séna Nshimiyimana, Kadam Darji, ELCO, chpa-odoo, Romain ROSANO (rros), Dhrumit Parmar, samueljlieber, João Alves
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- hr_recruitment_survey, hr_skills_survey, mgmtsystem_survey, partner_survey, survey_certification_py3o, survey_certification_sending, survey_crm, survey_legal, survey_multi_company, survey_partner_representative, survey_question_type_model_selection, survey_resource_booking, survey_result_mail, survey_skip_start, website_slides_survey
- Description
Create beautiful surveys and visualize answers ============================================== It depends on the answers or reviews of some questions by different users. A survey may have multiple pages. Each page may contain multiple questions and each question may have multiple answers. Different users may give different answers of question and according to that survey is done. Partners are also sent mails with personal token for the invitation of the survey.
Code Analysis ⓘ
Views touched (73)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
certification_preview |
certification_preview | ir.ui.view | qweb | New |
certification_report_view |
certification_report_view | ir.ui.view | qweb | New |
certification_report_view_general |
certification_report_view_general | ir.ui.view | qweb | New |
gamification_badge_form_view_simplified |
gamification.badge.form.view.simplified | gamification.badge | form | New |
question_char_box |
Question: text box | ir.ui.view | qweb | New |
question_container |
Survey: question container | ir.ui.view | qweb | New |
question_date |
Question: date box | ir.ui.view | qweb | New |
question_datetime |
Question: datetime box | ir.ui.view | qweb | New |
question_matrix |
Question: matrix | ir.ui.view | qweb | New |
question_multiple_choice |
Question: multiple choice | ir.ui.view | qweb | New |
question_numerical_box |
Question: numerical box | ir.ui.view | qweb | New |
question_result_choice |
Question: choice result (simple_choice, multiple_choice, scale) | ir.ui.view | qweb | New |
question_result_comments |
Question: comments | ir.ui.view | qweb | New |
question_result_matrix |
Question: matrix result (matrix) | ir.ui.view | qweb | New |
question_result_number_or_date_or_datetime |
Question: number or date (and time) result (numerical_box or date or datetime) | ir.ui.view | qweb | New |
question_result_text |
Question: text result (text_box, char_box) | ir.ui.view | qweb | New |
question_scale |
Question: scale | ir.ui.view | qweb | New |
question_simple_choice |
Question: simple choice | ir.ui.view | qweb | New |
question_suggested_value_image |
Image from the question suggested answer | ir.ui.view | qweb | New |
question_table_pagination |
Survey: statistics table pagination | ir.ui.view | qweb | New |
question_text_box |
Question: free text box | ir.ui.view | qweb | New |
res_partner_view_form |
res.partner.view.form.inherit.survey | res.partner | form | Inherits base.view_partner_form |
survey.layout |
Survey Layout | ir.ui.view | qweb | Inherits web.frontend_layout |
survey_403_page |
Survey: custom 403 page | ir.ui.view | qweb | New |
survey_access_error |
Survey: access error | ir.ui.view | qweb | New |
survey_auth_required |
Survey: login required | ir.ui.view | qweb | New |
survey_button_form_view |
Survey: back to form view | ir.ui.view | qweb | New |
survey_button_retake |
Survey: retake button | ir.ui.view | qweb | New |
survey_closed_expired |
Survey: expired | ir.ui.view | qweb | New |
survey_fill_form |
Survey: main page content | ir.ui.view | qweb | New |
survey_fill_form_done |
Survey: finished | ir.ui.view | qweb | New |
survey_fill_form_in_progress |
Survey: form with questions | ir.ui.view | qweb | New |
survey_fill_form_start |
Survey: start form content | ir.ui.view | qweb | New |
survey_fill_header |
Survey: main page header | ir.ui.view | qweb | New |
survey_invite_view_form |
survey.invite.view.form | survey.invite | form | New |
survey_navigation |
Survey: Navigation | ir.ui.view | qweb | New |
survey_page_fill |
Survey: main page (take survey) | ir.ui.view | qweb | New |
survey_page_print |
Survey: print page | ir.ui.view | qweb | New |
survey_page_statistics |
Survey: result statistics page | ir.ui.view | qweb | New |
survey_page_statistics_header |
Survey: result statistics header | ir.ui.view | qweb | New |
survey_page_statistics_inner |
Survey: result statistics content | ir.ui.view | qweb | New |
survey_page_statistics_question |
Question: result statistics | ir.ui.view | qweb | New |
survey_progression |
Survey: Progression | ir.ui.view | qweb | New |
survey_question_answer_view_form |
survey.question.answer.view.form | survey.question.answer | form | New |
survey_question_answer_view_search |
survey.question.answer.view.search | survey.question.answer | search | New |
survey_question_answer_view_tree |
survey.question.answer.view.list | survey.question.answer | list | New |
survey_question_form |
Form view for survey question | survey.question | form | New |
survey_question_search |
Search view for survey question | survey.question | search | New |
survey_question_tree |
List view for survey question | survey.question | list | New |
survey_remove_unnecessary_decimals |
Survey: remove .0 | ir.ui.view | qweb | New |
survey_response_line_view_tree |
survey.user_input.line.view.list | survey.user_input.line | list | New |
survey_results_filters |
Survey: Filter results | ir.ui.view | qweb | New |
survey_selection_key |
survey_selection_key | ir.ui.view | qweb | New |
survey_session_code |
Survey: Access Code page | ir.ui.view | qweb | New |
survey_survey_view_activity |
survey.survey.view.activity | survey.survey | activity | New |
survey_survey_view_form |
survey.survey.view.form | survey.survey | form | New |
survey_survey_view_graph |
survey.survey.view.graph | survey.survey | graph | New |
survey_survey_view_kanban |
survey.survey.view.kanban | survey.survey | kanban | New |
survey_survey_view_pivot |
survey.survey.view.pivot | survey.survey | pivot | New |
survey_survey_view_search |
survey.survey.search | survey.survey | search | New |
survey_survey_view_tree |
survey.survey.view.list | survey.survey | list | New |
survey_user_input_line_view_form |
survey.user_input.line.view.form | survey.user_input.line | form | New |
survey_user_input_line_view_search |
survey.user_input.line.view.search | survey.user_input.line | search | New |
survey_user_input_view_form |
survey.user_input.view.form | survey.user_input | form | New |
survey_user_input_view_search |
survey.user_input.view.search | survey.user_input | search | New |
survey_user_input_view_tree |
survey.user_input.view.list | survey.user_input | list | New |
survey_user_input_viuew_kanban |
survey.user_input.view.kanban | survey.user_input | kanban | New |
survey_void_content |
Survey: void content | ir.ui.view | qweb | New |
user_input_session |
Survey User Input Session | ir.ui.view | qweb | Inherits web.frontend_layout |
user_input_session_leaderboard |
Survey User Input Leaderboard | ir.ui.view | qweb | New |
user_input_session_manage |
Survey: Manage Session | ir.ui.view | qweb | New |
user_input_session_manage_content |
Survey User Input Session Manage | ir.ui.view | qweb | New |
user_input_session_open |
Survey: Open Session | ir.ui.view | qweb | New |
HTTP endpoints (22)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/survey/<model("survey.survey"):survey>/certification_preview |
Survey.show_certification_pdf |
user | http | ALL | website |
/survey/begin/<string:survey_token>/<string:answer_token> |
Survey.survey_begin |
public | jsonrpc | ALL | website |
/survey/<string:survey_token>, /survey/<string:survey_token>/<string:answer_token> |
Survey.survey_display_page |
public | http | ALL | website |
/survey/<string:survey_token>/get_background_image |
Survey.survey_get_background |
public | http | ALL | website |
/survey/<int:survey_id>/get_certification |
Survey.survey_get_certification |
user | http | GET | sudo website |
/survey/<model("survey.survey"):survey>/get_certification_preview |
Survey.survey_get_certification_preview |
user | http | GET | sudo website |
/survey/get_question_image/<string:survey_token>/<string:answer_token>/<int:question_id>/<int:suggested_answer_id> |
Survey.survey_get_question_image |
public | http | ALL | sudo website |
/survey/next_question/<string:survey_token>/<string:answer_token> |
Survey.survey_next_question |
public | jsonrpc | ALL | website |
/survey/print/<string:survey_token> |
Survey.survey_print |
public | http | ALL | website |
/survey/results/<model("survey.survey"):survey> |
Survey.survey_report |
user | http | ALL | website |
/survey/retry/<string:survey_token>/<string:answer_token> |
Survey.survey_retry |
public | http | ALL | website |
/survey/<string:survey_token>/<int:section_id>/get_background_image |
Survey.survey_section_get_background |
public | http | ALL | website |
/survey/start/<string:survey_token> |
Survey.survey_start |
public | http | ALL | sudo website |
/survey/submit/<string:survey_token>/<string:answer_token> |
Survey.survey_submit |
public | jsonrpc | ALL | sudo website |
/survey/test/<string:survey_token> |
Survey.survey_test |
user | http | ALL | website |
/survey/check_session_code/<string:session_code> |
UserInputSession.survey_check_session_code |
public | jsonrpc | ALL | website |
/s |
UserInputSession.survey_session_code |
public | http | ALL | website |
/survey/session/leaderboard/<string:survey_token> |
UserInputSession.survey_session_leaderboard |
user | jsonrpc | ALL | website |
/survey/session/manage/<string:survey_token> |
UserInputSession.survey_session_manage |
user | http | ALL | website |
/survey/session/next_question/<string:survey_token> |
UserInputSession.survey_session_next_question |
user | jsonrpc | ALL | sudo website |
/survey/session/results/<string:survey_token> |
UserInputSession.survey_session_results |
user | jsonrpc | ALL | website |
/s/<string:session_code> |
UserInputSession.survey_start_short |
public | http | ALL | website |
Models touched (12)
New fields (2)
-
survey_idMany2one → survey.surveycompute='_compute_survey_id'store=True args: 'survey.survey', 'Survey' -
survey_idsOne2many → survey.surveyargs: 'survey.survey', 'certification_badge_id', 'Survey Ids'
No public methods.
New fields (1)
-
challenge_categorySelectionondelete={'certification': 'set default'}selection_add=[('certification', 'Certifications')]
No public methods.
New fields (0)
No new fields.
Public methods (1)-
get_nearest_lang(self, lang_code)@api.model
New fields (0)
No new fields.
Public methods (1)-
write(self, vals)When languages are disabled, clear corresponding survey languages.
New fields (2)
-
certifications_company_countIntegercompute='_compute_certifications_company_count' args: 'Company Certifications Count' -
certifications_countIntegercompute='_compute_certifications_count' args: 'Certifications Count'
-
action_view_certifications(self)
New fields (16)
-
attachment_idsMany2many → ir.attachmentbypass_search_access=Truecompute='_compute_attachment_ids'readonly=Falsestore=Truestring='Attachments' args: 'ir.attachment', 'survey_mail_compose_message_ir_attachments_rel', 'wizard_id', 'attachment_id' -
author_idMany2one → res.partnerdefault=_get_default_authorindex=Trueondelete='set null' args: 'res.partner', 'Author' -
deadlineDatetimestring='Answer deadline' -
emailsTextstring='Additional emails' -
existing_emailsTextcompute='_compute_existing_emails'readonly=Truestore=False args: 'Existing emails' -
existing_modeSelectiondefault='resend'required=Truestring='Handle existing' args: [('new', 'New invite'), ('resend', 'Resend invite')] -
existing_partner_idsMany2many → res.partnercompute='_compute_existing_partner_ids'readonly=Truestore=False args: 'res.partner' -
existing_textTextcompute='_compute_existing_text' args: 'Resend Comment' -
mail_server_idMany2one → ir.mail_serverargs: 'ir.mail_server', 'Outgoing mail server' -
partner_idsMany2many → res.partnerdomain="[ '|', (survey_users_can_signup, '=', 1), '|', (not survey_users_login_required, '=', 1), ('user_ids', '!=', False), ]"string='Recipients' args: 'res.partner', 'survey_invite_partner_ids', 'invite_id', 'partner_id' -
send_emailBooleancompute='_compute_send_email'inverse='_inverse_send_email' -
survey_access_modeSelectionreadonly=Truerelated='survey_id.access_mode' -
survey_idMany2one → survey.surveyrequired=Truestring='Survey' args: 'survey.survey' -
survey_start_urlCharcompute='_compute_survey_start_url' args: 'Survey URL' -
survey_users_can_signupBooleanrelated='survey_id.users_can_signup' -
survey_users_login_requiredBooleanreadonly=Truerelated='survey_id.users_login_required'
-
action_invite(self)Process the wizard content and proceed with sending the related email(s), rendering any template patterns on the fly if needed -
create(self, vals_list)@api.model_create_multi
New fields (57)
-
allowed_triggering_question_idsMany2many → survey.questioncompute='_compute_allowed_triggering_question_ids'copy=Falsestring='Allowed Triggering Questions' args: 'survey.question' -
answer_dateDatehelp='Correct date answer for this question.' args: 'Correct date answer' -
answer_datetimeDatetimehelp='Correct date and time answer for this question.' args: 'Correct datetime answer' -
answer_numerical_boxFloathelp='Correct number answer for this question.' args: 'Correct numerical answer' -
answer_scoreFloathelp='Score value for a correct answer to this question.' args: 'Score' -
background_imageImagecompute='_compute_background_image'readonly=Falsestore=True args: 'Background Image' -
background_image_urlCharcompute='_compute_background_image_url' args: 'Background Url' -
comment_count_as_answerBooleanargs: 'Comment is an answer' -
comments_allowedBooleanargs: 'Show Comments Field' -
comments_messageChartranslate=True args: 'Comment Message' -
constr_error_msgChartranslate=True args: 'Error message' -
constr_mandatoryBooleanargs: 'Mandatory Answer' -
descriptionHtmlhelp='Use this field to add additional explanations about your question or to illustrate it with pictures or a video'sanitize=Truesanitize_overridable=Truetranslate=True args: 'Description' -
has_image_only_suggested_answerBooleancompute='_compute_has_image_only_suggested_answer' args: 'Has image only suggested answer' -
is_pageBooleanargs: 'Is a page?' -
is_placed_before_triggerBooleancompute='_compute_allowed_triggering_question_ids'help='Is this question placed before any of its trigger questions?'string='Is misplaced?' -
is_scored_questionBooleancompute='_compute_is_scored_question'copy=Truehelp='Include this question as part of quiz scoring. Requires an answer and answer score to be taken into account.'readonly=Falsestore=True args: 'Scored' -
is_time_customizedBooleanargs: 'Customized speed rewards' -
is_time_limitedBooleanhelp='Currently only supported for live sessions.' args: 'The question is limited in time' -
matrix_row_idsOne2many → survey.question.answercopy=Truehelp='Labels used for proposed choices: rows of matrix'string='Matrix Rows' args: 'survey.question.answer', 'matrix_question_id' -
matrix_subtypeSelectiondefault='simple'string='Matrix Type' args: [('simple', 'One choice per row'), ('multiple', 'Multiple choices per row')] -
page_idMany2one → survey.questioncompute='_compute_page_id'store=Truestring='Page' args: 'survey.question' -
question_idsOne2many → survey.questioncompute='_compute_question_ids'string='Questions' args: 'survey.question' -
question_placeholderCharcompute='_compute_question_placeholder'readonly=Falsestore=Truetranslate=True args: 'Placeholder' -
question_typeSelectioncompute='_compute_question_type'readonly=Falsestore=Truestring='Question Type' args: [('simple_choice', 'Multiple choice: only one answer'), ('multiple_choice', 'Multiple choice: multiple answers allowed'), ('text_box', 'Multiple Lines Text Box'), ('char_box', 'Single Line Text Box'), ('numerical_box', 'Numerical Value'), ('scale', 'Scale'), ('date', 'Date'), ('datetime', 'Datetime'), ('matrix', 'Matrix')] -
questions_selectionSelectionhelp='If randomized is selected, add the number of random questions next to the section.'readonly=Truerelated='survey_id.questions_selection' -
random_questions_countIntegerdefault=1help='Used on randomized sections to take X random questions from all the questions of that section.' args: '# Questions Randomly Picked' -
save_as_emailBooleancompute='_compute_save_as_email'copy=Truehelp="If checked, this option will save the user's answer as its email address."readonly=Falsestore=True args: 'Save as user email' -
save_as_nicknameBooleancompute='_compute_save_as_nickname'copy=Truehelp="If checked, this option will save the user's answer as its nickname."readonly=Falsestore=True args: 'Save as user nickname' -
scale_maxIntegerdefault=10 args: 'Scale Maximum Value' -
scale_max_labelChartranslate=True args: 'Scale Maximum Label' -
scale_mid_labelChartranslate=True args: 'Scale Middle Label' -
scale_minIntegerdefault=0 args: 'Scale Minimum Value' -
scale_min_labelChartranslate=True args: 'Scale Minimum Label' -
scoring_typeSelectionreadonly=Truerelated='survey_id.scoring_type'string='Scoring Type' -
sequenceIntegerdefault=10 args: 'Sequence' -
session_availableBooleanreadonly=Truerelated='survey_id.session_available'string='Live Session available' -
suggested_answer_idsOne2many → survey.question.answercopy=Truehelp='Labels used for proposed choices: simple choice, multiple choice and columns of matrix'string='Types of answers' args: 'survey.question.answer', 'question_id' -
survey_idMany2one → survey.surveyindex='btree_not_null'ondelete='cascade'string='Survey' args: 'survey.survey' -
survey_session_speed_ratingBooleanrelated='survey_id.session_speed_rating' -
survey_session_speed_rating_time_limitIntegerrelated='survey_id.session_speed_rating_time_limit'string='General Time limit (seconds)' -
time_limitIntegerargs: 'Time limit (seconds)' -
titleCharrequired=Truetranslate=True args: 'Title' -
triggering_answer_idsMany2many → survey.question.answercopy=Falsedomain="[\n ('question_id.survey_id', '=', survey_id),\n '&', ('question_id.question_type', 'in', ['simple_choice', 'multiple_choice']),\n '|',\n ('question_id.sequence', '<', sequence),\n '&', ('question_id.sequence', '=', sequence), ('question_id.id', '<', id)\n ]"help='Picking any of these answers will trigger this question.\nLeave the field empty if the question should always be displayed.'readonly=Falsestore=Truestring='Triggering Answers' args: 'survey.question.answer' -
triggering_question_idsMany2many → survey.questioncompute='_compute_triggering_question_ids'help='Questions containing the triggering answer(s) to display the current question.'store=Falsestring='Triggering Questions' args: 'survey.question' -
user_input_line_idsOne2many → survey.user_input.linedomain=[('skipped', '=', False)]groups='survey.group_survey_user'string='Answers' args: 'survey.user_input.line', 'question_id' -
validation_emailBooleanargs: 'Input must be an email' -
validation_error_msgChartranslate=True args: 'Validation Error' -
validation_length_maxIntegerdefault=0 args: 'Maximum Text Length' -
validation_length_minIntegerdefault=0 args: 'Minimum Text Length' -
validation_max_dateDateargs: 'Maximum Date' -
validation_max_datetimeDatetimeargs: 'Maximum Datetime' -
validation_max_float_valueFloatdefault=0.0 args: 'Maximum value' -
validation_min_dateDateargs: 'Minimum Date' -
validation_min_datetimeDatetimeargs: 'Minimum Datetime' -
validation_min_float_valueFloatdefault=0.0 args: 'Minimum value' -
validation_requiredBooleancompute='_compute_validation_required'readonly=Falsestore=True args: 'Validate entry'
-
copy(self, default=None) -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
validate_question(self, answer, comment=None)Validate question, depending on question type and parameters for simple choice, text, date and number, answer is simply the answer of the question. For other multiple choices questions, answer is a list of answers (the selected choices or a list of selected answers per question -for matrix type-): - Simple answer : ``answer = 'example'`` or ``2`` or ``question_answer_id`` or ``2019/10/10`` - Multiple choice : ``answer = [question_answer_id1, question_answer_id2, question_answer_id3]`` - Matrix: ``answer = { 'rowId1' : [colId1, colId2,...], 'rowId2' : [colId1, colId3, ...] }`` :returns: A dict ``{question.id: error}``, or an empty dict if no validation error. :rtype: dict[int, str]
New fields (11)
-
answer_scoreFloathelp='A positive score indicates a correct choice; a negative or null score indicates a wrong answer' args: 'Score' -
is_correctBooleanargs: 'Correct' -
matrix_question_idMany2one → survey.questionindex='btree_not_null'ondelete='cascade'string='Question (as matrix row)' args: 'survey.question' -
question_idMany2one → survey.questionindex='btree_not_null'ondelete='cascade'string='Question' args: 'survey.question' -
question_typeSelectionrelated='question_id.question_type' -
scoring_typeSelectionrelated='question_id.scoring_type' -
sequenceIntegerdefault=10 args: 'Label Sequence order' -
valueChartranslate=True args: 'Suggested value' -
value_imageImagemax_height=1024max_width=1024 args: 'Image' -
value_image_filenameCharargs: 'Image Filename' -
value_labelCharcompute='_compute_value_label'help='Answer label as either the value itself if not empty or a letter representing the index of the answer otherwise.' args: 'Value Label'
No public methods.
New fields (57)
-
access_modeSelectiondefault='public'required=Truestring='Access Mode' args: [('public', 'Anyone with the link'), ('token', 'Invited people only')] -
access_tokenCharcopy=Falsedefault=<expr> args: 'Access Token' -
activeBooleandefault=True args: 'Active' -
allowed_survey_typesJsoncompute='_compute_allowed_survey_types'string='Allowed survey types' -
answer_countIntegercompute='_compute_survey_statistic' args: 'Registered' -
answer_done_countIntegercompute='_compute_survey_statistic' args: 'Attempts' -
answer_duration_avgFloatcompute='_compute_answer_duration_avg'help='Average duration of the survey (in hours)' args: 'Average Duration' -
answer_score_avgFloatcompute='_compute_survey_statistic' args: 'Avg Score (%)' -
attempts_limitIntegerdefault=1 args: 'Number of attempts' -
background_imageImageargs: 'Background Image' -
background_image_urlCharcompute='_compute_background_image_url' args: 'Background Url' -
certificationBooleancompute='_compute_certification'precompute=Truereadonly=Falsestore=True args: 'Is a Certification' -
certification_badge_idMany2one → gamification.badgecopy=Falseindex='btree_not_null' args: 'gamification.badge', 'Certification Badge' -
certification_badge_id_dummyMany2onerelated='certification_badge_id'string='Certification Badge ' -
certification_give_badgeBooleancompute='_compute_certification_give_badge'copy=Falsereadonly=Falsestore=True args: 'Give Badge' -
certification_mail_template_idMany2one → mail.templatedomain="[('model', '=', 'survey.user_input')]"help='Automated email sent to the user when they succeed the certification, containing their certification document.' args: 'mail.template', 'Certified Email Template' -
certification_report_layoutSelectiondefault='modern_purple'string='Certification template' args: [('modern_purple', 'Modern Purple'), ('modern_blue', 'Modern Blue'), ('modern_gold', 'Modern Gold'), ('classic_purple', 'Classic Purple'), ('classic_blue', 'Classic Blue'), ('classic_gold', 'Classic Gold')] -
colorIntegerdefault=0 args: 'Color Index' -
descriptionHtmlhelp='The description will be displayed on the home page of the survey. You can use this to give the purpose and guidelines to your candidates before they start it.'sanitize=Truesanitize_overridable=Truetranslate=True args: 'Description' -
description_doneHtmlhelp='This message will be displayed when survey is completed'translate=True args: 'End Message' -
has_conditional_questionsBooleancompute='_compute_has_conditional_questions' args: 'Contains conditional questions' -
is_attempts_limitedBooleancompute='_compute_is_attempts_limited'help='Check this option if you want to limit the number of attempts per user'readonly=Falsestore=True args: 'Limited number of attempts' -
is_time_limitedBooleanargs: 'The survey is limited in time' -
lang_idsMany2many → res.langdefault=<expr>domain=<expr>help='Leave the field empty to support all installed languages.'string='Languages' args: 'res.lang' -
page_idsOne2many → survey.questioncompute='_compute_page_and_question_ids'string='Pages' args: 'survey.question' -
progression_modeSelectiondefault='percent'help='If Number is selected, it will display the number of questions answered on the total number of question to answer.'string='Display Progress as' args: [('percent', 'Percentage left'), ('number', 'Number')] -
question_and_page_idsOne2many → survey.questioncopy=Truestring='Sections and Questions' args: 'survey.question', 'survey_id' -
question_countIntegercompute='_compute_page_and_question_ids' args: '# Questions' -
question_idsOne2many → survey.questioncompute='_compute_page_and_question_ids'string='Questions' args: 'survey.question' -
questions_layoutSelectiondefault='page_per_question'required=Truestring='Pagination' args: [('page_per_question', 'One page per question'), ('page_per_section', 'One page per section'), ('one_page', 'One page with all the questions')] -
questions_selectionSelectiondefault='all'help='If randomized is selected, you can configure the number of random questions by section. This mode is ignored in live session.'required=Truestring='Question Selection' args: [('all', 'All questions'), ('random', 'Randomized per Section')] -
restrict_user_idsMany2many → res.usersdomain=[('share', '=', False)]string='Restricted to'tracking=2 args: 'res.users' -
scoring_max_obtainableFloatcompute='_compute_scoring_max_obtainable' args: 'Maximum obtainable score' -
scoring_success_minFloatdefault=80.0 args: 'Required Score (%)' -
scoring_typeSelectioncompute='_compute_scoring_type'precompute=Truereadonly=Falserequired=Truestore=Truestring='Scoring' args: [('no_scoring', 'No scoring'), ('scoring_with_answers_after_page', 'Scoring with answers after each page'), ('scoring_with_answers', 'Scoring with answers at the end'), ('scoring_without_answers', 'Scoring without answers')] -
session_answer_countIntegercompute='_compute_session_answer_count' args: 'Answers Count' -
session_availableBooleancompute='_compute_session_available' args: 'Live session available' -
session_codeCharcompute='_compute_session_code'copy=Falsehelp='This code will be used by your attendees to reach your session. Feel free to customize it however you like!'precompute=Truereadonly=Falsestore=True args: 'Session Code' -
session_linkCharcompute='_compute_session_link' args: 'Session Link' -
session_question_answer_countIntegercompute='_compute_session_question_answer_count' args: 'Question Answers Count' -
session_question_idMany2one → survey.questioncopy=Falsehelp='The current question of the survey session.'string='Current Question' args: 'survey.question' -
session_question_start_timeDatetimecopy=Falsehelp='The time at which the current question has started, used to handle the timer for attendees.' args: 'Current Question Start Time' -
session_show_leaderboardBooleancompute='_compute_session_show_leaderboard'help='Whether or not we want to show the attendees leaderboard for this survey.' args: 'Show Session Leaderboard' -
session_speed_ratingBooleanhelp='Attendees get more points if they answer quickly' args: 'Reward quick answers' -
session_speed_rating_time_limitIntegerhelp='Default time given to receive additional points for right answers' args: 'Time limit (seconds)' -
session_start_timeDatetimecopy=False args: 'Current Session Start Time' -
session_stateSelectioncopy=Falsestring='Session State' args: [('ready', 'Ready'), ('in_progress', 'In Progress')] -
success_countIntegercompute='_compute_survey_statistic' args: 'Success' -
success_ratioIntegercompute='_compute_survey_statistic' args: 'Success Ratio (%)' -
survey_typeSelectiondefault='custom'required=Truestring='Survey Type' args: [('survey', 'Survey'), ('live_session', 'Live session'), ('assessment', 'Assessment'), ('custom', 'Custom')] -
time_limitFloatdefault=10 args: 'Time limit (minutes)' -
titleCharrequired=Truetranslate=True args: 'Survey Title' -
user_idMany2one → res.usersdefault=<expr>domain=[('share', '=', False)]string='Responsible'tracking=1 args: 'res.users' -
user_input_idsOne2many → survey.user_inputreadonly=Truestring='User responses' args: 'survey.user_input', 'survey_id' -
users_can_go_backBooleanhelp='If checked, users can go back to previous pages.' args: 'Users can go back' -
users_can_signupBooleancompute='_compute_users_can_signup' args: 'Users can signup' -
users_login_requiredBooleanhelp='If checked, users have to login before answering even with a valid token.' args: 'Require Login'
-
action_archive(self) -
action_end_session(self)The write is sudo'ed because a survey user can end a session even if it's not their own survey. -
action_open_session_manager(self) -
action_print_survey(self, answer=None)Open the website page with the survey printable view -
action_result_survey(self)Open the website page with the survey results view -
action_send_survey(self)Open a window to compose an email, pre-filled with the survey message -
action_start_session(self)Sets the necessary fields for the session to take place and starts it. The write is sudo'ed because a survey user can start a session even if it's not their own survey. -
action_start_survey(self, answer=None)Open the website page with the survey form -
action_survey_preview_certification_template(self) -
action_survey_user_input(self) -
action_survey_user_input_certified(self) -
action_survey_user_input_completed(self) -
action_test_survey(self)Open the website page with the survey form into test mode -
action_unarchive(self) -
check_validity(self) -
copy(self, default=None)Correctly copy the 'triggering_answer_ids' field from the original to the clone. This needs to be done in post-processing to make sure we get references to the newly created answers from the copy instead of references to the answers of the original. This implementation assumes that the order of created answers will be kept between the original and the clone, using 'zip()' to match the records between the two. Note that when `question_ids` is provided in the default parameter, it falls back to the standard copy, meaning that triggering logic will not be maintained. -
copy_data(self, default=None) -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
get_print_url(self) -
get_start_short_url(self)See controller method docstring for more details. -
get_start_url(self) -
write(self, vals)
New fields (0)
No new fields.
Public methods (4)-
action_load_sample_custom(self)@api.model -
action_load_survey_template_sample(self, template_key)@api.model -
action_show_sample(self) -
get_survey_templates_data(self)@api.model
New fields (27)
-
access_tokenCharcopy=Falsedefault=<expr>readonly=Truerequired=True args: 'Identification token' -
attempts_countIntegercompute='_compute_attempts_info' args: 'Attempts Count' -
attempts_limitIntegerrelated='survey_id.attempts_limit' args: 'Number of attempts' -
attempts_numberIntegercompute='_compute_attempts_info' args: 'Attempt n°' -
deadlineDatetimehelp='Datetime until customer can open the survey and submit answers' args: 'Deadline' -
emailCharreadonly=True args: 'Email' -
end_datetimeDatetimereadonly=True args: 'End date and time' -
invite_tokenCharcopy=Falsereadonly=True args: 'Invite token' -
is_attempts_limitedBooleanrelated='survey_id.is_attempts_limited' args: 'Limited number of attempts' -
is_session_answerBooleanhelp='Is that user input part of a survey session or not.' args: 'Is in a Session' -
lang_idMany2one → res.langstring='Language' args: 'res.lang' -
last_displayed_page_idMany2one → survey.questionstring='Last displayed question/page' args: 'survey.question' -
nicknameCharhelp='Attendee nickname, mainly used to identify them in the survey session leaderboard.' args: 'Nickname' -
partner_idMany2one → res.partnerindex='btree_not_null'readonly=Truestring='Contact' args: 'res.partner' -
predefined_question_idsMany2many → survey.questionreadonly=Truestring='Predefined Questions' args: 'survey.question' -
question_time_limit_reachedBooleancompute='_compute_question_time_limit_reached' args: 'Question Time Limit Reached' -
scoring_percentageFloatcompute='_compute_scoring_values'compute_sudo=Truestore=True args: 'Score (%)' -
scoring_successBooleancompute='_compute_scoring_success'compute_sudo=Truestore=True args: 'Quiz Passed' -
scoring_totalFloatcompute='_compute_scoring_values'compute_sudo=Truedigits=(10, 2)store=True args: 'Total Score' -
scoring_typeSelectionrelated='survey_id.scoring_type'string='Scoring' -
start_datetimeDatetimereadonly=True args: 'Start date and time' -
stateSelectiondefault='new'readonly=Truestring='Status' args: [('new', 'New'), ('in_progress', 'In Progress'), ('done', 'Completed')] -
survey_first_submittedBooleanstring='Survey First Submitted' -
survey_idMany2one → survey.surveyindex=Trueondelete='cascade'readonly=Truerequired=Truestring='Survey' args: 'survey.survey' -
survey_time_limit_reachedBooleancompute='_compute_survey_time_limit_reached' args: 'Survey Time Limit Reached' -
test_entryBooleanreadonly=True -
user_input_line_idsOne2many → survey.user_input.linecopy=Truestring='Answers' args: 'survey.user_input.line', 'user_input_id'
-
action_print_answers(self)Open the website page with the survey form -
action_redirect_to_attempts(self) -
action_resend(self) -
create(self, vals_list)@api.model_create_multi -
get_print_url(self) -
get_start_url(self)
New fields (18)
-
answer_is_correctBooleancompute='_compute_answer_score'precompute=Truestore=True args: 'Correct' -
answer_scoreFloatcompute='_compute_answer_score'precompute=Truestore=True args: 'Score' -
answer_typeSelectionstring='Answer Type' args: [('text_box', 'Free Text'), ('char_box', 'Text'), ('numerical_box', 'Number'), ('scale', 'Number'), ('date', 'Date'), ('datetime', 'Datetime'), ('suggestion', 'Suggestion')] -
lang_idMany2one → res.langrelated='user_input_id.lang_id' args: 'res.lang' -
matrix_row_idMany2one → survey.question.answerstring='Row answer' args: 'survey.question.answer' -
page_idMany2onereadonly=Falserelated='question_id.page_id'string='Section' -
question_idMany2one → survey.questionindex=Trueondelete='cascade'required=Truestring='Question' args: 'survey.question' -
question_sequenceIntegerrelated='question_id.sequence'store=True args: 'Sequence' -
skippedBooleanargs: 'Skipped' -
suggested_answer_idMany2one → survey.question.answerstring='Suggested answer' args: 'survey.question.answer' -
survey_idMany2onereadonly=Falserelated='user_input_id.survey_id'store=Truestring='Survey' -
user_input_idMany2one → survey.user_inputindex=Trueondelete='cascade'required=Truestring='User Input' args: 'survey.user_input' -
value_char_boxCharargs: 'Text answer' -
value_dateDateargs: 'Date answer' -
value_datetimeDatetimeargs: 'Datetime answer' -
value_numerical_boxFloatargs: 'Numerical answer' -
value_scaleIntegerargs: 'Scale value' -
value_text_boxTextargs: 'Free Text answer'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…