summaryrefslogtreecommitdiff
path: root/addons/gamification/data
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/gamification/data
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/gamification/data')
-rw-r--r--addons/gamification/data/badge.xml141
-rw-r--r--addons/gamification/data/cron.xml27
-rw-r--r--addons/gamification/data/gamification_karma_rank_data.xml76
-rw-r--r--addons/gamification/data/gamification_karma_rank_demo.xml39
-rw-r--r--addons/gamification/data/gamification_karma_tracking_demo.xml116
-rw-r--r--addons/gamification/data/goal_base.xml330
6 files changed, 729 insertions, 0 deletions
diff --git a/addons/gamification/data/badge.xml b/addons/gamification/data/badge.xml
new file mode 100644
index 00000000..fb7c3c6a
--- /dev/null
+++ b/addons/gamification/data/badge.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="1">
+ <record id="badge_good_job" model="gamification.badge">
+ <field name="name">Good Job</field>
+ <field name="description">You did great at your job.</field>
+ <field name="rule_auth">everyone</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/badge_good_job-image.png"/>
+ </record>
+
+ <record id="badge_problem_solver" model="gamification.badge">
+ <field name="name">Problem Solver</field>
+ <field name="description">No one can solve challenges like you do.</field>
+ <field name="rule_auth">everyone</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/badge_problem_solver-image.png"/>
+ </record>
+
+ <record id="badge_hidden" model="gamification.badge">
+ <field name="name">Hidden</field>
+ <field name="description">You have found the hidden badge</field>
+ <field name="rule_auth">nobody</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/badge_hidden-image.png"/>
+ <field name="active" eval="False" />
+ </record>
+
+ <record id="badge_idea" model="gamification.badge">
+ <field name="name">Brilliant</field>
+ <field name="description">With your brilliant ideas, you are an inspiration to others.</field>
+ <field name="rule_auth">everyone</field>
+ <field name="rule_max">True</field>
+ <field name="rule_max_number">2</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/badge_idea-image.png"/>
+ </record>
+
+ <record id="email_template_badge_received" model="mail.template">
+ <field name="name">Received Badge</field>
+ <field name="subject">New badge ${object.badge_id.name} granted</field>
+ <field name="model_id" ref="gamification.model_gamification_badge_user"/>
+ <field name="partner_to">${object.user_id.partner_id.id}</field>
+ <field name="body_html" type="xml">
+<table border="0" cellpadding="0" style="padding-top: 16px; background-color: #F1F1F1; color: #454748; width: 100%; border-collapse:separate;"><tr><td align="center">
+<table border="0" width="590" cellpadding="0" style="padding: 16px; background-color: white; color: #454748; border-collapse:separate;" summary="o_mail_notification">
+<tbody>
+ <!-- HEADER -->
+ <tr>
+ <td align="center" style="min-width: 590px;">
+ <table width="590" border="0" cellpadding="0" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;">
+ <tr><td valign="middle">
+ <span style="font-size: 10px;">Your Badge</span><br/>
+ <span style="font-size: 20px; font-weight: bold;">
+ ${object.badge_id.name}
+ </span>
+ </td><td valign="middle" align="right">
+ <img src="/logo.png?company=${object.user_id.company_id.id}" style="padding: 0px; margin: 0px; height: auto; width: 80px;" alt="${object.user_id.company_id.name}"/>
+ </td></tr>
+ <tr><td colspan="2" style="text-align:center;">
+ <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;"/>
+ </td></tr>
+ </table>
+ </td>
+ </tr>
+ <!-- CONTENT -->
+ <tr>
+ <td align="center" style="min-width: 590px;">
+ <table width="590" border="0" cellpadding="0" style="min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;">
+ <tr><td valign="top" style="font-size: 14px;">
+ <div>
+ Congratulations ${object.user_id.name} !<br/>
+ You just received badge <strong>${object.badge_id.name}</strong> !<br/>
+ % if object.badge_id.description
+ <table cellspacing="0" cellpadding="0" border="0" style="width: 560px; margin-top: 5px;">
+ <tbody><tr>
+ <td valign="center">
+ <img src="/web/image/gamification.badge/${object.badge_id.id}/image_128/80x80" style="padding: 0px; margin: 0px; height: auto; width: 80px;" alt="${user.company_id.name}"/>
+ </td>
+ <td valign="center">
+ <cite>${object.badge_id.description}</cite>
+ </td>
+ </tr></tbody>
+ </table>
+ % endif
+ <br/>
+ % if object.sender_id
+ This badge was granted by <strong>${object.sender_id.name}</strong>.
+ % endif
+ <br/>
+ % if object.comment
+ ${object.comment}
+ % endif
+ <br/><br/>
+ Thank you,
+ % if object.sender_id.signature:
+ <br />
+ ${object.sender_id.signature | safe}
+ % endif
+ </div>
+ </td></tr>
+ <tr><td style="text-align:center;">
+ <hr width="100%" style="background-color:rgb(204,204,204);border:medium none;clear:both;display:block;font-size:0px;min-height:1px;line-height:0; margin: 16px 0px 16px 0px;"/>
+ </td></tr>
+ </table>
+ </td>
+ </tr>
+ <!-- FOOTER -->
+ <tr>
+ <td align="center" style="min-width: 590px;">
+ <table width="590" border="0" cellpadding="0" style="min-width: 590px; background-color: white; font-size: 12px; padding: 0px 8px 0px 8px; border-collapse:separate;">
+ <tr><td valign="middle" align="left">
+ ${object.user_id.company_id.name}
+ </td></tr>
+ <tr><td valign="middle" align="left" style="opacity: 0.7;">
+ ${object.user_id.company_id.phone}
+ % if object.user_id.company_id.email
+ | <a href="'mailto:%s' % ${object.user_id.company_id.email}" style="text-decoration:none; color: #454748;">${object.user_id.company_id.email}</a>
+ % endif
+ % if object.user_id.company_id.website
+ | <a href="'%s' % ${object.user_id.company_id.website}" style="text-decoration:none; color: #454748;">
+ ${object.user_id.company_id.website}
+ </a>
+ % endif
+ </td></tr>
+ </table>
+ </td>
+ </tr>
+</tbody>
+</table>
+</td></tr>
+<!-- POWERED BY -->
+<tr><td align="center" style="min-width: 590px;">
+ <table width="590" border="0" cellpadding="0" style="min-width: 590px; background-color: #F1F1F1; color: #454748; padding: 8px; border-collapse:separate;">
+ <tr><td style="text-align: center; font-size: 14px;">
+ Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=gamification" style="color: #875A7B;">Odoo</a>
+ </td></tr>
+ </table>
+</td></tr>
+</table></field>
+ <field name="lang">${object.user_id.lang}</field>
+ <field name="auto_delete" eval="True"/>
+ </record>
+ </data>
+</odoo>
diff --git a/addons/gamification/data/cron.xml b/addons/gamification/data/cron.xml
new file mode 100644
index 00000000..4e592056
--- /dev/null
+++ b/addons/gamification/data/cron.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="1">
+ <record forcecreate="True" id="ir_cron_check_challenge" model="ir.cron">
+ <field name="name">Gamification: Goal Challenge Check</field>
+ <field name="model_id" ref="model_gamification_challenge"/>
+ <field name="state">code</field>
+ <field name="code">model._cron_update()</field>
+ <field name="interval_number">1</field>
+ <field name="interval_type">days</field>
+ <field name="numbercall">-1</field>
+ <field eval="False" name="doall" />
+ </record>
+
+ <record id="ir_cron_consolidate_last_month" model="ir.cron">
+ <field name="name">Gamification: Karma tracking consolidation</field>
+ <field name="model_id" ref="model_gamification_karma_tracking"/>
+ <field name="state">code</field>
+ <field name="code">model._consolidate_last_month()</field>
+ <field name="active" eval="True"/>
+ <field name="interval_number">1</field>
+ <field name="interval_type">months</field>
+ <field name="numbercall">-1</field>
+ <field name="nextcall" eval="(DateTime.now() + relativedelta(day=1, months=1)).strftime('%Y-%m-%d 04:00:00')" />
+ </record>
+ </data>
+</odoo>
diff --git a/addons/gamification/data/gamification_karma_rank_data.xml b/addons/gamification/data/gamification_karma_rank_data.xml
new file mode 100644
index 00000000..e0ef1320
--- /dev/null
+++ b/addons/gamification/data/gamification_karma_rank_data.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo><data noupdate="1">
+ <!--Karma-->
+ <record id="base.user_root" model="res.users">
+ <field name="karma">2500</field>
+ </record>
+ <record id="base.user_admin" model="res.users">
+ <field name="karma">2500</field>
+ </record>
+
+ <!--Ranks-->
+ <record id="rank_newbie" model="gamification.karma.rank">
+ <field name="name">Newbie</field>
+ <field name="description" type="html"><p>You just began the adventure! Welcome!</p></field>
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Earn your first points and join the adventure !</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_newbie_badge.svg"/>
+ </div>
+ </field>
+ <field name="karma_min">1</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/rank_newbie_badge.svg"/>
+ </record>
+
+ <record id="rank_student" model="gamification.karma.rank">
+ <field name="name">Student</field>
+ <field name="description" type="html"><p>You're a young padawan now. May the force be with you!</p></field>
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank to show the rest of the world you exist.</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_student_badge.svg"/>
+ </div>
+ </field>
+ <field name="karma_min">100</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/rank_student_badge.svg"/>
+ </record>
+
+ <record id="rank_bachelor" model="gamification.karma.rank">
+ <field name="name">Bachelor</field>
+ <field name="description" type="html"><p>You love learning things. Curiosity is a good way to progress.</p></field>
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank to improve your status!</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_bachelor_badge.svg"/>
+ </div>
+ </field>
+ <field name="karma_min">500</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/rank_bachelor_badge.svg"/>
+ </record>
+
+ <record id="rank_master" model="gamification.karma.rank">
+ <field name="name">Master</field>
+ <field name="description" type="html"><p>You know what you are talking about. People learn from you.</p></field>
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank and become a Master!</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_master_badge.svg"/>
+ </div>
+ </field>
+ <field name="karma_min">2000</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/rank_master_badge.svg"/>
+ </record>
+
+ <record id="rank_doctor" model="gamification.karma.rank">
+ <field name="name">Doctor</field>
+ <field name="description" type="html"><p>You have reached the last rank. Congratulations!</p></field>
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank and become a powerful user!</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_doctor_badge.svg"/>
+ </div>
+ </field>
+ <field name="karma_min">10000</field>
+ <field name="image_1920" type="base64" file="gamification/static/img/rank_doctor_badge.svg"/>
+ </record>
+</data></odoo>
diff --git a/addons/gamification/data/gamification_karma_rank_demo.xml b/addons/gamification/data/gamification_karma_rank_demo.xml
new file mode 100644
index 00000000..848e7fd6
--- /dev/null
+++ b/addons/gamification/data/gamification_karma_rank_demo.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo><data noupdate="1">
+ <!--Ranks-->
+ <record id="rank_student" model="gamification.karma.rank">
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank and gain a very nice mug !</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_mug.png"/>
+ </div>
+ </field>
+ </record>
+
+ <record id="rank_bachelor" model="gamification.karma.rank">
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank and gain a very magic wand !</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_wand.png"/>
+ </div>
+ </field>
+ </record>
+
+ <record id="rank_master" model="gamification.karma.rank">
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank and gain a very nice hat !</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_hat.png"/>
+ </div>
+ </field>
+ </record>
+
+ <record id="rank_doctor" model="gamification.karma.rank">
+ <field name="description_motivational" type="html">
+ <div class="media align-items-center">
+ <div class="media-body">Reach the next rank and gain a very nice unicorn !</div>
+ <img class="ml-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_unicorn.png"/>
+ </div>
+ </field>
+ </record>
+</data></odoo>
diff --git a/addons/gamification/data/gamification_karma_tracking_demo.xml b/addons/gamification/data/gamification_karma_tracking_demo.xml
new file mode 100644
index 00000000..1b08eca6
--- /dev/null
+++ b/addons/gamification/data/gamification_karma_tracking_demo.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo><data noupdate="1">
+
+ <!--base.user_demo-->
+ <record id="karma_tracking_user_demo_1st_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="old_value">0</field>
+ <field name="new_value">1000</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=1, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_demo_2nd_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="old_value">1000</field>
+ <field name="new_value">1500</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=2, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_demo_5th_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="old_value">1500</field>
+ <field name="new_value">2000</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=5, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_demo_20th_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="old_value">2000</field>
+ <field name="new_value">2050</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=20, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_demo_today" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_demo"/>
+ <field name="old_value">2050</field>
+ <field name="new_value">2500</field>
+ <field name="tracking_date" eval="(DateTime.now()).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="base.user_demo" model="res.users">
+ <field name="karma">2500</field>
+ </record>
+ <function model="gamification.karma.tracking" name="unlink">
+ <value model="gamification.karma.tracking" eval="obj().search([
+ ('user_id', '=', ref('base.user_demo')),
+ ('old_value', '=', 0),
+ ('new_value', '=', 2500)
+ ]).id"/>
+ </function>
+
+ <!--base.demo_user0 -->
+ <record id="karma_tracking_user_portal_2nd_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.demo_user0"/>
+ <field name="old_value">0</field>
+ <field name="new_value">5</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=2, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_portal_3rd_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.demo_user0"/>
+ <field name="old_value">5</field>
+ <field name="new_value">10</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=3, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_portal_10th_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.demo_user0"/>
+ <field name="old_value">10</field>
+ <field name="new_value">20</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=10, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_portal_yesterday" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.demo_user0"/>
+ <field name="old_value">20</field>
+ <field name="new_value">25</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_portal_today" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.demo_user0"/>
+ <field name="old_value">25</field>
+ <field name="new_value">30</field>
+ <field name="tracking_date" eval="DateTime.now()"/>
+ </record>
+ <record id="base.demo_user0" model="res.users">
+ <field name="karma">30</field>
+ </record>
+ <function model="gamification.karma.tracking" name="unlink">
+ <value model="gamification.karma.tracking" eval="obj().search([
+ ('user_id', '=', ref('base.demo_user0')),
+ ('old_value', '=', 0),
+ ('new_value', '=', 30)
+ ]).id"/>
+ </function>
+
+ <!--base.user_admin (already have a tracking to 2500)-->
+ <record id="karma_tracking_user_admin_1st_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_admin"/>
+ <field name="old_value">0</field>
+ <field name="new_value">2000</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=1, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_admin_5th_day_last_month" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_admin"/>
+ <field name="old_value">2000</field>
+ <field name="new_value">2250</field>
+ <field name="tracking_date" eval="(DateTime.now() - relativedelta(day=5, months=1)).strftime('%Y-%m-%d')"/>
+ </record>
+ <record id="karma_tracking_user_admin_today" model="gamification.karma.tracking">
+ <field name="user_id" ref="base.user_admin"/>
+ <field name="old_value">2250</field>
+ <field name="new_value">2500</field>
+ <field name="tracking_date" eval="(DateTime.now()).strftime('%Y-%m-%d')"/>
+ </record>
+ <function model="gamification.karma.tracking" name="unlink">
+ <value model="gamification.karma.tracking" eval="obj().search([
+ ('user_id', '=', ref('base.user_admin')),
+ ('old_value', '=', 0),
+ ('new_value', '=', 2500)
+ ]).id"/>
+ </function>
+
+</data>
+</odoo>
diff --git a/addons/gamification/data/goal_base.xml b/addons/gamification/data/goal_base.xml
new file mode 100644
index 00000000..574d3e57
--- /dev/null
+++ b/addons/gamification/data/goal_base.xml
@@ -0,0 +1,330 @@
+<odoo>
+ <!-- Mail template is done in a NOUPDATE block
+ so users can freely customize/delete them -->
+ <data noupdate="1">
+ <!--Email template -->
+
+ <record id="email_template_goal_reminder" model="mail.template">
+ <field name="name">Goal: Reminder for Goal Update</field>
+ <field name="model_id" ref="gamification.model_gamification_goal"/>
+ <field name="partner_to">${object.user_id.partner_id.id}</field>
+ <field name="body_html" type="html">
+<div>
+ <strong>Reminder ${object.name}</strong><br/>
+ You have not updated your progress for the goal ${object.definition_id.name} (currently reached at ${object.completeness}%) for at least ${object.remind_update_delay} days. Do not forget to do it.
+ <br/><br/>
+ Thank you,
+ % if object.challenge_id.manager_id.signature:
+ <br />
+ ${object.challenge_id.manager_id.signature | safe}
+ % endif
+</div></field>
+ <field name="lang">${object.user_id.lang}</field>
+ <field name="auto_delete" eval="True"/>
+ </record>
+
+ <record id="simple_report_template" model="mail.template">
+ <field name="name">Challenge: Simple Challenge Report Progress</field>
+ <field name="model_id" ref="gamification.model_gamification_challenge"/>
+ <field name="body_html" type="html">
+<table cellspacing="0" cellpadding="0" width="100%" style="background-color: #EEE; border-collapse: collapse;">
+<tr>
+ <td valign="top" align="center">
+ % set record = ctx.get('record')
+ % set company = record and record.company_id or user.company_id
+ % set challenge_lines = ctx.get('challenge_lines', [])
+ <table cellspacing="0" cellpadding="0" width="600" style="margin: 0 auto; width: 570px;">
+ <tr><td>
+ <table cellspacing="0" cellpadding="0" width="100%">
+ <tr>
+ <div>
+ % if object.visibility_mode == 'ranking':
+ <td style="padding:15px;">
+ <p style="font-size:20px;color:#666666;" align="center">Leaderboard</p>
+ </td>
+ % endif
+ </div>
+ </tr>
+ </table>
+ <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#fff" style="background-color:#fff;">
+ <tr><td style="padding: 15px;">
+ % if object.visibility_mode == 'personal':
+ <span style="color:#666666;font-size:13px;">Here is your current progress in the challenge <strong>${object.name}</strong>.</span>
+ <table cellspacing="0" cellpadding="0" width="100%" style="margin-top:20px;">
+ <tr>
+ <td align="center">
+ <div>Personal Performance</div>
+ </td>
+ </tr>
+ </table>
+ <table cellspacing="0" cellpadding="0" width="100%" style="margin-top:30px;color:#666666;">
+ <thead>
+ <tr style="color:#9A6C8E; font-size:12px;">
+ <th align="left" style="padding-bottom: 0px;width:40%;text-align:left;">Goals</th>
+ <th style="width:20%;text-align:right;" align="left">Target</th>
+ <th style="width:20%;text-align:right;" align="right">Current</th>
+ <th style="width:20%;text-align:right;" align="right">Completeness</th>
+ </tr>
+ <tr>
+ <td colspan="5" style="height:1px;background-color:#9A6C8E;"></td>
+ </tr>
+ </thead>
+ <tbody>
+ % for line in challenge_lines:
+ <tr style="font-weight:bold;">
+ <td style="padding: 20px 0;" align="left">
+ ${line['name']}
+ % if line['suffix'] or line['monetary']:
+ (${line['full_suffix']})
+ % endif
+ </td>
+ <td style="padding: 20px 0;" align="right">${"%.2f" % line['target']}
+ % if line['suffix']:
+ ${line['suffix']}
+ % endif
+ </td>
+ <td style="padding: 20px 0;" align="right">${"%.2f" % line['current']}
+ % if line['suffix']:
+ ${line['suffix']}
+ % endif
+ </td>
+ <td style="padding: 20px 0;font-size:25px;color:#9A6C8E;" align="right"><strong>${line['completeness']| int}%</strong></td>
+ </tr>
+ <tr>
+ <td colspan="5" style="height:1px;background-color:#e3e3e3;"></td>
+ </tr>
+ % endfor
+ </tbody>
+ </table>
+ % else:
+ <span style="color:#A8A8A8;font-size:13px;">
+ Challenge: <strong>${object.name}</strong>.
+ </span>
+ % for line in challenge_lines:
+ <!-- Header + Button table -->
+ <table cellspacing="0" cellpadding="0" width="100%" style="margin-top:35px;">
+ <tr>
+ <td width="50%">
+ <div>Top Achievers for goal <strong>${line['name']}</strong></div>
+ </td>
+ </tr>
+ </table>
+ <!-- Podium -->
+ % if len(line['goals']) == 2:
+ <table cellspacing="0" cellpadding="0" width="100%" style="margin-top:10px;">
+ <tr><td style="padding:0 30px;">
+ <table cellspacing="0" cellpadding="0" width="100%" style="table-layout: fixed;">
+ <tr>
+ % set top_goals = line['goals'][:3]
+ % for goal in top_goals:
+ <td align="center" style="width:32%;">
+ % if loop.index == 1:
+ % set extra_div = '<div style="height:40px;"></div>'
+ % set heightA = 95
+ % set heightB = 75
+ % set bgColor = '#b898b0'
+ % set fontSize = 50
+ % set podiumPosition = '2'
+ % elif loop.index == 2:
+ % set extra_div = ''
+ % set heightA = 55
+ % set heightB = 115
+ % set bgColor = '#9A6C8E'
+ % set fontSize = 85
+ % set podiumPosition = '1'
+ % elif loop.index == 3:
+ % set extra_div = '<div style="height:60px;"></div>'
+ % set heightA = 115
+ % set heightB = 55
+ % set bgColor = '#c8afc1'
+ % set fontSize = 35
+ % set podiumPosition = '3'
+ % endif
+ <div style="margin:0 3px 0 3px;height:220px;">
+ <div style="height:${heightA}px;">
+ ${extra_div | safe}
+ <div style="height:55px;">
+ <img style="margin-bottom:5px;width:50px;height:50px;border-radius:50%;object-fit:cover;" t-att-src="image_data_uri(object.env['res.users'].browse(goal['user_id']).partner_id.image_128)" alt="${goal['name']}"/>
+ </div>
+ <div align="center" style ="color:${bgColor};height:20px">
+ ${goal['name']}
+ </div>
+ </div>
+ <div style="background-color:${bgColor | safe};height:${heightB}px;">
+ <strong><span style="color:#fff;font-size:${fontSize}px;">${podiumPosition | safe}</span></strong>
+ </div>
+ <div style="height:30px;">
+ ${"%.2f" % goal['current']}
+ % if line['suffix'] or line['monetary']:
+ ${line['full_suffix']}
+ % endif
+ </div>
+ </div>
+ </td>
+ % endfor
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ % endif
+ <!-- data table -->
+ <table cellspacing="0" cellpadding="0" width="100%" style="margin-bottom:5px">
+ <tr>
+ <td>
+ <table cellspacing="0" cellpadding="0" width="100%" style="margin-top:30px;margin-bottom:5px;color:#666666;">
+ <thead>
+ <tr style="color:#9A6C8E; font-size:12px;">
+ <th style="width:15%;text-align:center;">Rank</th>
+ <th style="width:25%;text-align:left;">Name</th>
+ <th style="width:30%;text-align:right;">Performance
+ % if line['suffix']:
+ (${line['suffix']})
+ % elif line['monetary']:
+ (${company.currency_id.symbol})
+ % endif
+ </th>
+ <th style="width:30%;text-align:right;">Completeness</th>
+ </tr>
+ <tr>
+ <td colspan="5" style="height:1px;background-color:#9A6C8E;"></td>
+ </tr>
+ </thead>
+ <tbody>
+ % for goal in line['goals']:
+ <tr>
+ % set tdBgColor = '#fff'
+ % set tdColor = 'gray'
+ % set mutedColor = '#AAAAAA'
+ % set tdPercentageColor = '#9A6C8E'
+ <td width="15%" align="center" valign="middle" style="background-color:${tdBgColor};padding :5px 0;font-size:20px;">${goal['rank']+1}
+ </td>
+ <td width="25%" align="left" valign="middle" style="background-color:${tdBgColor};padding :5px 0;font-size:13px;">${goal['name']}</td>
+ <td width="30%" align="right" style="background-color:${tdBgColor};padding:5px 0;line-height:1;">${"%.2f" % goal['current']}<br/><span style="font-size:13px;color:${mutedColor};">on ${"%.2f" % line['target']}</span>
+ </td>
+ <td width="30%" style="color:${tdPercentageColor};background-color:${tdBgColor};padding-right:15px;font-size:22px;" align="right"><strong>${goal['completeness'] | int}%</strong></td>
+ </tr>
+ <tr>
+ <td colspan="5" style="height:1px;background-color:#DADADA;"></td>
+ </tr>
+ % endfor
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </table>
+ % endfor
+ % endif
+ </td></tr>
+ </table>
+ </td></tr>
+ </table>
+ </td>
+</tr>
+</table>
+ </field>
+ </record>
+
+ <!-- goal definitions -->
+ <record model="gamification.goal.definition" id="definition_base_timezone">
+ <field name="name">Set your Timezone</field>
+ <field name="description">Configure your profile and specify your timezone</field>
+ <field name="computation_mode">count</field>
+ <field name="display_mode">boolean</field>
+ <field name="model_id" ref="base.model_res_users"/>
+ <field name="domain">[('partner_id.tz', '!=', False)]</field>
+ <field name="action_id" ref="base.action_res_users_my"/>
+ <field name="res_id_field">user.id</field>
+ <field name="batch_mode">True</field>
+ <field name="batch_distinctive_field" ref="base.field_res_users__id"/>
+ <field name="batch_user_expression">user.id</field>
+ </record>
+
+ <record model="gamification.goal.definition" id="definition_base_company_data">
+ <field name="name">Set your Company Data</field>
+ <field name="description">Write some information about your company (specify at least a name)</field>
+ <field name="computation_mode">count</field>
+ <field name="display_mode">boolean</field>
+ <field name="model_id" ref="base.model_res_company"/>
+ <field name="domain">[('user_ids', 'in', [user.id]), ('name', '=', 'YourCompany')]</field>
+ <field name="condition">lower</field>
+ <field name="action_id" ref="base.action_res_company_form"/>
+ <field name="res_id_field">user.company_id.id</field>
+ </record>
+
+ <record model="gamification.goal.definition" id="definition_base_company_logo">
+ <field name="name">Set your Company Logo</field>
+ <field name="computation_mode">count</field>
+ <field name="display_mode">boolean</field>
+ <field name="model_id" ref="base.model_res_company"/>
+ <field name="domain">[('user_ids', 'in', [user.id]),('logo', '!=', False)]</field>
+ <field name="action_id" ref="base.action_res_company_form"/>
+ <field name="res_id_field">user.company_id.id</field>
+ </record>
+
+ <record id="action_new_simplified_res_users" model="ir.actions.act_window">
+ <field name="name">Create User</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">res.users</field>
+ <field name="target">current</field>
+ <field name="view_id" ref="base.view_users_simple_form"/>
+ <field name="context">{}</field>
+ <field name="help">Create and manage users that will connect to the system. Users can be deactivated should there be a period of time during which they will/should not connect to the system. You can assign them groups in order to give them specific access to the applications they need to use in the system.</field>
+ </record>
+
+ <record model="gamification.goal.definition" id="definition_base_invite">
+ <field name="name">Invite new Users</field>
+ <field name="description">Create at least another user</field>
+ <field name="display_mode">boolean</field>
+ <field name="computation_mode">count</field>
+ <field name="model_id" ref="base.model_res_users"/>
+ <field name="domain">[('id', '!=', user.id)]</field>
+ <field name="action_id" ref="action_new_simplified_res_users"/>
+ </record>
+
+ <!-- challenges -->
+ <record model="gamification.challenge" id="challenge_base_discover">
+ <field name="name">Complete your Profile</field>
+ <field name="period">once</field>
+ <field name="visibility_mode">personal</field>
+ <field name="report_message_frequency">never</field>
+ <field name="user_domain" eval="str([('groups_id.id', '=', ref('base.group_user'))])" />
+ <field name="state">inprogress</field>
+ <field name="challenge_category">other</field>
+ </record>
+
+ <record model="gamification.challenge" id="challenge_base_configure">
+ <field name="name">Setup your Company</field>
+ <field name="period">once</field>
+ <field name="visibility_mode">personal</field>
+ <field name="report_message_frequency">never</field>
+ <field name="user_domain" eval="str([('groups_id.id', '=', ref('base.group_erp_manager'))])" />
+ <field name="state">inprogress</field>
+ <field name="challenge_category">other</field>
+ </record>
+
+ <!-- lines -->
+ <record model="gamification.challenge.line" id="line_base_discover1">
+ <field name="definition_id" ref="definition_base_timezone"/>
+ <field name="target_goal">1</field>
+ <field name="challenge_id" ref="challenge_base_discover"/>
+ </record>
+
+ <record model="gamification.challenge.line" id="line_base_admin2">
+ <field name="definition_id" ref="definition_base_company_logo"/>
+ <field name="target_goal">1</field>
+ <field name="challenge_id" ref="challenge_base_configure"/>
+ </record>
+ <record model="gamification.challenge.line" id="line_base_admin1">
+ <field name="definition_id" ref="definition_base_company_data"/>
+ <field name="target_goal">0</field>
+ <field name="challenge_id" ref="challenge_base_configure"/>
+ </record>
+ <record model="gamification.challenge.line" id="line_base_admin3">
+ <field name="definition_id" ref="definition_base_invite"/>
+ <field name="target_goal">1</field>
+ <field name="challenge_id" ref="challenge_base_configure"/>
+ </record>
+ </data>
+
+</odoo>