diff options
| author | Aurélien Warnon <awa@odoo.com> | 2019-02-06 09:29:37 +0000 |
|---|---|---|
| committer | Aurélien Warnon <awa@odoo.com> | 2019-02-06 10:34:40 +0000 |
| commit | afb1abbb60e5cdc4f76ab7b5a1b54b5e8a9283d5 (patch) | |
| tree | 351e5ef81e76689378b77739af1adfe0b1efcd02 /addons/survey/data | |
| parent | dba478332681dd21a39c4a183c002b1cf6e046d2 (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.xml | 38 | ||||
| -rw-r--r-- | addons/survey/data/survey_data.xml | 8 | ||||
| -rw-r--r-- | addons/survey/data/survey_demo_certification.xml | 302 |
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"><p>Test your vendor skills!.</p></field> + <field name="thank_you_message"><p></p></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"><p>Test your knowledge of your products!</p></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"><p>Test your knowledge of our prices.</p></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 |
