19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:32:43 +01:00
parent 4607ccbd2e
commit 825ff6514e
487 changed files with 184979 additions and 195262 deletions

View file

@ -21,36 +21,14 @@ pip install odoo-bringout-oca-ocb-gamification
## Dependencies
This addon depends on:
- mail
- web_kanban_gauge
## Manifest Information
- **Name**: Gamification
- **Version**: 1.0
- **Category**: Human Resources
- **License**: LGPL-3
- **Installable**: False
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `gamification`.
- Repository: https://github.com/OCA/OCB
- Branch: 19.0
- Path: addons/gamification
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md
This package preserves the original LGPL-3 license.

View file

@ -5,7 +5,7 @@
'version': '1.0',
'sequence': 160,
'category': 'Human Resources',
'depends': ['mail', 'web_kanban_gauge'],
'depends': ['mail'],
'description': """
Gamification process
====================
@ -44,5 +44,11 @@ Both goals and badges are flexibles and can be adapted to a large range of modul
'data/gamification_karma_rank_demo.xml',
'data/gamification_karma_tracking_demo.xml',
],
'assets': {
'web.assets_backend': [
'gamification/static/src/**/*',
],
},
'author': 'Odoo S.A.',
'license': 'LGPL-3',
}

View file

@ -54,7 +54,7 @@
<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="user_domain" eval="str([('all_group_ids', 'in', [ref('base.group_user')])])" />
<field name="state">inprogress</field>
<field name="challenge_category">other</field>
</record>
@ -64,7 +64,7 @@
<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="user_domain" eval="str([('all_group_ids', 'in', [ref('base.group_erp_manager')])])" />
<field name="state">inprogress</field>
<field name="challenge_category">other</field>
</record>

View file

@ -1,11 +1,15 @@
<?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 id="karma_tracking_user_root" model="gamification.karma.tracking" forcecreate="0">
<field name="user_id" ref="base.user_root"/>
<field name="new_value">2500</field>
<field name="reason">I am the Root!</field>
</record>
<record id="base.user_admin" model="res.users">
<field name="karma">2500</field>
<record id="karma_tracking_user_admin" model="gamification.karma.tracking" forcecreate="0">
<field name="user_id" ref="base.user_admin"/>
<field name="new_value">2500</field>
<field name="reason">I am the Admin!</field>
</record>
<!--Ranks-->
@ -14,8 +18,8 @@
<field name="description" type="html"><p>You just began the adventure! Welcome!</p></field>
<field name="description_motivational" type="html">
<div class="d-flex align-items-center">
<div class="flex-grow-1">Earn your first points and join the adventure !</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_newbie_badge.svg"/>
<div class="flex-grow-1">Earn your first points and join the adventure!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_newbie_badge.svg" alt=""/>
</div>
</field>
<field name="karma_min">1</field>
@ -28,7 +32,7 @@
<field name="description_motivational" type="html">
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank to show the rest of the world you exist.</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_student_badge.svg"/>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_student_badge.svg" alt=""/>
</div>
</field>
<field name="karma_min">100</field>
@ -41,7 +45,7 @@
<field name="description_motivational" type="html">
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank to improve your status!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_bachelor_badge.svg"/>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_bachelor_badge.svg" alt=""/>
</div>
</field>
<field name="karma_min">500</field>
@ -54,7 +58,7 @@
<field name="description_motivational" type="html">
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank and become a Master!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_master_badge.svg"/>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_master_badge.svg" alt=""/>
</div>
</field>
<field name="karma_min">2000</field>
@ -67,7 +71,7 @@
<field name="description_motivational" type="html">
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank and become a powerful user!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_doctor_badge.svg"/>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_doctor_badge.svg" alt=""/>
</div>
</field>
<field name="karma_min">10000</field>

View file

@ -6,8 +6,8 @@
<field name="description_motivational" type="html">
<div hidden="true">Reach the next rank to show the rest of the world you exist.</div>
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank and gain a very nice mug !</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_mug.png"/>
<div class="flex-grow-1">Reach the next rank and gain a very nice mug!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_mug.png" alt=""/>
</div>
</field>
</record>
@ -16,8 +16,8 @@
<field name="description_motivational" type="html">
<div hidden="true">Reach the next rank to improve your status!</div>
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank and gain a very magic wand !</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_wand.png"/>
<div class="flex-grow-1">Reach the next rank and gain a very magic wand!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_wand.png" alt=""/>
</div>
</field>
</record>
@ -26,8 +26,8 @@
<field name="description_motivational" type="html">
<div hidden="true">Reach the next rank and become a Master!</div>
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank and gain a very nice hat !</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_hat.png"/>
<div class="flex-grow-1">Reach the next rank and gain a very nice hat!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_hat.png" alt=""/>
</div>
</field>
</record>
@ -36,8 +36,8 @@
<field name="description_motivational" type="html">
<div hidden="true">Reach the next rank and become a powerful user!</div>
<div class="d-flex align-items-center">
<div class="flex-grow-1">Reach the next rank and gain a very nice unicorn !</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_unicorn.png"/>
<div class="flex-grow-1">Reach the next rank and gain a very nice unicorn!</div>
<img class="ms-3 img img-fluid" style="max-height: 72px;" src="/gamification/static/img/rank_misc_unicorn.png" alt=""/>
</div>
</field>
</record>

View file

@ -32,9 +32,6 @@
<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')),
@ -74,9 +71,6 @@
<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')),

View file

@ -8,19 +8,16 @@
<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">
<record id="ir_cron_consolidate" 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="code">model._consolidate_cron()</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>

View file

@ -5,7 +5,8 @@
<field name="name">Gamification: Badge Received</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="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Sent automatically to the user who received a badge</field>
<field name="body_html" type="html">
<table border="0" cellpadding="0" style="padding-top: 16px; background-color: #F1F1F1; color: #454748; width: 100%; border-collapse:separate;"><tr><td align="center">
@ -16,47 +17,30 @@
<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;" t-out="object.badge_id.name or ''"></span>
</td><td valign="middle" align="right">
<img t-attf-src="/logo.png?company={{ object.user_id.company_id.id }}" style="padding: 0px; margin: 0px; height: auto; width: 80px;" t-att-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>Hi <strong><t t-out="object.user_id.name or ''"></t></strong>,</div><br/>
<div>You've just been awarded the <strong><t t-out="object.badge_id.name or ''"></t></strong> badge
<t t-if="object.sender_id"> by <strong><t t-out="object.sender_id.name or ''"></t></strong>.</t>
</div>
<table t-if="not is_html_empty(object.badge_id.description)" cellspacing="0" cellpadding="0" border="0" style="width: 560px; margin-top: 5px;">
<tbody><tr>
<td valign="center">
<img t-attf-src="/web/image/gamification.badge/{{ object.badge_id.id }}/image_128/80x80" style="padding: 0px; margin: 0px; height: auto; width: 80px;" t-att-alt="user.company_id.name"/>
</td>
<td valign="center">
<cite t-out="object.badge_id.description or ''"></cite>
</td>
</tr></tbody>
</table>
<t t-if="object.comment">
<div style="margin-top: 20px; margin-bottom: 20px; padding: 15px; border-radius: 5px; background-color: #fff3cd; border-left: 3px solid #ffe69c;">
💬 <strong><t t-out="object.sender_id.name or ''"/> says:</strong>
<div style="margin-top: 10px;">
"<i><t t-out="object.comment or ''"/></i>"
</div>
</div>
</t>
<div>
Congratulations <t t-out="object.user_id.name or ''"></t> !<br/>
You just received badge <strong t-out="object.badge_id.name or ''"></strong> !<br/>
<table t-if="not is_html_empty(object.badge_id.description)" cellspacing="0" cellpadding="0" border="0" style="width: 560px; margin-top: 5px;">
<tbody><tr>
<td valign="center">
<img t-attf-src="/web/image/gamification.badge/{{ object.badge_id.id }}/image_128/80x80" style="padding: 0px; margin: 0px; height: auto; width: 80px;" t-att-alt="user.company_id.name"/>
</td>
<td valign="center">
<cite t-out="object.badge_id.description or ''"></cite>
</td>
</tr></tbody>
</table>
<br/>
<t t-if="object.sender_id">
This badge was granted by <strong t-out="object.sender_id.name or ''"></strong>.
</t>
<br/>
<t t-if="object.comment" t-out="object.comment or ''"></t>
<br/><br/>
Thank you,
<t t-if="object.sender_id.signature">
<br />
<t t-out="object.sender_id.signature or ''"></t>
</t>
Thank you for your contributions, and keep shining!
</div>
</td></tr>
<tr><td style="text-align:center;">
@ -91,7 +75,7 @@
<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>
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&amp;utm_medium=gamification" t-attf-style="color: {{object.user_id.company_id.email_secondary_color or '#875A7B'}};">Odoo</a>
</td></tr>
</table>
</td></tr>
@ -103,7 +87,8 @@
<record id="email_template_goal_reminder" model="mail.template">
<field name="name">Gamification: 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="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Sent automatically to participant who haven't updated their goal</field>
<field name="body_html" type="html">
<div>
@ -123,6 +108,7 @@
<record id="simple_report_template" model="mail.template">
<field name="name">Gamification: Challenge Report</field>
<field name="model_id" ref="gamification.model_gamification_challenge"/>
<field name="use_default_to" eval="False"/>
<field name="description">Send a challenge report to all participants</field>
<field name="body_html" type="html">
<table cellspacing="0" cellpadding="0" width="100%" style="background-color: #EEE; border-collapse: collapse;">
@ -324,10 +310,11 @@
<field name="model_id" ref="base.model_res_users"/>
<field name="subject">New rank: {{ object.rank_id.name }}</field>
<field name="email_to"></field>
<field name="partner_to">{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Sent automatically when user reaches a new rank</field>
<field name="body_html" type="html">
<div style="background:#F0F0F0;color:#515166;padding:10px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
<div style="color:#515166;padding:10px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
<table style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;">
<tbody>
<tr>
@ -337,17 +324,17 @@
<span t-out="object.name or ''">Joel Willis</span>!
</p>
<p>
You just reached a new rank : <strong t-out="object.rank_id.name or ''">Newbie</strong>
You just reached a new rank: <strong t-out="object.rank_id.name or ''">Newbie</strong>
</p>
<t t-if="object.next_rank_id.name">
<p>Continue your work to become a <strong t-out="object.next_rank_id.name or ''">Student</strong> !</p>
<p>Continue your work to become a <strong t-out="object.next_rank_id.name or ''">Student</strong>!</p>
</t>
<div style="margin: 16px 0px 16px 0px;">
<t t-set="gamification_redirection_data" t-value="object.get_gamification_redirection_data()"/>
<t t-foreach="gamification_redirection_data" t-as="data">
<t t-set="url" t-value="data['url']"/>
<t t-set="label" t-value="data['label']"/>
<a t-att-href="url" style="background-color: #875A7B; padding: 8px 16px 8px 16px; text-decoration: none; color: #fff; border-radius: 5px; font-size:13px;" t-out="label or ''">LABEL</a>
<a t-att-href="url" t-attf-style="background-color: {{object.company_id.email_secondary_color or '#875A7B'}}; padding: 8px 16px 8px 16px; text-decoration: none; color: {{object.company_id.email_primary_color or '#FFFFFF'}}; border-radius: 5px; font-size:13px; display: flex; max-width: fit-content; margin-bottom: 8px;" t-out="label or ''">LABEL</a>
</t>
</div>
</td>
@ -357,9 +344,12 @@
</p>
</td>
</tr>
<tr t-if="user.signature">
<td style="padding:15px 20px 10px 20px;">
<t t-out="user.signature or ''">--<br/>Mitchell Admin</t>
<tr>
<td t-if="not user.share and user.active" style="padding:15px 20px 10px 20px;">
<div>--<br/><t t-out="user.signature or ''">Mitchell Admin</t></div>
</td>
<td t-else="" style="padding:15px 20px 10px 20px;">
<t t-out="user.company_id.name or ''"/>
</td>
</tr>
</tbody>

View file

@ -1,22 +1,22 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * gamification
#
#
# Translators:
# Martin Trigaux, 2022
#
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Project-Id-Version: Odoo Server 16.0beta\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-23 08:24+0000\n"
"POT-Creation-Date: 2023-05-16 13:50+0000\n"
"PO-Revision-Date: 2022-09-22 05:46+0000\n"
"Last-Translator: Martin Trigaux, 2022\n"
"Language-Team: Afrikaans (https://app.transifex.com/odoo/teams/41243/af/)\n"
"Language-Team: Afrikaans (https://www.transifex.com/odoo/teams/41243/af/)\n"
"Language: af\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: gamification
@ -28,51 +28,15 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "%s has joined the challenge"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "%s has refused the challenge"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "<br/> %(rank)d. %(user_name)s - %(reward_name)s"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Nobody has succeeded to reach every goal, no badge is rewarded for this"
" challenge."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Reward (badge %(badge_name)s) for every succeeding user was sent to "
"%(users)s."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Special rewards were sent to the top competing users. The ranking for "
"this challenge is :"
msgstr ""
#. module: gamification
#: model:mail.template,body_html:gamification.mail_template_data_new_rank_reached
msgid ""
@ -86,10 +50,10 @@ msgid ""
" <span t-out=\"object.name or ''\">Joel Willis</span>!\n"
" </p>\n"
" <p>\n"
" You just reached a new rank : <strong t-out=\"object.rank_id.name or ''\">Newbie</strong>\n"
" You just reached a new rank: <strong t-out=\"object.rank_id.name or ''\">Newbie</strong>\n"
" </p>\n"
" <t t-if=\"object.next_rank_id.name\">\n"
" <p>Continue your work to become a <strong t-out=\"object.next_rank_id.name or ''\">Student</strong> !</p>\n"
" <p>Continue your work to become a <strong t-out=\"object.next_rank_id.name or ''\">Student</strong>!</p>\n"
" </t>\n"
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
" <t t-set=\"gamification_redirection_data\" t-value=\"object.get_gamification_redirection_data()\"></t>\n"
@ -133,30 +97,22 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"fa fa-clock-o fa-3x\" title=\"Goal in Progress\" "
"aria-label=\"Goal in Progress\"/>"
msgid "<i role=\"img\" class=\"fa fa-clock-o fa-3x\" title=\"Goal in Progress\" aria-label=\"Goal in Progress\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"text-danger fa fa-times fa-3x\" title=\"Goal "
"Failed\" aria-label=\"Goal Failed\"/>"
msgid "<i role=\"img\" class=\"text-danger fa fa-times fa-3x\" title=\"Goal Failed\" aria-label=\"Goal Failed\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"text-success fa fa-check fa-3x\" title=\"Goal "
"Reached\" aria-label=\"Goal Reached\"/>"
msgid "<i role=\"img\" class=\"text-success fa fa-check fa-3x\" title=\"Goal Reached\" aria-label=\"Goal Reached\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"<span class=\"o_stat_text\">Related</span>\n"
" <span class=\"o_stat_text\">Goals</span>"
msgid "<span class=\"o_stat_text\">Related Goals</span>"
msgstr ""
#. module: gamification
@ -177,7 +133,7 @@ msgid ""
" <tr><td valign=\"middle\">\n"
" <span style=\"font-size: 10px;\">Your Badge</span><br>\n"
" <span style=\"font-size: 20px; font-weight: bold;\" t-out=\"object.badge_id.name or ''\"></span>\n"
" </td><td valign=\"middle\" align=\"right\">\n"
" </td><td valign=\"middle\" align=\"right\" t-if=\"not object.user_id.company_id.uses_default_logo\">\n"
" <img t-attf-src=\"/logo.png?company={{ object.user_id.company_id.id }}\" style=\"padding: 0px; margin: 0px; height: auto; width: 80px;\" t-att-alt=\"object.user_id.company_id.name\">\n"
" </td></tr>\n"
" <tr><td colspan=\"2\" style=\"text-align:center;\">\n"
@ -192,8 +148,8 @@ msgid ""
" <table width=\"590\" border=\"0\" cellpadding=\"0\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n"
" <tr><td valign=\"top\" style=\"font-size: 14px;\">\n"
" <div>\n"
" Congratulations <t t-out=\"object.user_id.name or ''\"></t> !<br>\n"
" You just received badge <strong t-out=\"object.badge_id.name or ''\"></strong> !<br>\n"
" Congratulations <t t-out=\"object.user_id.name or ''\"></t>!<br>\n"
" You just received badge <strong t-out=\"object.badge_id.name or ''\"></strong>!<br>\n"
" <table t-if=\"not is_html_empty(object.badge_id.description)\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"width: 560px; margin-top: 5px;\">\n"
" <tbody><tr>\n"
" <td valign=\"center\">\n"
@ -473,9 +429,7 @@ msgstr ""
#: model:ir.model.fields,help:gamification.field_gamification_challenge_line__condition
#: model:ir.model.fields,help:gamification.field_gamification_goal__definition_condition
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__condition
msgid ""
"A goal is considered as completed when the current value is compared to the "
"value to reach"
msgid "A goal is considered as completed when the current value is compared to the value to reach"
msgstr ""
#. module: gamification
@ -513,6 +467,14 @@ msgstr ""
msgid "Active"
msgstr "Aktief"
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
#: code:addons/gamification/models/res_users.py:0
#: code:addons/gamification/tests/test_karma_tracking.py:0
msgid "Add Manually"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid "Advanced Options"
@ -615,11 +577,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"Badges are granted when a challenge is finished. This is either at the end "
"of a running period (eg: end of the month for a monthly challenge), at the "
"end date of a challenge (if no periodicity is set) or when the challenge is "
"manually closed."
msgid "Badges are granted when a challenge is finished. This is either at the end of a running period (eg: end of the month for a monthly challenge), at the end date of a challenge (if no periodicity is set) or when the challenge is manually closed."
msgstr ""
#. module: gamification
@ -650,7 +608,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal.py:0
#, python-format
msgid "Can not modify the configuration of a started goal"
msgstr ""
@ -695,9 +652,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__challenge_id
msgid ""
"Challenge that generated the goal, assign challenge to users to generate "
"goals with a value in this field."
msgid "Challenge that generated the goal, assign challenge to users to generate goals with a value in this field."
msgstr ""
#. module: gamification
@ -757,6 +712,12 @@ msgstr ""
msgid "Consolidated"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
msgid "Consolidation from %s to %s"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.action_new_simplified_res_users
msgid "Create User"
@ -789,11 +750,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.action_new_simplified_res_users
msgid ""
"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."
msgid "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."
msgstr ""
#. module: gamification
@ -845,6 +802,11 @@ msgstr ""
msgid "Data"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Date"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__field_date_id
msgid "Date Field"
@ -853,9 +815,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__computation_mode
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__computation_mode
msgid ""
"Define how the goals will be computed. The result of the operation will be "
"stored in the field 'Current'."
msgid "Define how the goals will be computed. The result of the operation will be stored in the field 'Current'."
msgstr ""
#. module: gamification
@ -880,8 +840,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"Describe the challenge: what is does, who it targets, why it matters..."
msgid "Describe the challenge: what is does, who it targets, why it matters..."
msgstr ""
#. module: gamification
@ -893,6 +852,7 @@ msgstr ""
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__description
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__description
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__description
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__reason
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid "Description"
msgstr "Beskrywing"
@ -934,10 +894,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__domain
msgid ""
"Domain for filtering records. General rule, not user depending, e.g. "
"[('state', '=', 'done')]. The expression can contain reference to 'user' "
"which is a browse record of the current user if not in batch mode."
msgid "Domain for filtering records. General rule, not user depending, e.g. [('state', '=', 'done')]. The expression can contain reference to 'user' which is a browse record of the current user if not in batch mode."
msgstr ""
#. module: gamification
@ -955,7 +912,7 @@ msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_newbie
msgid "Earn your first points and join the adventure !"
msgid "Earn your first points and join the adventure!"
msgstr ""
#. module: gamification
@ -978,7 +935,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_badge__rule_auth__everyone
msgid "Everyone"
msgstr ""
msgstr "Almal"
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_goal_definition__display_mode__boolean
@ -1052,6 +1009,11 @@ msgstr ""
msgid "Full Suffix"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__gain
msgid "Gain"
msgstr ""
#. module: gamification
#: model:ir.model,name:gamification.model_gamification_badge
msgid "Gamification Badge"
@ -1109,13 +1071,11 @@ msgstr ""
#. module: gamification
#: model:ir.actions.server,name:gamification.ir_cron_check_challenge_ir_actions_server
#: model:ir.cron,cron_name:gamification.ir_cron_check_challenge
msgid "Gamification: Goal Challenge Check"
msgstr ""
#. module: gamification
#: model:ir.actions.server,name:gamification.ir_cron_consolidate_last_month_ir_actions_server
#: model:ir.cron,cron_name:gamification.ir_cron_consolidate_last_month
#: model:ir.actions.server,name:gamification.ir_cron_consolidate_ir_actions_server
msgid "Gamification: Karma tracking consolidation"
msgstr ""
@ -1225,6 +1185,11 @@ msgstr ""
msgid "Grant this Badge"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Granted By"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_user_kanban_view
msgid "Granted by"
@ -1347,24 +1312,17 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_definition_form_view
msgid ""
"In batch mode, the domain is evaluated globally. If enabled, do not use "
"keyword 'user' in above filter domain."
msgid "In batch mode, the domain is evaluated globally. If enabled, do not use keyword 'user' in above filter domain."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__batch_distinctive_field
msgid ""
"In batch mode, this indicates which field distinguishes one user from the "
"other, e.g. user_id, partner_id..."
msgid "In batch mode, this indicates which field distinguishes one user from the other, e.g. user_id, partner_id..."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__last_update
msgid ""
"In case of manual goal, reminders are sent if the goal as not been updated "
"for a while (defined in challenge). Ignored in case of non-manual goal or "
"goal not linked to a challenge."
msgid "In case of manual goal, reminders are sent if the goal as not been updated for a while (defined in challenge). Ignored in case of non-manual goal or goal not linked to a challenge."
msgstr ""
#. module: gamification
@ -1395,6 +1353,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_res_users__karma
#: model_terms:ir.ui.view,arch_db:gamification.res_users_view_form
msgid "Karma"
msgstr ""
@ -1404,18 +1363,23 @@ msgid "Karma Changes"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge_line____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking____last_update
msgid "Last Modified on"
msgstr "Laas Gewysig op"
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_form
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Karma Owner"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.gamification_karma_tracking_action
#: model:ir.ui.menu,name:gamification.gamification_karma_tracking_menu
msgid "Karma Tracking"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/res_users.py:0
msgid "Karma Updates"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__last_report_date
@ -1481,9 +1445,8 @@ msgid "List of goals that will be set"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__message_main_attachment_id
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__message_main_attachment_id
msgid "Main Attachment"
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Manual"
msgstr ""
#. module: gamification
@ -1551,6 +1514,11 @@ msgstr ""
msgid "My Goals"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "My Karma"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__stat_my_monthly_sending
msgid "My Monthly Sending Total"
@ -1611,6 +1579,11 @@ msgstr ""
msgid "Next Report Date"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_tracking_action
msgid "No Karma Tracking"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.goals_from_challenge_act
msgid "No goal found"
@ -1634,7 +1607,12 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "Nobody has succeeded to reach every goal, no badge is rewarded for this challenge."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Nobody reached the required conditions to receive special badges."
msgstr ""
@ -1668,7 +1646,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__message_needaction_counter
#: model:ir.model.fields,help:gamification.field_gamification_challenge__message_needaction_counter
msgid "Number of messages requiring action"
msgid "Number of messages which requires an action"
msgstr ""
#. module: gamification
@ -1736,9 +1714,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__period
msgid ""
"Period of automatic goal assignment. If none is selected, should be launched"
" manually."
msgid "Period of automatic goal assignment. If none is selected, should be launched manually."
msgstr ""
#. module: gamification
@ -1746,6 +1722,11 @@ msgstr ""
msgid "Periodicity"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Previous Total"
msgstr ""
#. module: gamification
#: model:gamification.badge,name:gamification.badge_problem_solver
msgid "Problem Solver"
@ -1763,9 +1744,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__compute_code
msgid ""
"Python code to be executed for each user. 'result' should contains the new "
"current value. Evaluated user can be access through object.user_id."
msgid "Python code to be executed for each user. 'result' should contains the new current value. Evaluated user can be access through object.user_id."
msgstr ""
#. module: gamification
@ -1795,44 +1774,24 @@ msgstr ""
msgid "Ranks List"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master
msgid "Reach the next rank and become a Master!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor
msgid "Reach the next rank and become a powerful user!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor
msgid "Reach the next rank and gain a very magic wand !"
msgid "Reach the next rank and gain a very magic wand!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master
msgid "Reach the next rank and gain a very nice hat !"
msgid "Reach the next rank and gain a very nice hat!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student
msgid "Reach the next rank and gain a very nice mug !"
msgid "Reach the next rank and gain a very nice mug!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor
msgid "Reach the next rank and gain a very nice unicorn !"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor
msgid "Reach the next rank to improve your status!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student
msgid "Reach the next rank to show the rest of the world you exist."
msgid "Reach the next rank and gain a very nice unicorn!"
msgstr ""
#. module: gamification
@ -1918,7 +1877,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "Retrieving progress for personal challenge without user information"
msgstr ""
@ -1927,6 +1885,12 @@ msgstr ""
msgid "Reward"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Reward (badge %(badge_name)s) for every succeeding user was sent to %(users)s."
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__reward_failure
msgid "Reward Bests if not Succeeded?"
@ -1999,9 +1963,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_form_view
msgid ""
"Security rules to define who is allowed to manually grant badges. Not "
"enforced for administrator."
msgid "Security rules to define who is allowed to manually grant badges. Not enforced for administrator."
msgstr ""
#. module: gamification
@ -2084,6 +2046,23 @@ msgstr ""
msgid "Silver badges count"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__origin_ref
msgid "Source"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__origin_ref_model_name
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Source Type"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Special rewards were sent to the top competing users. The ranking for this challenge is:"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid "Start Challenge"
@ -2151,6 +2130,12 @@ msgstr ""
msgid "Target: less than"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/tests/test_karma_tracking.py:0
msgid "Test Reason"
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__action_id
msgid "The action that will be called to update the goal value."
@ -2159,7 +2144,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "The challenge %s is finished."
msgstr ""
@ -2177,22 +2161,17 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__end_date
msgid ""
"The day a new challenge will be automatically closed. If no periodicity is "
"set, will use this date as the goal end date."
msgid "The day a new challenge will be automatically closed. If no periodicity is set, will use this date as the goal end date."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__start_date
msgid ""
"The day a new challenge will be automatically started. If no periodicity is "
"set, will use this date as the goal start date."
msgid "The day a new challenge will be automatically started. If no periodicity is set, will use this date as the goal start date."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The domain for the definition %s seems incorrect, please check it.\n"
"\n"
@ -2201,9 +2180,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__res_id_field
msgid ""
"The field name on the user profile (res.users) containing the value for "
"res_id for action."
msgid "The field name on the user profile (res.users) containing the value for res_id for action."
msgstr ""
#. module: gamification
@ -2233,14 +2210,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__rule_max_number
msgid ""
"The maximum number of time this badge can be sent per month per person."
msgid "The maximum number of time this badge can be sent per month per person."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The model configuration for the definition %(name)s seems incorrect, please check it.\n"
"\n"
@ -2250,7 +2225,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The model configuration for the definition %(name)s seems incorrect, please check it.\n"
"\n"
@ -2259,15 +2233,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__remind_update_delay
msgid ""
"The number of days after which the user assigned to a manual goal will be "
"reminded. Never reminded if no value is specified."
msgid "The number of days after which the user assigned to a manual goal will be reminded. Never reminded if no value is specified."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__stat_my_this_month
msgid ""
"The number of time the current user has received this badge this month."
msgid "The number of time the current user has received this badge this month."
msgstr ""
#. module: gamification
@ -2314,17 +2285,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__goal_definition_ids
msgid ""
"The users that have succeeded these goals will receive automatically the "
"badge."
msgid "The users that have succeeded these goals will receive automatically the badge."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__batch_user_expression
msgid ""
"The value to compare with the distinctive field. The expression can contain "
"reference to 'user' which is a browse record of the current user, e.g. "
"user.id, user.partner_id.id..."
msgid "The value to compare with the distinctive field. The expression can contain reference to 'user' which is a browse record of the current user, e.g. user.id, user.partner_id.id..."
msgstr ""
#. module: gamification
@ -2337,7 +2303,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "This badge can not be sent by users."
msgstr ""
@ -2358,14 +2323,20 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__granted_count
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Total"
msgstr ""
msgstr "Totaal"
#. module: gamification
#: model:ir.model,name:gamification.model_gamification_karma_tracking
msgid "Track Karma Changes"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_tracking_action
msgid "Track the sources of the users karma and monitor"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_form
msgid "Tracking"
@ -2377,8 +2348,6 @@ msgid "Tracking Date"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.gamification_karma_tracking_action
#: model:ir.ui.menu,name:gamification.gamification_karma_tracking_menu
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Trackings"
msgstr ""
@ -2391,7 +2360,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge_line__definition_suffix
msgid "Unit"
msgstr ""
msgstr "Eenheid"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.view_goal_wizard_update_current
@ -2401,21 +2370,27 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal.py:0
#, python-format
msgid "Update %s"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
#: model:ir.model,name:gamification.model_res_users
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_goal__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__user_id
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
#: model_terms:ir.ui.view,arch_db:gamification.goal_search_view
msgid "User"
msgstr "Gebruiker"
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/res_users.py:0
msgid "User Creation"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__user_domain
msgid "User domain"
@ -2445,9 +2420,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__reward_realtime
msgid ""
"With this option enabled, a user can receive a badge only once. The top 3 "
"badges are still rewarded only at the end of the challenge."
msgid "With this option enabled, a user can receive a badge only once. The top 3 badges are still rewarded only at the end of the challenge."
msgstr ""
#. module: gamification
@ -2464,21 +2437,18 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You are not in the user allowed list."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/wizard/grant_badge.py:0
#, python-format
msgid "You can not grant a badge to yourself."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "You can not reset a challenge with unfinished goals."
msgstr ""
@ -2495,14 +2465,12 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You do not have the required badges."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You have already sent this badge too many time this month."
msgstr ""
@ -2545,13 +2513,11 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
#: model_terms:ir.ui.view,arch_db:gamification.goal_form_view
msgid "days"
msgstr ""
msgstr "dae"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid ""
"e.g. A Master Chief knows quite everything on the forum! You cannot beat "
"him!"
msgid "e.g. A Master Chief knows quite everything on the forum! You cannot beat him!"
msgstr ""
#. module: gamification
@ -2576,7 +2542,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid "e.g. Reach this rank to gain a free mug !"
msgid "e.g. Reach this rank to gain a free mug!"
msgstr ""
#. module: gamification

View file

@ -1,18 +1,18 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * gamification
#
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Project-Id-Version: Odoo Server 16.0beta\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-23 08:24+0000\n"
"POT-Creation-Date: 2023-05-16 13:50+0000\n"
"PO-Revision-Date: 2022-09-22 05:46+0000\n"
"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n"
"Language: am\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: am\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: gamification
@ -24,51 +24,15 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "%s has joined the challenge"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "%s has refused the challenge"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "<br/> %(rank)d. %(user_name)s - %(reward_name)s"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Nobody has succeeded to reach every goal, no badge is rewarded for this"
" challenge."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Reward (badge %(badge_name)s) for every succeeding user was sent to "
"%(users)s."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Special rewards were sent to the top competing users. The ranking for "
"this challenge is :"
msgstr ""
#. module: gamification
#: model:mail.template,body_html:gamification.mail_template_data_new_rank_reached
msgid ""
@ -82,10 +46,10 @@ msgid ""
" <span t-out=\"object.name or ''\">Joel Willis</span>!\n"
" </p>\n"
" <p>\n"
" You just reached a new rank : <strong t-out=\"object.rank_id.name or ''\">Newbie</strong>\n"
" You just reached a new rank: <strong t-out=\"object.rank_id.name or ''\">Newbie</strong>\n"
" </p>\n"
" <t t-if=\"object.next_rank_id.name\">\n"
" <p>Continue your work to become a <strong t-out=\"object.next_rank_id.name or ''\">Student</strong> !</p>\n"
" <p>Continue your work to become a <strong t-out=\"object.next_rank_id.name or ''\">Student</strong>!</p>\n"
" </t>\n"
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
" <t t-set=\"gamification_redirection_data\" t-value=\"object.get_gamification_redirection_data()\"></t>\n"
@ -129,30 +93,22 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"fa fa-clock-o fa-3x\" title=\"Goal in Progress\" "
"aria-label=\"Goal in Progress\"/>"
msgid "<i role=\"img\" class=\"fa fa-clock-o fa-3x\" title=\"Goal in Progress\" aria-label=\"Goal in Progress\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"text-danger fa fa-times fa-3x\" title=\"Goal "
"Failed\" aria-label=\"Goal Failed\"/>"
msgid "<i role=\"img\" class=\"text-danger fa fa-times fa-3x\" title=\"Goal Failed\" aria-label=\"Goal Failed\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"text-success fa fa-check fa-3x\" title=\"Goal "
"Reached\" aria-label=\"Goal Reached\"/>"
msgid "<i role=\"img\" class=\"text-success fa fa-check fa-3x\" title=\"Goal Reached\" aria-label=\"Goal Reached\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"<span class=\"o_stat_text\">Related</span>\n"
" <span class=\"o_stat_text\">Goals</span>"
msgid "<span class=\"o_stat_text\">Related Goals</span>"
msgstr ""
#. module: gamification
@ -173,7 +129,7 @@ msgid ""
" <tr><td valign=\"middle\">\n"
" <span style=\"font-size: 10px;\">Your Badge</span><br>\n"
" <span style=\"font-size: 20px; font-weight: bold;\" t-out=\"object.badge_id.name or ''\"></span>\n"
" </td><td valign=\"middle\" align=\"right\">\n"
" </td><td valign=\"middle\" align=\"right\" t-if=\"not object.user_id.company_id.uses_default_logo\">\n"
" <img t-attf-src=\"/logo.png?company={{ object.user_id.company_id.id }}\" style=\"padding: 0px; margin: 0px; height: auto; width: 80px;\" t-att-alt=\"object.user_id.company_id.name\">\n"
" </td></tr>\n"
" <tr><td colspan=\"2\" style=\"text-align:center;\">\n"
@ -188,8 +144,8 @@ msgid ""
" <table width=\"590\" border=\"0\" cellpadding=\"0\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n"
" <tr><td valign=\"top\" style=\"font-size: 14px;\">\n"
" <div>\n"
" Congratulations <t t-out=\"object.user_id.name or ''\"></t> !<br>\n"
" You just received badge <strong t-out=\"object.badge_id.name or ''\"></strong> !<br>\n"
" Congratulations <t t-out=\"object.user_id.name or ''\"></t>!<br>\n"
" You just received badge <strong t-out=\"object.badge_id.name or ''\"></strong>!<br>\n"
" <table t-if=\"not is_html_empty(object.badge_id.description)\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"width: 560px; margin-top: 5px;\">\n"
" <tbody><tr>\n"
" <td valign=\"center\">\n"
@ -469,9 +425,7 @@ msgstr ""
#: model:ir.model.fields,help:gamification.field_gamification_challenge_line__condition
#: model:ir.model.fields,help:gamification.field_gamification_goal__definition_condition
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__condition
msgid ""
"A goal is considered as completed when the current value is compared to the "
"value to reach"
msgid "A goal is considered as completed when the current value is compared to the value to reach"
msgstr ""
#. module: gamification
@ -509,6 +463,14 @@ msgstr ""
msgid "Active"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
#: code:addons/gamification/models/res_users.py:0
#: code:addons/gamification/tests/test_karma_tracking.py:0
msgid "Add Manually"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid "Advanced Options"
@ -611,11 +573,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"Badges are granted when a challenge is finished. This is either at the end "
"of a running period (eg: end of the month for a monthly challenge), at the "
"end date of a challenge (if no periodicity is set) or when the challenge is "
"manually closed."
msgid "Badges are granted when a challenge is finished. This is either at the end of a running period (eg: end of the month for a monthly challenge), at the end date of a challenge (if no periodicity is set) or when the challenge is manually closed."
msgstr ""
#. module: gamification
@ -646,7 +604,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal.py:0
#, python-format
msgid "Can not modify the configuration of a started goal"
msgstr ""
@ -654,7 +611,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:gamification.view_badge_wizard_grant
#: model_terms:ir.ui.view,arch_db:gamification.view_goal_wizard_update_current
msgid "Cancel"
msgstr ""
msgstr "መሰረዝ"
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_goal__state__canceled
@ -691,9 +648,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__challenge_id
msgid ""
"Challenge that generated the goal, assign challenge to users to generate "
"goals with a value in this field."
msgid "Challenge that generated the goal, assign challenge to users to generate goals with a value in this field."
msgstr ""
#. module: gamification
@ -753,6 +708,12 @@ msgstr ""
msgid "Consolidated"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
msgid "Consolidation from %s to %s"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.action_new_simplified_res_users
msgid "Create User"
@ -785,11 +746,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.action_new_simplified_res_users
msgid ""
"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."
msgid "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."
msgstr ""
#. module: gamification
@ -841,6 +798,11 @@ msgstr ""
msgid "Data"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Date"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__field_date_id
msgid "Date Field"
@ -849,9 +811,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__computation_mode
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__computation_mode
msgid ""
"Define how the goals will be computed. The result of the operation will be "
"stored in the field 'Current'."
msgid "Define how the goals will be computed. The result of the operation will be stored in the field 'Current'."
msgstr ""
#. module: gamification
@ -876,8 +836,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"Describe the challenge: what is does, who it targets, why it matters..."
msgid "Describe the challenge: what is does, who it targets, why it matters..."
msgstr ""
#. module: gamification
@ -889,9 +848,10 @@ msgstr ""
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__description
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__description
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__description
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__reason
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid "Description"
msgstr ""
msgstr "ማብራርያ"
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__visibility_mode
@ -930,10 +890,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__domain
msgid ""
"Domain for filtering records. General rule, not user depending, e.g. "
"[('state', '=', 'done')]. The expression can contain reference to 'user' "
"which is a browse record of the current user if not in batch mode."
msgid "Domain for filtering records. General rule, not user depending, e.g. [('state', '=', 'done')]. The expression can contain reference to 'user' which is a browse record of the current user if not in batch mode."
msgstr ""
#. module: gamification
@ -951,7 +908,7 @@ msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_newbie
msgid "Earn your first points and join the adventure !"
msgid "Earn your first points and join the adventure!"
msgstr ""
#. module: gamification
@ -1048,6 +1005,11 @@ msgstr ""
msgid "Full Suffix"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__gain
msgid "Gain"
msgstr ""
#. module: gamification
#: model:ir.model,name:gamification.model_gamification_badge
msgid "Gamification Badge"
@ -1105,13 +1067,11 @@ msgstr ""
#. module: gamification
#: model:ir.actions.server,name:gamification.ir_cron_check_challenge_ir_actions_server
#: model:ir.cron,cron_name:gamification.ir_cron_check_challenge
msgid "Gamification: Goal Challenge Check"
msgstr ""
#. module: gamification
#: model:ir.actions.server,name:gamification.ir_cron_consolidate_last_month_ir_actions_server
#: model:ir.cron,cron_name:gamification.ir_cron_consolidate_last_month
#: model:ir.actions.server,name:gamification.ir_cron_consolidate_ir_actions_server
msgid "Gamification: Karma tracking consolidation"
msgstr ""
@ -1221,6 +1181,11 @@ msgstr ""
msgid "Grant this Badge"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Granted By"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_user_kanban_view
msgid "Granted by"
@ -1237,7 +1202,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:gamification.goal_definition_search_view
#: model_terms:ir.ui.view,arch_db:gamification.goal_search_view
msgid "Group By"
msgstr ""
msgstr "በመደብ"
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__report_message_group_id
@ -1343,24 +1308,17 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_definition_form_view
msgid ""
"In batch mode, the domain is evaluated globally. If enabled, do not use "
"keyword 'user' in above filter domain."
msgid "In batch mode, the domain is evaluated globally. If enabled, do not use keyword 'user' in above filter domain."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__batch_distinctive_field
msgid ""
"In batch mode, this indicates which field distinguishes one user from the "
"other, e.g. user_id, partner_id..."
msgid "In batch mode, this indicates which field distinguishes one user from the other, e.g. user_id, partner_id..."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__last_update
msgid ""
"In case of manual goal, reminders are sent if the goal as not been updated "
"for a while (defined in challenge). Ignored in case of non-manual goal or "
"goal not linked to a challenge."
msgid "In case of manual goal, reminders are sent if the goal as not been updated for a while (defined in challenge). Ignored in case of non-manual goal or goal not linked to a challenge."
msgstr ""
#. module: gamification
@ -1391,6 +1349,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_res_users__karma
#: model_terms:ir.ui.view,arch_db:gamification.res_users_view_form
msgid "Karma"
msgstr ""
@ -1400,17 +1359,22 @@ msgid "Karma Changes"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge_line____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking____last_update
msgid "Last Modified on"
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_form
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Karma Owner"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.gamification_karma_tracking_action
#: model:ir.ui.menu,name:gamification.gamification_karma_tracking_menu
msgid "Karma Tracking"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/res_users.py:0
msgid "Karma Updates"
msgstr ""
#. module: gamification
@ -1477,9 +1441,8 @@ msgid "List of goals that will be set"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__message_main_attachment_id
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__message_main_attachment_id
msgid "Main Attachment"
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Manual"
msgstr ""
#. module: gamification
@ -1547,6 +1510,11 @@ msgstr ""
msgid "My Goals"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "My Karma"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__stat_my_monthly_sending
msgid "My Monthly Sending Total"
@ -1607,6 +1575,11 @@ msgstr ""
msgid "Next Report Date"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_tracking_action
msgid "No Karma Tracking"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.goals_from_challenge_act
msgid "No goal found"
@ -1630,7 +1603,12 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "Nobody has succeeded to reach every goal, no badge is rewarded for this challenge."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Nobody reached the required conditions to receive special badges."
msgstr ""
@ -1664,7 +1642,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__message_needaction_counter
#: model:ir.model.fields,help:gamification.field_gamification_challenge__message_needaction_counter
msgid "Number of messages requiring action"
msgid "Number of messages which requires an action"
msgstr ""
#. module: gamification
@ -1732,9 +1710,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__period
msgid ""
"Period of automatic goal assignment. If none is selected, should be launched"
" manually."
msgid "Period of automatic goal assignment. If none is selected, should be launched manually."
msgstr ""
#. module: gamification
@ -1742,6 +1718,11 @@ msgstr ""
msgid "Periodicity"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Previous Total"
msgstr ""
#. module: gamification
#: model:gamification.badge,name:gamification.badge_problem_solver
msgid "Problem Solver"
@ -1759,9 +1740,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__compute_code
msgid ""
"Python code to be executed for each user. 'result' should contains the new "
"current value. Evaluated user can be access through object.user_id."
msgid "Python code to be executed for each user. 'result' should contains the new current value. Evaluated user can be access through object.user_id."
msgstr ""
#. module: gamification
@ -1791,44 +1770,24 @@ msgstr ""
msgid "Ranks List"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master
msgid "Reach the next rank and become a Master!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor
msgid "Reach the next rank and become a powerful user!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor
msgid "Reach the next rank and gain a very magic wand !"
msgid "Reach the next rank and gain a very magic wand!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master
msgid "Reach the next rank and gain a very nice hat !"
msgid "Reach the next rank and gain a very nice hat!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student
msgid "Reach the next rank and gain a very nice mug !"
msgid "Reach the next rank and gain a very nice mug!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor
msgid "Reach the next rank and gain a very nice unicorn !"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor
msgid "Reach the next rank to improve your status!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student
msgid "Reach the next rank to show the rest of the world you exist."
msgid "Reach the next rank and gain a very nice unicorn!"
msgstr ""
#. module: gamification
@ -1914,7 +1873,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "Retrieving progress for personal challenge without user information"
msgstr ""
@ -1923,6 +1881,12 @@ msgstr ""
msgid "Reward"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Reward (badge %(badge_name)s) for every succeeding user was sent to %(users)s."
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__reward_failure
msgid "Reward Bests if not Succeeded?"
@ -1995,9 +1959,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_form_view
msgid ""
"Security rules to define who is allowed to manually grant badges. Not "
"enforced for administrator."
msgid "Security rules to define who is allowed to manually grant badges. Not enforced for administrator."
msgstr ""
#. module: gamification
@ -2038,7 +2000,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge_line__sequence
msgid "Sequence"
msgstr ""
msgstr "ቅደም ተከተል"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.view_goal_wizard_update_current
@ -2080,6 +2042,23 @@ msgstr ""
msgid "Silver badges count"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__origin_ref
msgid "Source"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__origin_ref_model_name
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Source Type"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Special rewards were sent to the top competing users. The ranking for this challenge is:"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid "Start Challenge"
@ -2147,6 +2126,12 @@ msgstr ""
msgid "Target: less than"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/tests/test_karma_tracking.py:0
msgid "Test Reason"
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__action_id
msgid "The action that will be called to update the goal value."
@ -2155,7 +2140,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "The challenge %s is finished."
msgstr ""
@ -2173,22 +2157,17 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__end_date
msgid ""
"The day a new challenge will be automatically closed. If no periodicity is "
"set, will use this date as the goal end date."
msgid "The day a new challenge will be automatically closed. If no periodicity is set, will use this date as the goal end date."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__start_date
msgid ""
"The day a new challenge will be automatically started. If no periodicity is "
"set, will use this date as the goal start date."
msgid "The day a new challenge will be automatically started. If no periodicity is set, will use this date as the goal start date."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The domain for the definition %s seems incorrect, please check it.\n"
"\n"
@ -2197,9 +2176,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__res_id_field
msgid ""
"The field name on the user profile (res.users) containing the value for "
"res_id for action."
msgid "The field name on the user profile (res.users) containing the value for res_id for action."
msgstr ""
#. module: gamification
@ -2229,14 +2206,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__rule_max_number
msgid ""
"The maximum number of time this badge can be sent per month per person."
msgid "The maximum number of time this badge can be sent per month per person."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The model configuration for the definition %(name)s seems incorrect, please check it.\n"
"\n"
@ -2246,7 +2221,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The model configuration for the definition %(name)s seems incorrect, please check it.\n"
"\n"
@ -2255,15 +2229,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__remind_update_delay
msgid ""
"The number of days after which the user assigned to a manual goal will be "
"reminded. Never reminded if no value is specified."
msgid "The number of days after which the user assigned to a manual goal will be reminded. Never reminded if no value is specified."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__stat_my_this_month
msgid ""
"The number of time the current user has received this badge this month."
msgid "The number of time the current user has received this badge this month."
msgstr ""
#. module: gamification
@ -2310,17 +2281,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__goal_definition_ids
msgid ""
"The users that have succeeded these goals will receive automatically the "
"badge."
msgid "The users that have succeeded these goals will receive automatically the badge."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__batch_user_expression
msgid ""
"The value to compare with the distinctive field. The expression can contain "
"reference to 'user' which is a browse record of the current user, e.g. "
"user.id, user.partner_id.id..."
msgid "The value to compare with the distinctive field. The expression can contain reference to 'user' which is a browse record of the current user, e.g. user.id, user.partner_id.id..."
msgstr ""
#. module: gamification
@ -2333,7 +2299,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "This badge can not be sent by users."
msgstr ""
@ -2354,6 +2319,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__granted_count
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Total"
msgstr ""
@ -2362,6 +2328,11 @@ msgstr ""
msgid "Track Karma Changes"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_tracking_action
msgid "Track the sources of the users karma and monitor"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_form
msgid "Tracking"
@ -2373,8 +2344,6 @@ msgid "Tracking Date"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.gamification_karma_tracking_action
#: model:ir.ui.menu,name:gamification.gamification_karma_tracking_menu
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Trackings"
msgstr ""
@ -2397,21 +2366,27 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal.py:0
#, python-format
msgid "Update %s"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
#: model:ir.model,name:gamification.model_res_users
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_goal__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__user_id
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
#: model_terms:ir.ui.view,arch_db:gamification.goal_search_view
msgid "User"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/res_users.py:0
msgid "User Creation"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__user_domain
msgid "User domain"
@ -2441,9 +2416,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__reward_realtime
msgid ""
"With this option enabled, a user can receive a badge only once. The top 3 "
"badges are still rewarded only at the end of the challenge."
msgid "With this option enabled, a user can receive a badge only once. The top 3 badges are still rewarded only at the end of the challenge."
msgstr ""
#. module: gamification
@ -2460,21 +2433,18 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You are not in the user allowed list."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/wizard/grant_badge.py:0
#, python-format
msgid "You can not grant a badge to yourself."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "You can not reset a challenge with unfinished goals."
msgstr ""
@ -2491,14 +2461,12 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You do not have the required badges."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You have already sent this badge too many time this month."
msgstr ""
@ -2541,13 +2509,11 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
#: model_terms:ir.ui.view,arch_db:gamification.goal_form_view
msgid "days"
msgstr ""
msgstr "ቀኖች"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid ""
"e.g. A Master Chief knows quite everything on the forum! You cannot beat "
"him!"
msgid "e.g. A Master Chief knows quite everything on the forum! You cannot beat him!"
msgstr ""
#. module: gamification
@ -2572,7 +2538,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid "e.g. Reach this rank to gain a free mug !"
msgid "e.g. Reach this rank to gain a free mug!"
msgstr ""
#. module: gamification

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,22 +1,22 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * gamification
#
#
# Translators:
# Qaidjohar Barbhaya, 2023
#
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Project-Id-Version: Odoo Server 16.0beta\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-23 08:24+0000\n"
"POT-Creation-Date: 2023-05-16 13:50+0000\n"
"PO-Revision-Date: 2022-09-22 05:46+0000\n"
"Last-Translator: Qaidjohar Barbhaya, 2023\n"
"Language-Team: Gujarati (https://app.transifex.com/odoo/teams/41243/gu/)\n"
"Language: gu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: gu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: gamification
@ -28,51 +28,15 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "%s has joined the challenge"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "%s has refused the challenge"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "<br/> %(rank)d. %(user_name)s - %(reward_name)s"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Nobody has succeeded to reach every goal, no badge is rewarded for this"
" challenge."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Reward (badge %(badge_name)s) for every succeeding user was sent to "
"%(users)s."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid ""
"<br/>Special rewards were sent to the top competing users. The ranking for "
"this challenge is :"
msgstr ""
#. module: gamification
#: model:mail.template,body_html:gamification.mail_template_data_new_rank_reached
msgid ""
@ -86,10 +50,10 @@ msgid ""
" <span t-out=\"object.name or ''\">Joel Willis</span>!\n"
" </p>\n"
" <p>\n"
" You just reached a new rank : <strong t-out=\"object.rank_id.name or ''\">Newbie</strong>\n"
" You just reached a new rank: <strong t-out=\"object.rank_id.name or ''\">Newbie</strong>\n"
" </p>\n"
" <t t-if=\"object.next_rank_id.name\">\n"
" <p>Continue your work to become a <strong t-out=\"object.next_rank_id.name or ''\">Student</strong> !</p>\n"
" <p>Continue your work to become a <strong t-out=\"object.next_rank_id.name or ''\">Student</strong>!</p>\n"
" </t>\n"
" <div style=\"margin: 16px 0px 16px 0px;\">\n"
" <t t-set=\"gamification_redirection_data\" t-value=\"object.get_gamification_redirection_data()\"></t>\n"
@ -133,30 +97,22 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"fa fa-clock-o fa-3x\" title=\"Goal in Progress\" "
"aria-label=\"Goal in Progress\"/>"
msgid "<i role=\"img\" class=\"fa fa-clock-o fa-3x\" title=\"Goal in Progress\" aria-label=\"Goal in Progress\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"text-danger fa fa-times fa-3x\" title=\"Goal "
"Failed\" aria-label=\"Goal Failed\"/>"
msgid "<i role=\"img\" class=\"text-danger fa fa-times fa-3x\" title=\"Goal Failed\" aria-label=\"Goal Failed\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_kanban_view
msgid ""
"<i role=\"img\" class=\"text-success fa fa-check fa-3x\" title=\"Goal "
"Reached\" aria-label=\"Goal Reached\"/>"
msgid "<i role=\"img\" class=\"text-success fa fa-check fa-3x\" title=\"Goal Reached\" aria-label=\"Goal Reached\"/>"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"<span class=\"o_stat_text\">Related</span>\n"
" <span class=\"o_stat_text\">Goals</span>"
msgid "<span class=\"o_stat_text\">Related Goals</span>"
msgstr ""
#. module: gamification
@ -177,7 +133,7 @@ msgid ""
" <tr><td valign=\"middle\">\n"
" <span style=\"font-size: 10px;\">Your Badge</span><br>\n"
" <span style=\"font-size: 20px; font-weight: bold;\" t-out=\"object.badge_id.name or ''\"></span>\n"
" </td><td valign=\"middle\" align=\"right\">\n"
" </td><td valign=\"middle\" align=\"right\" t-if=\"not object.user_id.company_id.uses_default_logo\">\n"
" <img t-attf-src=\"/logo.png?company={{ object.user_id.company_id.id }}\" style=\"padding: 0px; margin: 0px; height: auto; width: 80px;\" t-att-alt=\"object.user_id.company_id.name\">\n"
" </td></tr>\n"
" <tr><td colspan=\"2\" style=\"text-align:center;\">\n"
@ -192,8 +148,8 @@ msgid ""
" <table width=\"590\" border=\"0\" cellpadding=\"0\" style=\"min-width: 590px; background-color: white; padding: 0px 8px 0px 8px; border-collapse:separate;\">\n"
" <tr><td valign=\"top\" style=\"font-size: 14px;\">\n"
" <div>\n"
" Congratulations <t t-out=\"object.user_id.name or ''\"></t> !<br>\n"
" You just received badge <strong t-out=\"object.badge_id.name or ''\"></strong> !<br>\n"
" Congratulations <t t-out=\"object.user_id.name or ''\"></t>!<br>\n"
" You just received badge <strong t-out=\"object.badge_id.name or ''\"></strong>!<br>\n"
" <table t-if=\"not is_html_empty(object.badge_id.description)\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"width: 560px; margin-top: 5px;\">\n"
" <tbody><tr>\n"
" <td valign=\"center\">\n"
@ -473,9 +429,7 @@ msgstr ""
#: model:ir.model.fields,help:gamification.field_gamification_challenge_line__condition
#: model:ir.model.fields,help:gamification.field_gamification_goal__definition_condition
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__condition
msgid ""
"A goal is considered as completed when the current value is compared to the "
"value to reach"
msgid "A goal is considered as completed when the current value is compared to the value to reach"
msgstr ""
#. module: gamification
@ -513,6 +467,14 @@ msgstr "Action Needed"
msgid "Active"
msgstr "Active"
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
#: code:addons/gamification/models/res_users.py:0
#: code:addons/gamification/tests/test_karma_tracking.py:0
msgid "Add Manually"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid "Advanced Options"
@ -615,11 +577,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"Badges are granted when a challenge is finished. This is either at the end "
"of a running period (eg: end of the month for a monthly challenge), at the "
"end date of a challenge (if no periodicity is set) or when the challenge is "
"manually closed."
msgid "Badges are granted when a challenge is finished. This is either at the end of a running period (eg: end of the month for a monthly challenge), at the end date of a challenge (if no periodicity is set) or when the challenge is manually closed."
msgstr ""
#. module: gamification
@ -650,7 +608,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal.py:0
#, python-format
msgid "Can not modify the configuration of a started goal"
msgstr ""
@ -695,9 +652,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__challenge_id
msgid ""
"Challenge that generated the goal, assign challenge to users to generate "
"goals with a value in this field."
msgid "Challenge that generated the goal, assign challenge to users to generate goals with a value in this field."
msgstr ""
#. module: gamification
@ -757,6 +712,12 @@ msgstr ""
msgid "Consolidated"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
msgid "Consolidation from %s to %s"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.action_new_simplified_res_users
msgid "Create User"
@ -789,11 +750,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.action_new_simplified_res_users
msgid ""
"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."
msgid "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."
msgstr ""
#. module: gamification
@ -845,6 +802,11 @@ msgstr ""
msgid "Data"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Date"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition__field_date_id
msgid "Date Field"
@ -853,9 +815,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__computation_mode
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__computation_mode
msgid ""
"Define how the goals will be computed. The result of the operation will be "
"stored in the field 'Current'."
msgid "Define how the goals will be computed. The result of the operation will be stored in the field 'Current'."
msgstr ""
#. module: gamification
@ -880,8 +840,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid ""
"Describe the challenge: what is does, who it targets, why it matters..."
msgid "Describe the challenge: what is does, who it targets, why it matters..."
msgstr ""
#. module: gamification
@ -893,6 +852,7 @@ msgstr ""
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__description
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__description
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__description
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__reason
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid "Description"
msgstr "Description"
@ -934,10 +894,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__domain
msgid ""
"Domain for filtering records. General rule, not user depending, e.g. "
"[('state', '=', 'done')]. The expression can contain reference to 'user' "
"which is a browse record of the current user if not in batch mode."
msgid "Domain for filtering records. General rule, not user depending, e.g. [('state', '=', 'done')]. The expression can contain reference to 'user' which is a browse record of the current user if not in batch mode."
msgstr ""
#. module: gamification
@ -955,7 +912,7 @@ msgstr "Draft"
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_newbie
msgid "Earn your first points and join the adventure !"
msgid "Earn your first points and join the adventure!"
msgstr ""
#. module: gamification
@ -978,7 +935,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_badge__rule_auth__everyone
msgid "Everyone"
msgstr ""
msgstr "દરેક વ્યક્તિને"
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_goal_definition__display_mode__boolean
@ -1052,6 +1009,11 @@ msgstr "From"
msgid "Full Suffix"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__gain
msgid "Gain"
msgstr ""
#. module: gamification
#: model:ir.model,name:gamification.model_gamification_badge
msgid "Gamification Badge"
@ -1109,13 +1071,11 @@ msgstr ""
#. module: gamification
#: model:ir.actions.server,name:gamification.ir_cron_check_challenge_ir_actions_server
#: model:ir.cron,cron_name:gamification.ir_cron_check_challenge
msgid "Gamification: Goal Challenge Check"
msgstr ""
#. module: gamification
#: model:ir.actions.server,name:gamification.ir_cron_consolidate_last_month_ir_actions_server
#: model:ir.cron,cron_name:gamification.ir_cron_consolidate_last_month
#: model:ir.actions.server,name:gamification.ir_cron_consolidate_ir_actions_server
msgid "Gamification: Karma tracking consolidation"
msgstr ""
@ -1225,6 +1185,11 @@ msgstr ""
msgid "Grant this Badge"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Granted By"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_user_kanban_view
msgid "Granted by"
@ -1314,7 +1279,7 @@ msgstr "If checked, some messages have a delivery error."
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__image_1920
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__image_1920
msgid "Image"
msgstr ""
msgstr "ચિત્ર"
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__image_1024
@ -1343,28 +1308,21 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_challenge__state__inprogress
msgid "In Progress"
msgstr ""
msgstr "પ્રગતિમાં છે"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_definition_form_view
msgid ""
"In batch mode, the domain is evaluated globally. If enabled, do not use "
"keyword 'user' in above filter domain."
msgid "In batch mode, the domain is evaluated globally. If enabled, do not use keyword 'user' in above filter domain."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__batch_distinctive_field
msgid ""
"In batch mode, this indicates which field distinguishes one user from the "
"other, e.g. user_id, partner_id..."
msgid "In batch mode, this indicates which field distinguishes one user from the other, e.g. user_id, partner_id..."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__last_update
msgid ""
"In case of manual goal, reminders are sent if the goal as not been updated "
"for a while (defined in challenge). Ignored in case of non-manual goal or "
"goal not linked to a challenge."
msgid "In case of manual goal, reminders are sent if the goal as not been updated for a while (defined in challenge). Ignored in case of non-manual goal or goal not linked to a challenge."
msgstr ""
#. module: gamification
@ -1395,6 +1353,7 @@ msgstr "Is Follower"
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_res_users__karma
#: model_terms:ir.ui.view,arch_db:gamification.res_users_view_form
msgid "Karma"
msgstr ""
@ -1404,18 +1363,23 @@ msgid "Karma Changes"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge_line____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_definition____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_goal_wizard____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank____last_update
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking____last_update
msgid "Last Modified on"
msgstr "Last Modified on"
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_form
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Karma Owner"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.gamification_karma_tracking_action
#: model:ir.ui.menu,name:gamification.gamification_karma_tracking_menu
msgid "Karma Tracking"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/res_users.py:0
msgid "Karma Updates"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__last_report_date
@ -1481,10 +1445,9 @@ msgid "List of goals that will be set"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__message_main_attachment_id
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__message_main_attachment_id
msgid "Main Attachment"
msgstr "Main Attachment"
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Manual"
msgstr ""
#. module: gamification
#: model:gamification.karma.rank,name:gamification.rank_master
@ -1551,6 +1514,11 @@ msgstr ""
msgid "My Goals"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "My Karma"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__stat_my_monthly_sending
msgid "My Monthly Sending Total"
@ -1611,6 +1579,11 @@ msgstr ""
msgid "Next Report Date"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_tracking_action
msgid "No Karma Tracking"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.goals_from_challenge_act
msgid "No goal found"
@ -1634,7 +1607,12 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "Nobody has succeeded to reach every goal, no badge is rewarded for this challenge."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Nobody reached the required conditions to receive special badges."
msgstr ""
@ -1668,8 +1646,8 @@ msgstr "Number of errors"
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__message_needaction_counter
#: model:ir.model.fields,help:gamification.field_gamification_challenge__message_needaction_counter
msgid "Number of messages requiring action"
msgstr ""
msgid "Number of messages which requires an action"
msgstr "Number of messages which requires an action"
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__message_has_error_counter
@ -1710,7 +1688,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_kanban_view
msgid "Owner"
msgstr ""
msgstr "માલિક"
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__owner_ids
@ -1736,9 +1714,7 @@ msgstr "Period"
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__period
msgid ""
"Period of automatic goal assignment. If none is selected, should be launched"
" manually."
msgid "Period of automatic goal assignment. If none is selected, should be launched manually."
msgstr ""
#. module: gamification
@ -1746,6 +1722,11 @@ msgstr ""
msgid "Periodicity"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Previous Total"
msgstr ""
#. module: gamification
#: model:gamification.badge,name:gamification.badge_problem_solver
msgid "Problem Solver"
@ -1763,9 +1744,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__compute_code
msgid ""
"Python code to be executed for each user. 'result' should contains the new "
"current value. Evaluated user can be access through object.user_id."
msgid "Python code to be executed for each user. 'result' should contains the new current value. Evaluated user can be access through object.user_id."
msgstr ""
#. module: gamification
@ -1795,44 +1774,24 @@ msgstr ""
msgid "Ranks List"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master
msgid "Reach the next rank and become a Master!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor
msgid "Reach the next rank and become a powerful user!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor
msgid "Reach the next rank and gain a very magic wand !"
msgid "Reach the next rank and gain a very magic wand!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_master
msgid "Reach the next rank and gain a very nice hat !"
msgid "Reach the next rank and gain a very nice hat!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student
msgid "Reach the next rank and gain a very nice mug !"
msgid "Reach the next rank and gain a very nice mug!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_doctor
msgid "Reach the next rank and gain a very nice unicorn !"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_bachelor
msgid "Reach the next rank to improve your status!"
msgstr ""
#. module: gamification
#: model_terms:gamification.karma.rank,description_motivational:gamification.rank_student
msgid "Reach the next rank to show the rest of the world you exist."
msgid "Reach the next rank and gain a very nice unicorn!"
msgstr ""
#. module: gamification
@ -1918,7 +1877,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "Retrieving progress for personal challenge without user information"
msgstr ""
@ -1927,6 +1885,12 @@ msgstr ""
msgid "Reward"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Reward (badge %(badge_name)s) for every succeeding user was sent to %(users)s."
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__reward_failure
msgid "Reward Bests if not Succeeded?"
@ -1955,7 +1919,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_search_view
msgid "Running"
msgstr ""
msgstr "ચાલી રહ્યું છે"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_search_view
@ -1999,9 +1963,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_form_view
msgid ""
"Security rules to define who is allowed to manually grant badges. Not "
"enforced for administrator."
msgid "Security rules to define who is allowed to manually grant badges. Not enforced for administrator."
msgstr ""
#. module: gamification
@ -2084,6 +2046,23 @@ msgstr ""
msgid "Silver badges count"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__origin_ref
msgid "Source"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__origin_ref_model_name
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
msgid "Source Type"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
msgid "Special rewards were sent to the top competing users. The ranking for this challenge is:"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
msgid "Start Challenge"
@ -2093,7 +2072,7 @@ msgstr ""
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__start_date
#: model:ir.model.fields,field_description:gamification.field_gamification_goal__start_date
msgid "Start Date"
msgstr ""
msgstr "શરુઆતની તારીખ"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.goal_form_view
@ -2106,7 +2085,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:gamification.challenge_search_view
#: model_terms:ir.ui.view,arch_db:gamification.goal_search_view
msgid "State"
msgstr ""
msgstr "અવસ્થા"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.badge_form_view
@ -2151,6 +2130,12 @@ msgstr ""
msgid "Target: less than"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/tests/test_karma_tracking.py:0
msgid "Test Reason"
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__action_id
msgid "The action that will be called to update the goal value."
@ -2159,7 +2144,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "The challenge %s is finished."
msgstr ""
@ -2177,22 +2161,17 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__end_date
msgid ""
"The day a new challenge will be automatically closed. If no periodicity is "
"set, will use this date as the goal end date."
msgid "The day a new challenge will be automatically closed. If no periodicity is set, will use this date as the goal end date."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__start_date
msgid ""
"The day a new challenge will be automatically started. If no periodicity is "
"set, will use this date as the goal start date."
msgid "The day a new challenge will be automatically started. If no periodicity is set, will use this date as the goal start date."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The domain for the definition %s seems incorrect, please check it.\n"
"\n"
@ -2201,9 +2180,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__res_id_field
msgid ""
"The field name on the user profile (res.users) containing the value for "
"res_id for action."
msgid "The field name on the user profile (res.users) containing the value for res_id for action."
msgstr ""
#. module: gamification
@ -2233,14 +2210,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__rule_max_number
msgid ""
"The maximum number of time this badge can be sent per month per person."
msgid "The maximum number of time this badge can be sent per month per person."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The model configuration for the definition %(name)s seems incorrect, please check it.\n"
"\n"
@ -2250,7 +2225,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal_definition.py:0
#, python-format
msgid ""
"The model configuration for the definition %(name)s seems incorrect, please check it.\n"
"\n"
@ -2259,15 +2233,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal__remind_update_delay
msgid ""
"The number of days after which the user assigned to a manual goal will be "
"reminded. Never reminded if no value is specified."
msgid "The number of days after which the user assigned to a manual goal will be reminded. Never reminded if no value is specified."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__stat_my_this_month
msgid ""
"The number of time the current user has received this badge this month."
msgid "The number of time the current user has received this badge this month."
msgstr ""
#. module: gamification
@ -2314,17 +2285,12 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__goal_definition_ids
msgid ""
"The users that have succeeded these goals will receive automatically the "
"badge."
msgid "The users that have succeeded these goals will receive automatically the badge."
msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_goal_definition__batch_user_expression
msgid ""
"The value to compare with the distinctive field. The expression can contain "
"reference to 'user' which is a browse record of the current user, e.g. "
"user.id, user.partner_id.id..."
msgid "The value to compare with the distinctive field. The expression can contain reference to 'user' which is a browse record of the current user, e.g. user.id, user.partner_id.id..."
msgstr ""
#. module: gamification
@ -2337,7 +2303,6 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "This badge can not be sent by users."
msgstr ""
@ -2358,6 +2323,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_badge__granted_count
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Total"
msgstr "Total"
@ -2366,6 +2332,11 @@ msgstr "Total"
msgid "Track Karma Changes"
msgstr ""
#. module: gamification
#: model_terms:ir.actions.act_window,help:gamification.gamification_karma_tracking_action
msgid "Track the sources of the users karma and monitor"
msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_form
msgid "Tracking"
@ -2377,8 +2348,6 @@ msgid "Tracking Date"
msgstr ""
#. module: gamification
#: model:ir.actions.act_window,name:gamification.gamification_karma_tracking_action
#: model:ir.ui.menu,name:gamification.gamification_karma_tracking_menu
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_tree
msgid "Trackings"
msgstr ""
@ -2401,21 +2370,27 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_goal.py:0
#, python-format
msgid "Update %s"
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_karma_tracking.py:0
#: model:ir.model,name:gamification.model_res_users
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_badge_user_wizard__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_goal__user_id
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_tracking__user_id
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_tracking_view_search
#: model_terms:ir.ui.view,arch_db:gamification.goal_search_view
msgid "User"
msgstr "User"
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/res_users.py:0
msgid "User Creation"
msgstr ""
#. module: gamification
#: model:ir.model.fields,field_description:gamification.field_gamification_challenge__user_domain
msgid "User domain"
@ -2425,13 +2400,13 @@ msgstr ""
#: model:ir.actions.act_window,name:gamification.action_current_rank_users
#: model:ir.model.fields,field_description:gamification.field_gamification_karma_rank__user_ids
msgid "Users"
msgstr ""
msgstr "વપરાશકર્તાઓ"
#. module: gamification
#: model:ir.model.fields.selection,name:gamification.selection__gamification_challenge__period__weekly
#: model:ir.model.fields.selection,name:gamification.selection__gamification_challenge__report_message_frequency__weekly
msgid "Weekly"
msgstr ""
msgstr "સાપ્તાહિક"
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_badge__rule_auth
@ -2445,9 +2420,7 @@ msgstr ""
#. module: gamification
#: model:ir.model.fields,help:gamification.field_gamification_challenge__reward_realtime
msgid ""
"With this option enabled, a user can receive a badge only once. The top 3 "
"badges are still rewarded only at the end of the challenge."
msgid "With this option enabled, a user can receive a badge only once. The top 3 badges are still rewarded only at the end of the challenge."
msgstr ""
#. module: gamification
@ -2464,21 +2437,18 @@ msgstr "Yearly"
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You are not in the user allowed list."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/wizard/grant_badge.py:0
#, python-format
msgid "You can not grant a badge to yourself."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_challenge.py:0
#, python-format
msgid "You can not reset a challenge with unfinished goals."
msgstr ""
@ -2495,14 +2465,12 @@ msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You do not have the required badges."
msgstr ""
#. module: gamification
#. odoo-python
#: code:addons/gamification/models/gamification_badge.py:0
#, python-format
msgid "You have already sent this badge too many time this month."
msgstr ""
@ -2545,13 +2513,11 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:gamification.challenge_form_view
#: model_terms:ir.ui.view,arch_db:gamification.goal_form_view
msgid "days"
msgstr ""
msgstr "દિવસો"
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid ""
"e.g. A Master Chief knows quite everything on the forum! You cannot beat "
"him!"
msgid "e.g. A Master Chief knows quite everything on the forum! You cannot beat him!"
msgstr ""
#. module: gamification
@ -2576,7 +2542,7 @@ msgstr ""
#. module: gamification
#: model_terms:ir.ui.view,arch_db:gamification.gamification_karma_rank_view_form
msgid "e.g. Reach this rank to gain a free mug !"
msgid "e.g. Reach this rank to gain a free mug!"
msgstr ""
#. module: gamification

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,8 @@ import logging
from datetime import date
from odoo import api, fields, models, _, exceptions
from odoo.tools import SQL
_logger = logging.getLogger(__name__)
@ -98,24 +100,24 @@ class GamificationBadge(models.Model):
return
Users = self.env["res.users"]
query = Users._where_calc([])
Users._apply_ir_rules(query)
query = Users._search([])
badge_alias = query.join("res_users", "id", "gamification_badge_user", "user_id", "badges")
tables, where_clauses, where_params = query.get_sql()
self.env.cr.execute(
f"""
SELECT {badge_alias}.badge_id, count(res_users.id) as stat_count,
rows = self.env.execute_query(SQL(
"""
SELECT %(badge_alias)s.badge_id, count(res_users.id) as stat_count,
count(distinct(res_users.id)) as stat_count_distinct,
array_agg(distinct(res_users.id)) as unique_owner_ids
FROM {tables}
WHERE {where_clauses}
AND {badge_alias}.badge_id IN %s
GROUP BY {badge_alias}.badge_id
FROM %(from_clause)s
WHERE %(where_clause)s
AND %(badge_alias)s.badge_id IN %(ids)s
GROUP BY %(badge_alias)s.badge_id
""",
[*where_params, tuple(self.ids)]
)
from_clause=query.from_clause,
where_clause=query.where_clause or SQL("TRUE"),
badge_alias=SQL.identifier(badge_alias),
ids=tuple(self.ids),
))
mapping = {
badge_id: {
@ -123,7 +125,7 @@ class GamificationBadge(models.Model):
'granted_users_count': distinct_count,
'unique_owner_ids': owner_ids,
}
for (badge_id, count, distinct_count, owner_ids) in self.env.cr._obj
for (badge_id, count, distinct_count, owner_ids) in rows
}
for badge in self:
badge.update(mapping.get(badge.id, defaults))
@ -195,8 +197,6 @@ class GamificationBadge(models.Model):
def _can_grant_badge(self):
"""Check if a user can grant a badge to another user
:param uid: the id of the res.users trying to send the badge
:param badge_id: the granted badge id
:return: integer representing the permission.
"""
if self.env.is_admin():

View file

@ -1,18 +1,19 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
from odoo import _, api, fields, models
class BadgeUser(models.Model):
class GamificationBadgeUser(models.Model):
"""User having received a badge"""
_name = 'gamification.badge.user'
_description = 'Gamification User Badge'
_inherit = ["mail.thread"]
_order = "create_date desc"
_rec_name = "badge_name"
user_id = fields.Many2one('res.users', string="User", required=True, ondelete="cascade", index=True)
user_partner_id = fields.Many2one('res.partner', related='user_id.partner_id')
sender_id = fields.Many2one('res.users', string="Sender")
badge_id = fields.Many2one('gamification.badge', string='Badge', required=True, ondelete="cascade", index=True)
challenge_id = fields.Many2one('gamification.challenge', string='Challenge')
@ -29,22 +30,33 @@ class BadgeUser(models.Model):
The stats counters are incremented
:param ids: list(int) of badge users that will receive the badge
"""
template = self.env.ref(
'gamification.email_template_badge_received',
raise_if_not_found=False
)
if not template:
return
body_html = self.env.ref('gamification.email_template_badge_received')._render_field('body_html', self.ids)[self.id]
for badge_user in self:
template.send_mail(
badge_user.id,
badge_user.message_notify(
model=badge_user._name,
res_id=badge_user.id,
body=body_html,
partner_ids=[badge_user.user_partner_id.id],
subject=_("🎉 You've earned the %(badge)s badge!", badge=badge_user.badge_name),
subtype_xmlid='mail.mt_comment',
email_layout_xmlid='mail.mail_notification_layout',
)
return True
def _notify_get_recipients_groups(self, message, model_description, msg_vals=False):
groups = super()._notify_get_recipients_groups(message, model_description, msg_vals)
self.ensure_one()
for group in groups:
if group[0] == 'user':
group[2]['has_button_access'] = False
return groups
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
self.env['gamification.badge'].browse(vals['badge_id']).check_granting()
return super().create(vals_list)
def _mail_get_partner_fields(self, introspect_fields=False):
return ['user_partner_id']

View file

@ -6,9 +6,10 @@ import logging
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta, MO
from markupsafe import Markup
from odoo import api, models, fields, _, exceptions
from odoo.tools import ustr
from odoo import _, api, exceptions, fields, models
from odoo.http import SESSION_LIFETIME
_logger = logging.getLogger(__name__)
@ -44,7 +45,8 @@ def start_end_date_for_period(period, default_start_date=False, default_end_date
return fields.Datetime.to_string(start_date), fields.Datetime.to_string(end_date)
class Challenge(models.Model):
class GamificationChallenge(models.Model):
"""Gamification challenge
Set of predifined objectives assigned to people with rules for recurrence and
@ -57,15 +59,15 @@ class Challenge(models.Model):
_name = 'gamification.challenge'
_description = 'Gamification Challenge'
_inherit = 'mail.thread'
_inherit = ['mail.thread']
_order = 'end_date, start_date, name, id'
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
if 'user_domain' in fields_list and 'user_domain' not in res:
def default_get(self, fields):
res = super().default_get(fields)
if 'user_domain' in fields and 'user_domain' not in res:
user_group_id = self.env.ref('base.group_user')
res['user_domain'] = f'["&", ("groups_id", "=", "{user_group_id.name}"), ("active", "=", True)]'
res['user_domain'] = f'["&", ("all_group_ids", "in", [{user_group_id.id}]), ("active", "=", True)]'
return res
# description
@ -105,7 +107,7 @@ class Challenge(models.Model):
help="List of goals that will be set",
required=True, copy=True)
reward_id = fields.Many2one('gamification.badge', string="For Every Succeeding User")
reward_id = fields.Many2one('gamification.badge', string="For Every Succeeding User", index='btree_not_null')
reward_first_id = fields.Many2one('gamification.badge', string="For 1st user")
reward_second_id = fields.Many2one('gamification.badge', string="For 2nd user")
reward_third_id = fields.Many2one('gamification.badge', string="For 3rd user")
@ -127,7 +129,7 @@ class Challenge(models.Model):
('yearly', "Yearly")
], default='never',
string="Report Frequency", required=True)
report_message_group_id = fields.Many2one('mail.channel', string="Send a copy to", help="Group that will receive a copy of the report in addition to the user")
report_message_group_id = fields.Many2one('discuss.channel', string="Send a copy to", help="Group that will receive a copy of the report in addition to the user")
report_template_id = fields.Many2one('mail.template', default=lambda self: self._get_report_template(), string="Report Template", required=True)
remind_update_delay = fields.Integer("Non-updated manual goals will be reminded after", help="Never reminded if no value or zero is specified.")
last_report_date = fields.Date("Last Report Date", default=fields.Date.today)
@ -188,8 +190,8 @@ class Challenge(models.Model):
def create(self, vals_list):
"""Overwrite the create method to add the user of groups"""
for vals in vals_list:
if vals.get('user_domain'):
users = self._get_challenger_users(ustr(vals.get('user_domain')))
if user_domain := vals.get('user_domain'):
users = self._get_challenger_users(str(user_domain))
if not vals.get('user_ids'):
vals['user_ids'] = []
@ -198,19 +200,14 @@ class Challenge(models.Model):
return super().create(vals_list)
def write(self, vals):
if vals.get('user_domain'):
users = self._get_challenger_users(ustr(vals.get('user_domain')))
if user_domain := vals.get('user_domain'):
users = self._get_challenger_users(str(user_domain))
if not vals.get('user_ids'):
vals['user_ids'] = []
vals['user_ids'].extend((4, user.id) for user in users)
write_res = super(Challenge, self).write(vals)
if vals.get('report_message_frequency', 'never') != 'never':
# _recompute_challenge_users do not set users for challenges with no reports, subscribing them now
for challenge in self:
challenge.message_subscribe([user.partner_id.id for user in challenge.user_ids])
write_res = super().write(vals)
if vals.get('state') == 'inprogress':
self._recompute_challenge_users()
@ -221,7 +218,7 @@ class Challenge(models.Model):
elif vals.get('state') == 'draft':
# resetting progress
if self.env['gamification.goal'].search([('challenge_id', 'in', self.ids), ('state', '=', 'inprogress')], limit=1):
if self.env['gamification.goal'].search_count([('challenge_id', 'in', self.ids), ('state', '=', 'inprogress')], limit=1):
raise exceptions.UserError(_("You can not reset a challenge with unfinished goals."))
return write_res
@ -267,22 +264,28 @@ class Challenge(models.Model):
return True
Goals = self.env['gamification.goal']
self.flush_recordset()
self.user_ids.presence_ids.flush_recordset()
# include yesterday goals to update the goals that just ended
# exclude goals for portal users that did not connect since the last update
# exclude goals for users that have not interacted with the
# webclient since the last update or whose session is no longer
# valid.
yesterday = fields.Date.to_string(date.today() - timedelta(days=1))
self.env.cr.execute("""SELECT gg.id
FROM gamification_goal as gg
JOIN res_users_log as log ON gg.user_id = log.create_uid
JOIN res_users ru on log.create_uid = ru.id
WHERE (gg.write_date < log.create_date OR ru.share IS NOT TRUE)
AND ru.active IS TRUE
JOIN mail_presence as mp ON mp.user_id = gg.user_id
WHERE gg.write_date <= mp.last_presence
AND mp.last_presence >= now() AT TIME ZONE 'UTC' - interval '%(session_lifetime)s seconds'
AND gg.closed IS NOT TRUE
AND gg.challenge_id IN %s
AND gg.challenge_id IN %(challenge_ids)s
AND (gg.state = 'inprogress'
OR (gg.state = 'reached' AND gg.end_date >= %s))
OR (gg.state = 'reached' AND gg.end_date >= %(yesterday)s))
GROUP BY gg.id
""", [tuple(self.ids), yesterday])
""", {
'session_lifetime': SESSION_LIFETIME,
'challenge_ids': tuple(self.ids),
'yesterday': yesterday
})
Goals.browse(goal_id for [goal_id] in self.env.cr.fetchall()).update_goal()
@ -520,24 +523,27 @@ class Challenge(models.Model):
domain.append(('user_id', '=', user.id))
goal = Goals.search(domain, limit=1)
goal = Goals.search_fetch(domain, ['current', 'completeness', 'state'], limit=1)
if not goal:
continue
if goal.state != 'reached':
return []
line_data.update(goal.read(['id', 'current', 'completeness', 'state'])[0])
line_data.update({
fname: goal[fname]
for fname in ['id', 'current', 'completeness', 'state']
})
res_lines.append(line_data)
continue
line_data['own_goal_id'] = False,
line_data['goals'] = []
if line.condition=='higher':
goals = Goals.search(domain, order="completeness desc, current desc")
else:
goals = Goals.search(domain, order="completeness desc, current asc")
goals = Goals.search(domain, order='id')
if not goals:
continue
goals = goals.sorted(key=lambda goal: (
-goal.completeness, -goal.current if line.condition == 'higher' else goal.current
))
for ranking, goal in enumerate(goals):
if user and goal.user_id == user:
@ -608,7 +614,9 @@ class Challenge(models.Model):
lines = challenge._get_serialized_challenge_lines(user, restrict_goals=subset_goals)
if not lines:
continue
# Avoid error if 'full_suffix' is missing in the line
for line in lines:
line.setdefault('full_suffix', '')
body_html = challenge.report_template_id.with_user(user).with_context(challenge_lines=lines)._render_field('body_html', challenge.ids)[challenge.id]
# notify message only to users, do not post on the challenge
@ -661,15 +669,14 @@ class Challenge(models.Model):
challenge_ended = force or end_date == fields.Date.to_string(yesterday)
if challenge.reward_id and (challenge_ended or challenge.reward_realtime):
# not using start_date as intemportal goals have a start date but no end_date
reached_goals = self.env['gamification.goal'].read_group([
reached_goals = self.env['gamification.goal']._read_group([
('challenge_id', '=', challenge.id),
('end_date', '=', end_date),
('state', '=', 'reached')
], fields=['user_id'], groupby=['user_id'])
for reach_goals_user in reached_goals:
if reach_goals_user['user_id_count'] == len(challenge.line_ids):
], groupby=['user_id'], aggregates=['__count'])
for user, count in reached_goals:
if count == len(challenge.line_ids):
# the user has succeeded every assigned goal
user = self.env['res.users'].browse(reach_goals_user['user_id'][0])
if challenge.reward_realtime:
badges = self.env['gamification.badge.user'].search_count([
('challenge_id', '=', challenge.id),
@ -689,22 +696,21 @@ class Challenge(models.Model):
message_body = _("The challenge %s is finished.", challenge.name)
if rewarded_users:
user_names = rewarded_users.name_get()
message_body += _(
"<br/>Reward (badge %(badge_name)s) for every succeeding user was sent to %(users)s.",
message_body += Markup("<br/>") + _(
"Reward (badge %(badge_name)s) for every succeeding user was sent to %(users)s.",
badge_name=challenge.reward_id.name,
users=", ".join(name for (user_id, name) in user_names)
users=", ".join(rewarded_users.mapped('display_name'))
)
else:
message_body += _("<br/>Nobody has succeeded to reach every goal, no badge is rewarded for this challenge.")
message_body += Markup("<br/>") + _("Nobody has succeeded to reach every goal, no badge is rewarded for this challenge.")
# reward bests
reward_message = _("<br/> %(rank)d. %(user_name)s - %(reward_name)s")
reward_message = Markup("<br/> %(rank)d. %(user_name)s - %(reward_name)s")
if challenge.reward_first_id:
(first_user, second_user, third_user) = challenge._get_topN_users(MAX_VISIBILITY_RANKING)
if first_user:
challenge._reward_user(first_user, challenge.reward_first_id)
message_body += _("<br/>Special rewards were sent to the top competing users. The ranking for this challenge is :")
message_body += Markup("<br/>") + _("Special rewards were sent to the top competing users. The ranking for this challenge is:")
message_body += reward_message % {
'rank': 1,
'user_name': first_user.name,

View file

@ -4,7 +4,7 @@
from odoo import models, fields
class ChallengeLine(models.Model):
class GamificationChallengeLine(models.Model):
"""Gamification challenge line
Predefined goal for 'gamification_challenge'
@ -15,7 +15,7 @@ class ChallengeLine(models.Model):
_description = 'Gamification generic goal for challenge'
_order = "sequence, id"
challenge_id = fields.Many2one('gamification.challenge', string='Challenge', required=True, ondelete="cascade")
challenge_id = fields.Many2one('gamification.challenge', string='Challenge', required=True, index=True, ondelete="cascade")
definition_id = fields.Many2one('gamification.goal.definition', string='Goal Definition', required=True, ondelete="cascade")
sequence = fields.Integer('Sequence', default=1)

View file

@ -11,7 +11,7 @@ from odoo.tools.safe_eval import safe_eval, time
_logger = logging.getLogger(__name__)
class Goal(models.Model):
class GamificationGoal(models.Model):
"""Goal instance for a user
An individual goal for a user on a specified time period"""
@ -22,7 +22,8 @@ class Goal(models.Model):
_order = 'start_date desc, end_date desc, definition_id, id'
definition_id = fields.Many2one('gamification.goal.definition', string="Goal Definition", required=True, ondelete="cascade")
user_id = fields.Many2one('res.users', string="User", required=True, auto_join=True, ondelete="cascade")
user_id = fields.Many2one('res.users', string="User", required=True, bypass_search_access=True, index=True, ondelete="cascade")
user_partner_id = fields.Many2one('res.partner', related='user_id.partner_id')
line_id = fields.Many2one('gamification.challenge.line', string="Challenge Line", ondelete="cascade")
challenge_id = fields.Many2one(
related='line_id.challenge_id', store=True, readonly=True, index=True,
@ -39,12 +40,13 @@ class Goal(models.Model):
('inprogress', "In progress"),
('reached', "Reached"),
('failed', "Failed"),
('canceled', "Canceled"),
('canceled', "Cancelled"),
], default='draft', string='State', required=True)
to_update = fields.Boolean('To update')
closed = fields.Boolean('Closed goal')
computation_mode = fields.Selection(related='definition_id.computation_mode', readonly=False)
color = fields.Integer("Color Index", compute='_compute_color')
remind_update_delay = fields.Integer(
"Remind delay", help="The number of days after which the user "
"assigned to a manual goal will be reminded. "
@ -60,6 +62,17 @@ class Goal(models.Model):
definition_suffix = fields.Char("Suffix", related='definition_id.full_suffix', readonly=True)
definition_display = fields.Selection(string="Display Mode", related='definition_id.display_mode', readonly=True)
@api.depends('end_date', 'last_update', 'state')
def _compute_color(self):
"""Set the color based on the goal's state and completion"""
for goal in self:
goal.color = 0
if (goal.end_date and goal.last_update):
if (goal.end_date < goal.last_update) and (goal.state == 'failed'):
goal.color = 2
elif (goal.end_date < goal.last_update) and (goal.state == 'reached'):
goal.color = 5
@api.depends('current', 'target_goal', 'definition_id.condition')
def _get_completion(self):
"""Return the percentage of completeness of the goal, between 0 and 100"""
@ -150,7 +163,7 @@ class Goal(models.Model):
'time': time,
}
code = definition.compute_code.strip()
safe_eval(code, cxt, mode="exec", nocopy=True)
safe_eval(code, cxt, mode="exec")
# the result of the evaluated codeis put in the 'result' local variable, propagated to the context
result = cxt.get('result')
if isinstance(result, (float, int)):
@ -185,32 +198,23 @@ class Goal(models.Model):
subquery_domain.append((field_date_name, '<=', end_date))
if definition.computation_mode == 'count':
value_field_name = field_name + '_count'
if field_name == 'id':
# grouping on id does not work and is similar to search anyway
users = Obj.search(subquery_domain)
user_values = [{'id': user.id, value_field_name: 1} for user in users]
else:
user_values = Obj.read_group(subquery_domain, fields=[field_name], groupby=[field_name])
user_values = Obj._read_group(subquery_domain, groupby=[field_name], aggregates=['__count'])
else: # sum
value_field_name = definition.field_id.name
if field_name == 'id':
user_values = Obj.search_read(subquery_domain, fields=['id', value_field_name])
else:
user_values = Obj.read_group(subquery_domain, fields=[field_name, "%s:sum" % value_field_name], groupby=[field_name])
user_values = Obj._read_group(subquery_domain, groupby=[field_name], aggregates=[f'{value_field_name}:sum'])
# user_values has format of read_group: [{'partner_id': 42, 'partner_id_count': 3},...]
# user_values has format of _read_group: [(<partner>, <aggregate>), ...]
for goal in [g for g in goals if g.id in query_goals]:
for user_value in user_values:
queried_value = field_name in user_value and user_value[field_name] or False
if isinstance(queried_value, tuple) and len(queried_value) == 2 and isinstance(queried_value[0], int):
queried_value = queried_value[0]
for field_value, aggregate in user_values:
queried_value = field_value.id if isinstance(field_value, models.Model) else field_value
if queried_value == query_goals[goal.id]:
new_value = user_value.get(value_field_name, goal.current)
goals_to_write.update(goal._get_write_values(new_value))
goals_to_write.update(goal._get_write_values(aggregate))
else:
field_name = definition.field_id.name
field = Obj._fields.get(field_name)
sum_supported = bool(field) and field.type in {'integer', 'float', 'monetary'}
for goal in goals:
# eval the domain with user replaced by goal user object
domain = safe_eval(definition.domain, {'user': goal.user_id})
@ -221,10 +225,9 @@ class Goal(models.Model):
if goal.end_date and field_date_name:
domain.append((field_date_name, '<=', goal.end_date))
if definition.computation_mode == 'sum':
field_name = definition.field_id.name
res = Obj.read_group(domain, [field_name], [])
new_value = res and res[0][field_name] or 0.0
if definition.computation_mode == 'sum' and sum_supported:
res = Obj._read_group(domain, [], [f'{field_name}:{definition.computation_mode}'])
new_value = res[0][0] or 0.0
else: # computation mode = count
new_value = Obj.search_count(domain)
@ -274,7 +277,7 @@ class Goal(models.Model):
@api.model_create_multi
def create(self, vals_list):
return super(Goal, self.with_context(no_remind_goal=True)).create(vals_list)
return super(GamificationGoal, self.with_context(no_remind_goal=True)).create(vals_list)
def write(self, vals):
"""Overwrite the write method to update the last_update field to today
@ -283,7 +286,7 @@ class Goal(models.Model):
change, a report is generated
"""
vals['last_update'] = fields.Date.context_today(self)
result = super(Goal, self).write(vals)
result = super().write(vals)
for goal in self:
if goal.state != "draft" and ('definition_id' in vals or 'user_id' in vals):
# avoid drag&drop in kanban view
@ -332,3 +335,6 @@ class Goal(models.Model):
return action
return False
def _mail_get_partner_fields(self, introspect_fields=False):
return ['user_partner_id']

View file

@ -7,7 +7,7 @@ from odoo.tools.safe_eval import safe_eval
DOMAIN_TEMPLATE = "[('store', '=', True), '|', ('model_id', '=', model_id), ('model_id', 'in', model_inherited_ids)%s]"
class GoalDefinition(models.Model):
class GamificationGoalDefinition(models.Model):
"""Goal definition
A goal definition contains the way to evaluate an objective
@ -91,7 +91,11 @@ class GoalDefinition(models.Model):
msg = e
if isinstance(e, SyntaxError):
msg = (e.msg + '\n' + e.text)
raise exceptions.UserError(_("The domain for the definition %s seems incorrect, please check it.\n\n%s") % (definition.name, msg))
raise exceptions.UserError(_(
"The domain for the definition %(definition)s seems incorrect, please check it.\n\n%(error_message)s",
definition=definition.name,
error_message=msg,
))
return True
def _check_model_validity(self):
@ -118,7 +122,7 @@ class GoalDefinition(models.Model):
@api.model_create_multi
def create(self, vals_list):
definitions = super(GoalDefinition, self).create(vals_list)
definitions = super().create(vals_list)
definitions.filtered_domain([
('computation_mode', 'in', ['count', 'sum']),
])._check_domain_validity()
@ -128,7 +132,7 @@ class GoalDefinition(models.Model):
return definitions
def write(self, vals):
res = super(GoalDefinition, self).write(vals)
res = super().write(vals)
if vals.get('computation_mode', 'count') in ('count', 'sum') and (vals.get('domain') or vals.get('model_id')):
self._check_domain_validity()
if vals.get('field_id') or vals.get('model_id') or vals.get('batch_mode'):

View file

@ -4,10 +4,10 @@ from odoo import api, fields, models
from odoo.tools.translate import html_translate
class KarmaRank(models.Model):
class GamificationKarmaRank(models.Model):
_name = 'gamification.karma.rank'
_description = 'Rank based on karma'
_inherit = 'image.mixin'
_inherit = ['image.mixin']
_order = 'karma_min'
name = fields.Text(string='Rank Name', translate=True, required=True)
@ -20,20 +20,21 @@ class KarmaRank(models.Model):
user_ids = fields.One2many('res.users', 'rank_id', string='Users')
rank_users_count = fields.Integer("# Users", compute="_compute_rank_users_count")
_sql_constraints = [
('karma_min_check', "CHECK( karma_min > 0 )", 'The required karma has to be above 0.')
]
_karma_min_check = models.Constraint(
'CHECK( karma_min > 0 )',
'The required karma has to be above 0.',
)
@api.depends('user_ids')
def _compute_rank_users_count(self):
requests_data = self.env['res.users']._read_group([('rank_id', '!=', False)], ['rank_id'], ['rank_id'])
requests_mapped_data = dict((data['rank_id'][0], data['rank_id_count']) for data in requests_data)
requests_data = self.env['res.users']._read_group([('rank_id', '!=', False)], ['rank_id'], ['__count'])
requests_mapped_data = {rank.id: count for rank, count in requests_data}
for rank in self:
rank.rank_users_count = requests_mapped_data.get(rank.id, 0)
@api.model_create_multi
def create(self, values_list):
res = super(KarmaRank, self).create(values_list)
def create(self, vals_list):
res = super().create(vals_list)
if any(res.mapped('karma_min')) > 0:
users = self.env['res.users'].sudo().search([('karma', '>=', max(min(res.mapped('karma_min')), 1))])
if users:
@ -46,7 +47,7 @@ class KarmaRank(models.Model):
low = min(vals['karma_min'], min(self.mapped('karma_min')))
high = max(vals['karma_min'], max(self.mapped('karma_min')))
res = super(KarmaRank, self).write(vals)
res = super().write(vals)
if 'karma_min' in vals:
after_ranks = self.env['gamification.karma.rank'].search([], order="karma_min DESC").ids

View file

@ -1,69 +1,139 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import calendar
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models
from odoo import _, api, fields, models
from odoo.tools import date_utils
class KarmaTracking(models.Model):
class GamificationKarmaTracking(models.Model):
_name = 'gamification.karma.tracking'
_description = 'Track Karma Changes'
_rec_name = 'user_id'
_order = 'tracking_date DESC'
_order = 'tracking_date desc, id desc'
user_id = fields.Many2one('res.users', 'User', index=True, readonly=True, required=True, ondelete='cascade')
old_value = fields.Integer('Old Karma Value', required=True, readonly=True)
new_value = fields.Integer('New Karma Value', required=True, readonly=True)
def _get_origin_selection_values(self):
return [('res.users', _('User'))]
user_id = fields.Many2one('res.users', 'User', index=True, required=True, ondelete='cascade')
old_value = fields.Integer('Old Karma Value', readonly=True)
new_value = fields.Integer('New Karma Value', required=True)
gain = fields.Integer('Gain', compute='_compute_gain', readonly=False)
consolidated = fields.Boolean('Consolidated')
tracking_date = fields.Date(default=fields.Date.context_today)
tracking_date = fields.Datetime(default=fields.Datetime.now, readonly=True, index=True)
reason = fields.Text(default=lambda self: _('Add Manually'), string='Description')
origin_ref = fields.Reference(
string='Source',
selection=lambda self: self._get_origin_selection_values(),
default=lambda self: f'res.users,{self.env.user.id}',
)
origin_ref_model_name = fields.Selection(
string='Source Type', selection=lambda self: self._get_origin_selection_values(),
compute='_compute_origin_ref_model_name', store=True)
@api.depends('old_value', 'new_value')
def _compute_gain(self):
for karma in self:
karma.gain = karma.new_value - (karma.old_value or 0)
@api.depends('origin_ref')
def _compute_origin_ref_model_name(self):
for karma in self:
if not karma.origin_ref:
karma.origin_ref_model_name = False
continue
karma.origin_ref_model_name = karma.origin_ref._name
@api.model_create_multi
def create(self, vals_list):
# fill missing old value with current user karma
users = self.env['res.users'].browse([
values['user_id']
for values in vals_list
if 'old_value' not in values and values.get('user_id')
])
karma_per_users = {user.id: user.karma for user in users}
for values in vals_list:
if 'old_value' not in values and values.get('user_id'):
values['old_value'] = karma_per_users[values['user_id']]
if 'gain' in values and 'old_value' in values:
values['new_value'] = values['old_value'] + values['gain']
del values['gain']
return super().create(vals_list)
@api.model
def _consolidate_last_month(self):
""" Consolidate last month. Used by a cron to cleanup tracking records. """
previous_month_start = fields.Date.today() + relativedelta(months=-1, day=1)
return self._process_consolidate(previous_month_start)
def _consolidate_cron(self):
"""Consolidate the trackings 2 months ago. Used by a cron to cleanup tracking records."""
from_date = date_utils.start_of(fields.Datetime.today(), 'month') - relativedelta(months=2)
return self._process_consolidate(from_date)
def _process_consolidate(self, from_date, end_date=None):
"""Consolidate the karma trackings.
The consolidation keeps, for each user, the oldest "old_value" and the most recent
"new_value", creates a new karma tracking with those values and removes all karma
trackings between those dates. The origin / reason is changed on the consolidated
records, so this information is lost in the process.
"""
self.env['gamification.karma.tracking'].flush_model()
if not end_date:
end_date = date_utils.end_of(date_utils.end_of(from_date, 'month'), 'day')
def _process_consolidate(self, from_date):
""" Consolidate trackings into a single record for a given month, starting
at a from_date (included). End date is set to last day of current month
using a smart calendar.monthrange construction. """
end_date = from_date + relativedelta(day=calendar.monthrange(from_date.year, from_date.month)[1])
select_query = """
SELECT user_id,
(
SELECT old_value from gamification_karma_tracking old_tracking
WHERE old_tracking.user_id = gamification_karma_tracking.user_id
AND tracking_date::timestamp BETWEEN %(from_date)s AND %(to_date)s
AND consolidated IS NOT TRUE
ORDER BY tracking_date ASC LIMIT 1
), (
SELECT new_value from gamification_karma_tracking new_tracking
WHERE new_tracking.user_id = gamification_karma_tracking.user_id
AND tracking_date::timestamp BETWEEN %(from_date)s AND %(to_date)s
AND consolidated IS NOT TRUE
ORDER BY tracking_date DESC LIMIT 1
)
FROM gamification_karma_tracking
WHERE tracking_date::timestamp BETWEEN %(from_date)s AND %(to_date)s
AND consolidated IS NOT TRUE
GROUP BY user_id """
WITH old_tracking AS (
SELECT DISTINCT ON (user_id) user_id, old_value, tracking_date
FROM gamification_karma_tracking
WHERE tracking_date BETWEEN %(from_date)s
AND %(end_date)s
AND consolidated IS NOT TRUE
ORDER BY user_id, tracking_date ASC, id ASC
)
INSERT INTO gamification_karma_tracking (
user_id,
old_value,
new_value,
tracking_date,
origin_ref,
consolidated,
reason)
SELECT DISTINCT ON (nt.user_id)
nt.user_id,
ot.old_value AS old_value,
nt.new_value AS new_value,
ot.tracking_date AS from_tracking_date,
%(origin_ref)s AS origin_ref,
TRUE,
%(reason)s
FROM gamification_karma_tracking AS nt
JOIN old_tracking AS ot
ON ot.user_id = nt.user_id
WHERE nt.tracking_date BETWEEN %(from_date)s
AND %(end_date)s
AND nt.consolidated IS NOT TRUE
ORDER BY nt.user_id, nt.tracking_date DESC, id DESC
"""
self.env.cr.execute(select_query, {
'from_date': from_date,
'to_date': end_date,
'end_date': end_date,
'origin_ref': f'res.users,{self.env.user.id}',
'reason': _('Consolidation from %(from_date)s to %(end_date)s', from_date=from_date.date(), end_date=end_date.date()),
})
results = self.env.cr.dictfetchall()
if results:
for result in results:
result['consolidated'] = True
result['tracking_date'] = fields.Date.to_string(from_date)
self.create(results)
self.search([
('tracking_date', '>=', from_date),
('tracking_date', '<=', end_date),
('consolidated', '!=', True)]
).unlink()
trackings = self.search([
('tracking_date', '>=', from_date),
('tracking_date', '<=', end_date),
('consolidated', '!=', True)]
)
# HACK: the unlink() AND the flush_all() must have that key in their context!
trackings = trackings.with_context(skip_karma_computation=True)
trackings.unlink()
trackings.env.flush_all()
return True

View file

@ -1,21 +1,49 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
from odoo import _, api, fields, models
from odoo.tools import SQL
class Users(models.Model):
class ResUsers(models.Model):
_inherit = 'res.users'
karma = fields.Integer('Karma', default=0, copy=False)
karma = fields.Integer('Karma', compute='_compute_karma', store=True, readonly=False)
karma_tracking_ids = fields.One2many('gamification.karma.tracking', 'user_id', string='Karma Changes', groups="base.group_system")
badge_ids = fields.One2many('gamification.badge.user', 'user_id', string='Badges', copy=False)
gold_badge = fields.Integer('Gold badges count', compute="_get_user_badge_level")
silver_badge = fields.Integer('Silver badges count', compute="_get_user_badge_level")
bronze_badge = fields.Integer('Bronze badges count', compute="_get_user_badge_level")
rank_id = fields.Many2one('gamification.karma.rank', 'Rank')
rank_id = fields.Many2one('gamification.karma.rank', 'Rank', index='btree_not_null')
next_rank_id = fields.Many2one('gamification.karma.rank', 'Next Rank')
@api.depends('karma_tracking_ids.new_value')
def _compute_karma(self):
if self.env.context.get('skip_karma_computation'):
# do not need to update the user karma
# e.g. during the tracking consolidation
return
self.env['gamification.karma.tracking'].flush_model()
select_query = """
SELECT DISTINCT ON (user_id) user_id, new_value
FROM gamification_karma_tracking
WHERE user_id = ANY(%(user_ids)s)
ORDER BY user_id, tracking_date DESC, id DESC
"""
self.env.cr.execute(select_query, {'user_ids': self.ids})
user_karma_map = {
values['user_id']: values['new_value']
for values in self.env.cr.dictfetchall()
}
for user in self:
user.karma = user_karma_map.get(user.id, 0)
self.sudo()._recompute_rank()
@api.depends('badge_ids')
def _get_user_badge_level(self):
""" Return total badge per level of users
@ -40,37 +68,59 @@ class Users(models.Model):
self.browse(user_id)['{}_badge'.format(level)] = count
@api.model_create_multi
def create(self, values_list):
res = super(Users, self).create(values_list)
def create(self, vals_list):
res = super().create(vals_list)
karma_trackings = []
for user in res:
if user.karma:
karma_trackings.append({'user_id': user.id, 'old_value': 0, 'new_value': user.karma})
if karma_trackings:
self.env['gamification.karma.tracking'].sudo().create(karma_trackings)
self._add_karma_batch({
user: {
'gain': int(vals['karma']),
'old_value': 0,
'origin_ref': f'res.users,{self.env.uid}',
'reason': _('User Creation'),
}
for user, vals in zip(res, vals_list)
if vals.get('karma')
})
res._recompute_rank()
return res
def write(self, vals):
karma_trackings = []
if 'karma' in vals:
for user in self:
if user.karma != vals['karma']:
karma_trackings.append({'user_id': user.id, 'old_value': user.karma, 'new_value': vals['karma']})
self._add_karma_batch({
user: {
'gain': int(vals['karma']) - user.karma,
'origin_ref': f'res.users,{self.env.uid}',
}
for user in self
if int(vals['karma']) != user.karma
})
return super().write(vals)
result = super(Users, self).write(vals)
def _add_karma(self, gain, source=None, reason=None):
self.ensure_one()
values = {'gain': gain, 'source': source, 'reason': reason}
return self._add_karma_batch({self: values})
if karma_trackings:
self.env['gamification.karma.tracking'].sudo().create(karma_trackings)
if 'karma' in vals:
self._recompute_rank()
return result
def _add_karma_batch(self, values_per_user):
if not values_per_user:
return
def add_karma(self, karma):
for user in self:
user.karma += karma
create_values = []
for user, values in values_per_user.items():
origin = values.get('source') or self.env.user
reason = values.get('reason') or _('Add Manually')
origin_description = f'{origin.display_name} #{origin.id}'
old_value = values.get('old_value', user.karma)
create_values.append({
'new_value': old_value + values['gain'],
'old_value': old_value,
'origin_ref': f'{origin._name},{origin.id}',
'reason': f'{reason} ({origin_description})',
'user_id': user.id,
})
self.env['gamification.karma.tracking'].sudo().create(create_values)
return True
def _get_tracking_karma_gain_position(self, user_domain, from_date=None, to_date=None):
@ -90,49 +140,46 @@ class Users(models.Model):
:param to_date: compute karma gained before this date (included) or until
end of time;
:return list: [{
'user_id': user_id (belonging to current record set),
'karma_gain_total': integer, karma gained in the given timeframe,
'karma_position': integer, ranking position
}, {..}] ordered by karma_position desc
:rtype: list[dict]
:return:
::
[{
'user_id': user_id (belonging to current record set),
'karma_gain_total': integer, karma gained in the given timeframe,
'karma_position': integer, ranking position
}, {..}]
ordered by descending karma position
"""
if not self:
return []
where_query = self.env['res.users']._where_calc(user_domain)
user_from_clause, user_where_clause, where_clause_params = where_query.get_sql()
where_query = self.env['res.users']._search(user_domain, bypass_access=True)
params = []
if from_date:
date_from_condition = 'AND tracking.tracking_date::timestamp >= timestamp %s'
params.append(from_date)
if to_date:
date_to_condition = 'AND tracking.tracking_date::timestamp <= timestamp %s'
params.append(to_date)
params.append(tuple(self.ids))
query = """
sql = SQL("""
SELECT final.user_id, final.karma_gain_total, final.karma_position
FROM (
SELECT intermediate.user_id, intermediate.karma_gain_total, row_number() OVER (ORDER BY intermediate.karma_gain_total DESC) AS karma_position
FROM (
SELECT "res_users".id as user_id, COALESCE(SUM("tracking".new_value - "tracking".old_value), 0) as karma_gain_total
FROM %(user_from_clause)s
FROM %s
LEFT JOIN "gamification_karma_tracking" as "tracking"
ON "res_users".id = "tracking".user_id AND "res_users"."active" = TRUE
WHERE %(user_where_clause)s %(date_from_condition)s %(date_to_condition)s
ON "res_users".id = "tracking".user_id AND "res_users"."active" IS TRUE
WHERE %s %s %s
GROUP BY "res_users".id
ORDER BY karma_gain_total DESC
) intermediate
) final
WHERE final.user_id IN %%s""" % {
'user_from_clause': user_from_clause,
'user_where_clause': user_where_clause or (not from_date and not to_date and 'TRUE') or '',
'date_from_condition': date_from_condition if from_date else '',
'date_to_condition': date_to_condition if to_date else ''
}
WHERE final.user_id IN %s""",
where_query.from_clause,
where_query.where_clause or SQL("TRUE"),
SQL("AND tracking.tracking_date::DATE >= %s::DATE", from_date) if from_date else SQL(),
SQL("AND tracking.tracking_date::DATE <= %s::DATE", to_date) if to_date else SQL(),
tuple(self.ids),
)
self.env.cr.execute(query, tuple(where_clause_params + params))
self.env.cr.execute(sql)
return self.env.cr.dictfetchall()
def _get_karma_position(self, user_domain):
@ -148,32 +195,36 @@ WHERE final.user_id IN %%s""" % {
:param user_domain: general domain (i.e. active, karma > 1, website, ...)
to compute the absolute position of the current record set
:return list: [{
'user_id': user_id (belonging to current record set),
'karma_position': integer, ranking position
}, {..}] ordered by karma_position desc
:rtype: list[dict]
:return:
::
[{
'user_id': user_id (belonging to current record set),
'karma_position': integer, ranking position
}, {..}] ordered by karma_position desc
"""
if not self:
return {}
where_query = self.env['res.users']._where_calc(user_domain)
user_from_clause, user_where_clause, where_clause_params = where_query.get_sql()
where_query = self.env['res.users']._search(user_domain, bypass_access=True)
# we search on every user in the DB to get the real positioning (not the one inside the subset)
# then, we filter to get only the subset.
query = """
sql = SQL("""
SELECT sub.user_id, sub.karma_position
FROM (
SELECT "res_users"."id" as user_id, row_number() OVER (ORDER BY res_users.karma DESC) AS karma_position
FROM %(user_from_clause)s
WHERE %(user_where_clause)s
FROM %s
WHERE %s
) sub
WHERE sub.user_id IN %%s""" % {
'user_from_clause': user_from_clause,
'user_where_clause': user_where_clause or 'TRUE',
}
self.env.cr.execute(query, tuple(where_clause_params + [tuple(self.ids)]))
WHERE sub.user_id IN %s""",
where_query.from_clause,
where_query.where_clause or SQL("TRUE"),
tuple(self.ids),
)
self.env.cr.execute(sql)
return self.env.cr.dictfetchall()
def _rank_changed(self):
@ -290,10 +341,9 @@ WHERE sub.user_id IN %%s""" % {
if self.next_rank_id:
return self.next_rank_id
elif not self.rank_id:
return self.env['gamification.karma.rank'].search([], order="karma_min ASC", limit=1)
else:
return self.env['gamification.karma.rank']
domain = [('karma_min', '>', self.rank_id.karma_min)] if self.rank_id else []
return self.env['gamification.karma.rank'].search(domain, order="karma_min ASC", limit=1)
def get_gamification_redirection_data(self):
"""
@ -303,3 +353,18 @@ WHERE sub.user_id IN %%s""" % {
"""
self.ensure_one()
return []
def action_karma_report(self):
self.ensure_one()
return {
'name': _('Karma Updates'),
'res_model': 'gamification.karma.tracking',
'target': 'current',
'type': 'ir.actions.act_window',
'view_mode': 'list',
'context': {
'default_user_id': self.id,
'search_default_user_id': self.id,
},
}

View file

@ -26,7 +26,9 @@ badge_user_manager,"Badge-user Manager",model_gamification_badge_user,base.group
badge_user_portal,"Badge-user Portal",gamification.model_gamification_badge_user,base.group_portal,1,1,1,0
badge_user_public,"Badge-user Public",gamification.model_gamification_badge_user,base.group_public,1,0,0,0
gamification_karma_rank_access_all,gamification.karma.rank.access.all,gamification.model_gamification_karma_rank,,1,0,0,0
gamification_karma_rank_access_public,gamification.karma.rank.access.all,gamification.model_gamification_karma_rank,base.group_public,1,0,0,0
gamification_karma_rank_access_portal,gamification.karma.rank.access.all,gamification.model_gamification_karma_rank,base.group_portal,1,0,0,0
gamification_karma_rank_access_employee,gamification.karma.rank.access.all,gamification.model_gamification_karma_rank,base.group_user,1,0,0,0
gamification_karma_rank_access_user_manager,gamification.karma.rank.access.user.manager,gamification.model_gamification_karma_rank,base.group_system,1,1,1,1
gamification_karma_tracking_access_all,gamification.karma.tracking.access.all,gamification.model_gamification_karma_tracking,,0,0,0,0
gamification_karma_tracking_access_user_manager,gamification.karma.tracking.access.user.manager,gamification.model_gamification_karma_tracking,base.group_system,1,1,1,1

1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
26 access_gamification_goal_wizard gamification_karma_tracking_access_all access.gamification.goal.wizard gamification.karma.tracking.access.all model_gamification_goal_wizard gamification.model_gamification_karma_tracking base.group_user 1 0 1 0 1 0 0
27 access_gamification_badge_user_wizard gamification_karma_tracking_access_user_manager access.gamification.badge.user.wizard gamification.karma.tracking.access.user.manager model_gamification_badge_user_wizard gamification.model_gamification_karma_tracking base.group_user base.group_system 1 1 1 0 1
28 access_gamification_goal_wizard access.gamification.goal.wizard model_gamification_goal_wizard base.group_user 1 1 1 0
29 access_gamification_badge_user_wizard access.gamification.badge.user.wizard model_gamification_badge_user_wizard base.group_user 1 1 1 0
30
31
32
33
34

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

View file

@ -1,22 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="70" height="70" viewBox="0 0 70 70">
<defs>
<path id="icon-a" d="M4,5.35309892e-14 C36.4160122,9.87060235e-15 58.0836068,-3.97961823e-14 65,5.07020818e-14 C69,6.733808e-14 70,1 70,5 C70,43.0488877 70,62.4235458 70,65 C70,69 69,70 65,70 C61,70 9,70 4,70 C1,70 7.10542736e-15,69 7.10542736e-15,65 C7.25721566e-15,62.4676575 3.83358709e-14,41.8005206 3.60818146e-14,5 C-1.13686838e-13,1 1,5.75716207e-14 4,5.35309892e-14 Z"/>
<linearGradient id="icon-c" x1="100%" x2="0%" y1="0%" y2="100%">
<stop offset="0%" stop-color="#7CC098"/>
<stop offset="100%" stop-color="#5F8A71"/>
</linearGradient>
</defs>
<g fill="none" fill-rule="evenodd">
<mask id="icon-b" fill="#fff">
<use xlink:href="#icon-a"/>
</mask>
<g mask="url(#icon-b)">
<rect width="70" height="70" fill="url(#icon-c)"/>
<path fill="#FFF" fill-opacity=".383" d="M4,1.8 L65,1.8 C67.6666667,1.8 69.3333333,1.13333333 70,-0.2 C70,2.46666667 70,3.46666667 70,2.8 L1.10547097e-14,2.8 C-1.65952376e-14,3.46666667 -2.9161925e-14,2.46666667 -2.66453526e-14,-0.2 C0.666666667,1.13333333 2,1.8 4,1.8 Z" transform="matrix(1 0 0 -1 0 2.8)"/>
<path fill="#393939" d="M4,50 C2,50 -7.10542736e-15,49.8542274 0,45.9183673 L2.12440903e-16,22.80445 L20,0 L50,0 L52.6478104,5.68199944 L41.6482009,31.5743024 L43.0774821,32.5463035 L33.6110344,50 L4,50 Z" opacity=".324" transform="translate(0 19)"/>
<path fill="#000" fill-opacity=".383" d="M4,4 L65,4 C67.6666667,4 69.3333333,3 70,1 C70,3.66666667 70,5 70,5 L1.77635684e-15,5 C1.77635684e-15,5 1.77635684e-15,3.66666667 1.77635684e-15,1 C0.666666667,3 2,4 4,4 Z" transform="translate(0 65)"/>
<path fill="#000" fill-rule="nonzero" d="M51.4715595,21.2569497 C50.3159332,20.3969451 48.6924841,20.2231449 46.6336479,20.7285969 C46.6324003,20.2243717 46.6249152,19.7692195 46.6132716,19.3884947 C46.6066181,19.1717555 46.4265583,19 46.2065776,19 L24.7936,19 C24.5736193,19 24.3935595,19.1717555 24.3869061,19.3880858 C24.3752625,19.7688106 24.3677773,20.2239628 24.3669456,20.727779 C22.3076936,20.2227359 20.6846603,20.3961272 19.5282023,21.2561318 C18.3235066,22.1525322 17.8041194,23.7052842 18.066516,25.6281284 C18.6299826,29.7592583 22.681536,35.3842525 28.5931529,38.1008528 C29.5911749,39.4793955 30.8245637,40.6395634 32.3357354,41.4615364 L32.3357354,41.7150803 C31.7706054,41.9665795 31.3734758,42.5243761 31.3734758,43.1717309 L31.3734758,43.2175324 C31.3734758,43.9070082 31.8246649,44.491795 32.4488445,44.716304 L32.4488445,45.4106872 C32.4488445,45.4106872 32.4488445,45.4106872 32.4488445,45.4110961 C31.7668628,46.7278887 30.6727812,48.4053678 29.1046392,49.5827112 C28.9661636,49.6869914 28.9104407,49.8661079 28.9661636,50.0288667 C29.0218865,50.1916256 29.1769958,50.300813 29.3516496,50.300813 L41.6489439,50.300813 C41.8231819,50.300813 41.9778753,50.1912166 42.034014,50.0288667 C42.0901528,49.8665168 42.034014,49.6869914 41.8955385,49.5827112 C40.3290598,48.4070036 39.2349782,46.7270708 38.551749,45.4086425 L38.551749,44.716304 C39.1759286,44.491795 39.6271177,43.9070082 39.6271177,43.2175324 L39.6271177,43.1717309 C39.6271177,42.524785 39.2299881,41.9673974 38.665274,41.7154892 L38.665274,41.4615364 C40.1768614,40.6395634 41.411082,39.4789866 42.409104,38.1000349 C48.3198892,35.3826168 52.3701951,29.7584404 52.9336617,25.6281284 C53.1956424,23.7052842 52.6762552,22.1529411 51.4715595,21.2569497 Z M20.5665611,25.2989303 C20.4879668,24.7206866 20.4459667,23.6844281 21.0501859,23.2345922 C21.644009,22.792935 22.8632592,22.8362829 24.4301537,23.3257862 C24.5848471,26.3998016 25.0688877,30.337502 26.3846134,33.8666696 C23.1048636,31.3455435 20.920443,27.8940748 20.5665611,25.2989303 Z M50.4336166,25.2985213 C50.0793188,27.893257 47.8965615,31.3439077 44.6176434,33.8646249 C45.9325374,30.3358662 46.4165781,26.3989837 46.5704398,23.3253772 C48.1373343,22.8362829 49.3557528,22.792935 49.9495759,23.2350011 C50.5542109,23.6844281 50.5126267,24.7206866 50.4336166,25.2985213 Z M42.9997627,51.2357724 C43.2067373,51.2357724 43.3746167,51.3477838 43.375,51.4861358 L43.375,53.7496365 C43.375,53.8879886 43.2071206,54 43.000146,54 L28.0002373,54 C27.7928794,54 27.625,53.8879886 27.625,53.7496365 L27.625,51.4861358 C27.625,51.3477838 27.7928794,51.2357724 28.0002373,51.2357724 L42.9997627,51.2357724 Z" opacity=".3"/>
<path fill="#FFF" fill-rule="nonzero" d="M51.4715595,19.2569497 C50.3159332,18.3969451 48.6924841,18.2231449 46.6336479,18.7285969 C46.6324003,18.2243717 46.6249152,17.7692195 46.6132716,17.3884947 C46.6066181,17.1717555 46.4265583,17 46.2065776,17 L24.7936,17 C24.5736193,17 24.3935595,17.1717555 24.3869061,17.3880858 C24.3752625,17.7688106 24.3677773,18.2239628 24.3669456,18.727779 C22.3076936,18.2227359 20.6846603,18.3961272 19.5282023,19.2561318 C18.3235066,20.1525322 17.8041194,21.7052842 18.066516,23.6281284 C18.6299826,27.7592583 22.681536,33.3842525 28.5931529,36.1008528 C29.5911749,37.4793955 30.8245637,38.6395634 32.3357354,39.4615364 L32.3357354,39.7150803 C31.7706054,39.9665795 31.3734758,40.5243761 31.3734758,41.1717309 C31.3734758,41.9070082 31.8246649,42.491795 32.4488445,42.716304 L32.4488445,43.4106872 C31.7668628,44.7278887 30.6727812,46.4053678 29.1046392,47.5827112 C28.9661636,47.6869914 28.9104407,47.8661079 28.9661636,48.0288667 C29.0218865,48.1916256 29.1769958,48.300813 29.3516496,48.300813 L41.6489439,48.300813 C41.8231819,48.300813 41.9778753,48.1912166 42.034014,48.0288667 C42.0901528,47.8665168 42.034014,47.6869914 41.8955385,47.5827112 C40.3290598,46.4070036 39.2349782,44.7270708 38.551749,43.4086425 L38.551749,42.716304 C39.1759286,42.491795 39.6271177,41.9070082 39.6271177,41.2175324 C39.6271177,40.524785 39.2299881,39.9673974 38.665274,39.7154892 L38.665274,39.4615364 C40.1768614,38.6395634 41.411082,37.4789866 42.409104,36.1000349 C48.3198892,33.3826168 52.3701951,27.7584404 52.9336617,23.6281284 C53.1956424,21.7052842 52.6762552,20.1529411 51.4715595,19.2569497 Z M20.5665611,23.2989303 C20.4879668,22.7206866 20.4459667,21.6844281 21.0501859,21.2345922 C21.644009,20.792935 22.8632592,20.8362829 24.4301537,21.3257862 C24.5848471,24.3998016 25.0688877,28.337502 26.3846134,31.8666696 C23.1048636,29.3455435 20.920443,25.8940748 20.5665611,23.2989303 Z M50.4336166,23.2985213 C50.0793188,25.893257 47.8965615,29.3439077 44.6176434,31.8646249 C45.9325374,28.3358662 46.4165781,24.3989837 46.5704398,21.3253772 C48.1373343,20.8362829 49.3557528,20.792935 49.9495759,21.2350011 C50.5542109,21.6844281 50.5126267,22.7206866 50.4336166,23.2985213 Z M42.9997627,49.2357724 C43.2067373,49.2357724 43.3746167,49.3477838 43.375,49.4861358 L43.375,51.7496365 C43.375,51.8879886 43.2071206,52 43.000146,52 L28.0002373,52 C27.7928794,52 27.625,51.8879886 27.625,51.7496365 L27.625,49.4861358 C27.625,49.3477838 27.7928794,49.2357724 28.0002373,49.2357724 L42.9997627,49.2357724 Z"/>
</g>
</g>
</svg>
<svg width="50" height="50" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#o_icon_gamification__a)"><path d="M42 33c0 9.389-7.611 17-17 17S8 42.39 8 33s7.611-17 17-17 17 7.611 17 17Z" fill="#FBB945"/><path d="M33.497 18.272 25.001 33l-8.497-14.728A16.922 16.922 0 0 1 25 16c3.095 0 5.997.827 8.496 2.272Z" fill="#F78613"/><path d="M8 33c0 9.389 7.611 17 17 17V16c-9.389 0-17 7.611-17 17Z" fill="#F78613"/><path d="M16.62 0h8.381v16c-3.095 0-5.997.827-8.497 2.272L11.207 9.09a4 4 0 0 1 .08-4.131l1.95-3.092A4 4 0 0 1 16.62 0Z" fill="#962B48"/><path d="M25 16c-3.095 0-5.996.827-8.496 2.272L25 33V16Z" fill="#FBB945"/><path d="M25 16c3.095 0 5.997.827 8.496 2.272l5.298-9.182a4 4 0 0 0-.08-4.131l-1.949-3.092A4 4 0 0 0 33.381 0H25v16Z" fill="#985184"/></g><defs><clipPath id="o_icon_gamification__a"><path fill="#fff" d="M0 0h50v50H0z"/></clipPath></defs></svg>

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 887 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,8 @@
.o_badge_content {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
}

Some files were not shown because too many files have changed in this diff Show more