summaryrefslogtreecommitdiff
path: root/addons/survey/data
diff options
context:
space:
mode:
authorAurélien Warnon <awa@odoo.com>2019-02-06 09:29:37 +0000
committerAurélien Warnon <awa@odoo.com>2019-02-06 10:34:40 +0000
commitafb1abbb60e5cdc4f76ab7b5a1b54b5e8a9283d5 (patch)
tree351e5ef81e76689378b77739af1adfe0b1efcd02 /addons/survey/data
parentdba478332681dd21a39c4a183c002b1cf6e046d2 (diff)
[IMP] survey: scoring & certification
Task #1902306 Purpose ======= This commit adds certification capabilities to the survey module. A certification is a survey with the "certification" flag set to true than can be linked to a certification email template that contains a certification document (PDF). This template can be edited by the user in the technical settings to customize the certification email/document. To be able to implement this certification concept, we also have to add scoring mechanisms to surveys. survey.questions of type 'simple_choice' and 'multiple_choice' now have scores for the suggested answers. These question scores allow to compute a global score that is used to determine whether the user has successfully passed the certification or not. As additional features, we also have: - A time limit with an interface timer that limits the test to X minutes When reached, the survey is automatically submitted and unregistered (= unsubmitted) answers are not taken into account. - A limited number of attempts for the survey/certification If reached, the user can't take the survey/certification anymore The 'survey result' layout was adapted accordingly to show the success rate of participants and the correct answers to the survey questions. Specs ======= - Create a new survey : - Add a description field for the survey - Options on a survey : - Passing score : (sum of all good answers) in % - If No scoring => No passing score, no certificate - If Scoring with answers => Passing score and can see the answers (can create certificate) - If Scoring without answers => Passing score but can't review the answers at the end (can create certificate) - for the questions, if "no scoring" selected, can 't see the option "good answer" and "score" on the questions - If the 2 others options, can see the options "good answer" and "score" on the questions - all the types of questions are available for each option. - Questions - Add the option correct answer on the multiples questions (one or more good answers) - Certifications - If scoring, force "mandatory" for "mutliple choices (1or multiple answers)" - On the dashboard => visual information that this specific survey is a certification - Time Limit : The student is informed on the home screen of the survey of the time limit. The clock start when he clicks on "start survey" - Template of the certificate : send email with attachment PDF - Front-end : - Add some margin - Replace "Back to survey" with the blue-bar from the portal - Add a timer (start when the survey starts) - Add a progress bar (number of section and number of question inside the section) - Analyse of the results : - First a global graph with the number of people who''ve participated and passed the test - Stages of a survey : - Remove the stage "Permanent" - 3 stages : - draft : not on-line but can be tested (with phantom token) - In progress : on-line - closed : not on-line - Who can test a survey : the manager and the user. Add this condition to the phantom token.
Diffstat (limited to 'addons/survey/data')
-rw-r--r--addons/survey/data/mail_template_data.xml38
-rw-r--r--addons/survey/data/survey_data.xml8
-rw-r--r--addons/survey/data/survey_demo_certification.xml302
3 files changed, 341 insertions, 7 deletions
diff --git a/addons/survey/data/mail_template_data.xml b/addons/survey/data/mail_template_data.xml
index ededcfb9bcc..de05a6a22d9 100644
--- a/addons/survey/data/mail_template_data.xml
+++ b/addons/survey/data/mail_template_data.xml
@@ -27,5 +27,43 @@
<field name="user_signature" eval="False"/>
</record>
+ <!-- Certification Email template -->
+ <record id="mail_template_certification" model="mail.template">
+ <field name="name">Certification: Send by email</field>
+ <field name="model_id" ref="survey.model_survey_user_input"/>
+ <field name="email_to">${(object.partner_id.email_formatted or object.email) |safe}</field>
+ <field name="partner_to">${object.partner_id.id}</field>
+ <field name="subject">Certification: ${object.survey_id.display_name}</field>
+ <field name="report_template" ref="certification_report"/>
+ <field name="report_name">Certification Document</field>
+ <field name="lang">${object.partner_id.lang}</field>
+ <field name="auto_delete" eval="True"/>
+ <field name="body_html" type="xml">
+ <div style="background:#F0F0F0;color:#515166;padding:10px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
+ <table style="width:600px;margin:5px auto;">
+ <tbody>
+ <tr><td>
+ <!-- We use the logo of the company that created the survey (to handle multi company cases) -->
+ <a href="/"><img src="/logo.png?company=${object.survey_id.create_uid.company_id.id}" style="vertical-align:baseline;max-width:100px;" /></a>
+ </td><td style="text-align:right;vertical-align:middle;">
+ Certification: ${object.survey_id.display_name}
+ </td></tr>
+ </tbody>
+ </table>
+ <table style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;">
+ <tbody>
+ <tr><td style="padding:15px 20px 10px 20px;">
+ <p>Dear <span>${object.partner_id.name or 'participant'}</span></p>
+ <p>
+ Here is, in attachment, your certification document for
+ <strong>${object.survey_id.display_name}</strong>
+ </p>
+ <p>Congratulations for succeeding the test!</p>
+ </td></tr>
+ </tbody>
+ </table>
+ </div>
+ </field>
+ </record>
</data>
</odoo> \ No newline at end of file
diff --git a/addons/survey/data/survey_data.xml b/addons/survey/data/survey_data.xml
index 87cefb946c9..a900d03ce8a 100644
--- a/addons/survey/data/survey_data.xml
+++ b/addons/survey/data/survey_data.xml
@@ -5,7 +5,7 @@
<record id="stage_draft" model="survey.stage">
<field name="name">Draft</field>
<field name="sequence" eval="1" />
- <field name="closed" eval="False" />
+ <field name="closed" eval="True" />
<field name="fold" eval="False" />
</record>
<record id="stage_in_progress" model="survey.stage">
@@ -20,11 +20,5 @@
<field name="closed" eval="True" />
<field name="fold" eval="True" />
</record>
- <record id="stage_permanent" model="survey.stage">
- <field name="name">Permanent</field>
- <field name="sequence" eval="4" />
- <field name="closed" eval="False" />
- <field name="fold" eval="True" />
- </record>
</data>
</odoo>
diff --git a/addons/survey/data/survey_demo_certification.xml b/addons/survey/data/survey_demo_certification.xml
new file mode 100644
index 00000000000..edbb8c561c5
--- /dev/null
+++ b/addons/survey/data/survey_demo_certification.xml
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="1">
+ <!-- Odoo Vendor Certification -->
+ <record model="survey.survey" id="vendor_certification">
+ <field name="title">MyCompany Vendor Certification</field>
+ <field name="access_token">4ead4bc8-b8f2-4760-a682-1fde8ddb95ac</field>
+ <field name="stage_id" ref="survey.stage_in_progress" />
+ <field name="access_mode">public</field>
+ <field name="users_can_go_back" eval="True" />
+ <field name="users_login_required" eval="True" />
+ <field name="scoring_type" >scoring_with_answers</field>
+ <field name="certificate" eval="True"></field>
+ <field name="certification_mail_template_id" ref="mail_template_certification"></field>
+ <field name="is_time_limited" >limited</field>
+ <field name="time_limit" >10.0</field>
+ <field name="is_attempts_limited" eval="True" />
+ <field name="attempts_limit">2</field>
+ <field name="description">&lt;p&gt;Test your vendor skills!.&lt;/p&gt;</field>
+ <field name="thank_you_message">&lt;p&gt;&lt;/p&gt;</field>
+ </record>
+ <!-- Page 1 -->
+ <record model="survey.question" id="vendor_certification_page_1">
+ <field name="title">Products</field>
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">1</field>
+ <field name="is_page" eval="True"/>
+ <field name="description">&lt;p&gt;Test your knowledge of your products!&lt;/p&gt;</field>
+ </record>
+ <!-- Question and predefined answer 1 -->
+ <record model="survey.question" id="vendor_certification_page_1_question_1">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">2</field>
+ <field name="title">Do we sell Acoustic Bloc Screens?</field>
+ <field name="question_type">simple_choice</field>
+ <field name="display_mode">dropdown</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_1_choice_1">
+ <field name="question_id" ref="vendor_certification_page_1_question_1"/>
+ <field name="sequence">1</field>
+ <field name="value">No</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_1_choice_2">
+ <field name="question_id" ref="vendor_certification_page_1_question_1"/>
+ <field name="sequence">2</field>
+ <field name="value">Yes</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">2.0</field>
+ </record>
+ <!-- Question and predefined answer 2 -->
+ <record model="survey.question" id="vendor_certification_page_1_question_2">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">3</field>
+ <field name="title">Select all the existing products</field>
+ <field name="question_type">multiple_choice</field>
+ <field name="column_nb">4</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_2_choice_1">
+ <field name="question_id" ref="vendor_certification_page_1_question_2"/>
+ <field name="sequence">1</field>
+ <field name="value">Chair floor protection</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_2_choice_2">
+ <field name="question_id" ref="vendor_certification_page_1_question_2"/>
+ <field name="sequence">2</field>
+ <field name="value">Fanta</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_2_choice_3">
+ <field name="question_id" ref="vendor_certification_page_1_question_2"/>
+ <field name="sequence">3</field>
+ <field name="value">Conference chair</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_2_choice_4">
+ <field name="question_id" ref="vendor_certification_page_1_question_2"/>
+ <field name="sequence">4</field>
+ <field name="value">Drawer</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_2_choice_5">
+ <field name="question_id" ref="vendor_certification_page_1_question_2"/>
+ <field name="sequence">5</field>
+ <field name="value">Customizable Lamp</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <!-- Question and predefined answer 3 -->
+ <record model="survey.question" id="vendor_certification_page_1_question_3">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">4</field>
+ <field name="title">Select all the available customizations for our Customizable Desk</field>
+ <field name="question_type">multiple_choice</field>
+ <field name="column_nb">4</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_3_choice_1">
+ <field name="question_id" ref="vendor_certification_page_1_question_3"/>
+ <field name="sequence">1</field>
+ <field name="value">Color</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_3_choice_2">
+ <field name="question_id" ref="vendor_certification_page_1_question_3"/>
+ <field name="sequence">2</field>
+ <field name="value">Height</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_3_choice_3">
+ <field name="question_id" ref="vendor_certification_page_1_question_3"/>
+ <field name="sequence">3</field>
+ <field name="value">Width</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">-1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_3_choice_4">
+ <field name="question_id" ref="vendor_certification_page_1_question_3"/>
+ <field name="sequence">4</field>
+ <field name="value">Legs</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_3_choice_5">
+ <field name="question_id" ref="vendor_certification_page_1_question_3"/>
+ <field name="sequence">5</field>
+ <field name="value">Number of drawers</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <!-- Question and predefined answer 4 -->
+ <record model="survey.question" id="vendor_certification_page_1_question_4">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">5</field>
+ <field name="title">How many versions of the Corner Desk do we have?</field>
+ <field name="question_type">simple_choice</field>
+ <field name="display_mode">dropdown</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_4_choice_1">
+ <field name="question_id" ref="vendor_certification_page_1_question_4"/>
+ <field name="sequence">1</field>
+ <field name="value">1</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_4_choice_2">
+ <field name="question_id" ref="vendor_certification_page_1_question_4"/>
+ <field name="sequence">2</field>
+ <field name="value">2</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">2.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_4_choice_3">
+ <field name="question_id" ref="vendor_certification_page_1_question_4"/>
+ <field name="sequence">3</field>
+ <field name="value">3</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_1_question_4_choice_4">
+ <field name="question_id" ref="vendor_certification_page_1_question_4"/>
+ <field name="sequence">4</field>
+ <field name="value">4</field>
+ </record>
+ <!-- Question and predefined answer 5 -->
+ <record model="survey.question" id="vendor_certification_page_1_question_5">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">6</field>
+ <field name="title">Do you think we have missing products in our catalog? (not rated)</field>
+ <field name="question_type">free_text</field>
+ </record>
+ <!-- Page 2 -->
+ <record model="survey.question" id="vendor_certification_page_2">
+ <field name="title">Prices</field>
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="is_page" eval="True"/>
+ <field name="sequence">7</field>
+ <field name="description">&lt;p&gt;Test your knowledge of our prices.&lt;/p&gt;</field>
+ </record>
+ <!-- Question and predefined answer 6 -->
+ <record model="survey.question" id="vendor_certification_page_2_question_1">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">8</field>
+ <field name="title">How much do we sell our Cable Management Box?</field>
+ <field name="question_type">simple_choice</field>
+ <field name="display_mode">dropdown</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_1_choice_1">
+ <field name="question_id" ref="vendor_certification_page_2_question_1"/>
+ <field name="sequence">1</field>
+ <field name="value">20$</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_1_choice_2">
+ <field name="question_id" ref="vendor_certification_page_2_question_1"/>
+ <field name="sequence">2</field>
+ <field name="value">50$</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_1_choice_3">
+ <field name="question_id" ref="vendor_certification_page_2_question_1"/>
+ <field name="sequence">3</field>
+ <field name="value">80$</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_1_choice_4">
+ <field name="question_id" ref="vendor_certification_page_2_question_1"/>
+ <field name="sequence">4</field>
+ <field name="value">100$</field>
+ <field name="is_correct" eval="True" />
+ <field name="answer_score">2.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_1_choice_5">
+ <field name="question_id" ref="vendor_certification_page_2_question_1"/>
+ <field name="sequence">5</field>
+ <field name="value">200$</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_1_choice_6">
+ <field name="question_id" ref="vendor_certification_page_2_question_1"/>
+ <field name="sequence">6</field>
+ <field name="value">300$</field>
+ </record>
+ <!-- Question and predefined answer 7 -->
+ <record model="survey.question" id="vendor_certification_page_2_question_2">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">9</field>
+ <field name="title">Select all the the products that sell for 100$ or more</field>
+ <field name="question_type">multiple_choice</field>
+ <field name="column_nb">2</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_2_choice_1">
+ <field name="question_id" ref="vendor_certification_page_2_question_2"/>
+ <field name="sequence">1</field>
+ <field name="value">Corner Desk Right Sit</field>
+ <field name="answer_score">1.0</field>
+ <field name="is_correct" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_2_choice_2">
+ <field name="question_id" ref="vendor_certification_page_2_question_2"/>
+ <field name="sequence">2</field>
+ <field name="value">Desk Combination</field>
+ <field name="answer_score">1.0</field>
+ <field name="is_correct" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_2_choice_3">
+ <field name="question_id" ref="vendor_certification_page_2_question_2"/>
+ <field name="sequence">3</field>
+ <field name="value">Cabinet with Doors</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_2_choice_4">
+ <field name="question_id" ref="vendor_certification_page_2_question_2"/>
+ <field name="sequence">4</field>
+ <field name="value">Large Desk</field>
+ <field name="answer_score">1.0</field>
+ <field name="is_correct" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_2_choice_5">
+ <field name="question_id" ref="vendor_certification_page_2_question_2"/>
+ <field name="sequence">5</field>
+ <field name="value">Letter Tray</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_2_choice_5">
+ <field name="question_id" ref="vendor_certification_page_2_question_2"/>
+ <field name="sequence">6</field>
+ <field name="value">Office Chair Black</field>
+ <field name="answer_score">-1.0</field>
+ </record>
+ <!-- Question and predefined answer 8 -->
+ <record model="survey.question" id="vendor_certification_page_2_question_3">
+ <field name="survey_id" ref="vendor_certification" />
+ <field name="sequence">10</field>
+ <field name="title">What do you think about our prices (not rated)?</field>
+ <field name="question_type">simple_choice</field>
+ <field name="display_mode">dropdown</field>
+ <field name="constr_mandatory" eval="True" />
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_3_choice_1">
+ <field name="question_id" ref="vendor_certification_page_2_question_3"/>
+ <field name="sequence">1</field>
+ <field name="value">Very underpriced</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_3_choice_2">
+ <field name="question_id" ref="vendor_certification_page_2_question_3"/>
+ <field name="sequence">2</field>
+ <field name="value">Underpriced</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_3_choice_3">
+ <field name="question_id" ref="vendor_certification_page_2_question_3"/>
+ <field name="sequence">3</field>
+ <field name="value">Correctly priced</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_3_choice_4">
+ <field name="question_id" ref="vendor_certification_page_2_question_3"/>
+ <field name="sequence">4</field>
+ <field name="value">A little bit overpriced</field>
+ </record>
+ <record model="survey.label" id="vendor_certification_page_2_question_3_choice_5">
+ <field name="question_id" ref="vendor_certification_page_2_question_3"/>
+ <field name="sequence">5</field>
+ <field name="value">A lot overpriced</field>
+ </record>
+ </data>
+</odoo> \ No newline at end of file