mirror of
https://github.com/bringout/oca-ocb-vertical-industry.git
synced 2026-04-21 06:52:01 +02:00
19.0 vanilla
This commit is contained in:
parent
4607ccbd2e
commit
825ff6514e
487 changed files with 184979 additions and 195262 deletions
|
|
@ -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',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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')),
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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&utm_medium=gamification" style="color: #875A7B;">Odoo</a>
|
||||
Powered by <a target="_blank" href="https://www.odoo.com?utm_source=db&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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -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
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
|
|
@ -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():
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
|
|
|
|||
|
|
@ -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'):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
Binary file not shown.
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 2.4 KiB |
|
|
@ -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 |
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
.o_badge_content {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 5;
|
||||
-webkit-box-orient: vertical;
|
||||
}
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import datetime
|
||||
from freezegun import freeze_time
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo.addons.gamification.tests.common import TransactionCaseGamification
|
||||
from odoo.exceptions import UserError
|
||||
|
|
@ -12,7 +14,7 @@ class TestGamificationCommon(TransactionCaseGamification):
|
|||
def setUp(self):
|
||||
super(TestGamificationCommon, self).setUp()
|
||||
employees_group = self.env.ref('base.group_user')
|
||||
self.user_ids = employees_group.users
|
||||
self.user_ids = employees_group.all_user_ids
|
||||
|
||||
# Push demo user into the challenge before creating a new one
|
||||
self.env.ref('gamification.challenge_base_discover')._update_all()
|
||||
|
|
@ -20,7 +22,7 @@ class TestGamificationCommon(TransactionCaseGamification):
|
|||
'name': 'R2D2',
|
||||
'login': 'r2d2@openerp.com',
|
||||
'email': 'r2d2@openerp.com',
|
||||
'groups_id': [(6, 0, [employees_group.id])]
|
||||
'group_ids': [(6, 0, [employees_group.id])]
|
||||
})
|
||||
self.badge_good_job = self.env.ref('gamification.badge_good_job')
|
||||
|
||||
|
|
@ -61,22 +63,22 @@ class test_challenge(TestGamificationCommon):
|
|||
badge_ids = self.env['gamification.badge.user'].search([('badge_id', '=', badge_id), ('user_id', '=', demo.id)])
|
||||
self.assertEqual(len(badge_ids), 1, "Demo user has not received the badge")
|
||||
|
||||
@mute_logger('odoo.models.unlink')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.mail', 'odoo.addons.auth_signup')
|
||||
def test_20_update_all_goals_filter(self):
|
||||
# Enroll two internal and two portal users in the challenge
|
||||
(
|
||||
portal_login_before_update,
|
||||
portal_login_after_update,
|
||||
internal_login_before_update,
|
||||
internal_login_after_update,
|
||||
portal_last_active_old,
|
||||
portal_last_active_recent,
|
||||
internal_last_active_old,
|
||||
internal_last_active_recent,
|
||||
) = all_test_users = self.env['res.users'].create([
|
||||
{
|
||||
'name': f'{kind} {age} login',
|
||||
'login': f'{kind}_{age}',
|
||||
'email': f'{kind}_{age}',
|
||||
'groups_id': [(6, 0, groups_id)],
|
||||
'group_ids': [(6, 0, group_ids)],
|
||||
}
|
||||
for kind, groups_id in (
|
||||
for kind, group_ids in (
|
||||
('Portal', []),
|
||||
('Internal', [self.env.ref('base.group_user').id]),
|
||||
)
|
||||
|
|
@ -90,21 +92,23 @@ class test_challenge(TestGamificationCommon):
|
|||
'user_ids': [(6, 0, all_test_users.ids)]
|
||||
})
|
||||
|
||||
# Setup user access logs
|
||||
self.env['res.users.log'].search([('create_uid', 'in', challenge.user_ids.ids)]).unlink()
|
||||
now = datetime.datetime.now()
|
||||
# Setup user presence
|
||||
challenge.user_ids.presence_ids.unlink()
|
||||
|
||||
# Create "old" log in records
|
||||
self.env['res.users.log'].create([
|
||||
{"create_uid": internal_login_before_update.id, 'create_date': now - datetime.timedelta(minutes=3)},
|
||||
{"create_uid": portal_login_before_update.id, 'create_date': now - datetime.timedelta(minutes=3)},
|
||||
])
|
||||
for user in (
|
||||
portal_last_active_old,
|
||||
portal_last_active_recent,
|
||||
internal_last_active_old,
|
||||
internal_last_active_recent,
|
||||
):
|
||||
self.env["mail.presence"]._update_presence(user, 20 * 60 * 1000) # 20 min
|
||||
|
||||
# Reset goal objective values
|
||||
all_test_users.partner_id.tz = False
|
||||
|
||||
# Regenerate all goals
|
||||
self.env["gamification.goal"].search([]).unlink()
|
||||
self.env['gamification.goal'].search([]).unlink()
|
||||
self.assertFalse(self.env['gamification.goal'].search([]))
|
||||
|
||||
challenge.action_check()
|
||||
|
|
@ -114,29 +118,166 @@ class test_challenge(TestGamificationCommon):
|
|||
self.assertEqual(len(goal_ids), 4)
|
||||
self.assertEqual(set(goal_ids.mapped('state')), {'inprogress'})
|
||||
|
||||
# Create more recent log in records
|
||||
self.env['res.users.log'].create([
|
||||
{"create_uid": internal_login_after_update.id, 'create_date': now + datetime.timedelta(minutes=3)},
|
||||
{"create_uid": portal_login_after_update.id, 'create_date': now + datetime.timedelta(minutes=3)},
|
||||
])
|
||||
# +1 second to avoid microsecond inaccuracy when comparing to write_date in _update_all
|
||||
current_date = datetime.datetime.now() + timedelta(seconds=1)
|
||||
with freeze_time(current_date):
|
||||
# Update presence for 2 users
|
||||
self.env["mail.presence"]._update_presence(internal_last_active_recent)
|
||||
self.env["mail.presence"]._update_presence(portal_last_active_recent)
|
||||
|
||||
# Update goal objective checked by goal definition
|
||||
all_test_users.partner_id.write({'tz': 'Europe/Paris'})
|
||||
all_test_users.flush_recordset()
|
||||
|
||||
# Update goals as done by _cron_update
|
||||
challenge._update_all()
|
||||
unchanged_goal_id = self.env['gamification.goal'].search([
|
||||
unchanged_goal_ids = self.env['gamification.goal'].search([
|
||||
('challenge_id', '=', challenge.id),
|
||||
('state', '=', 'inprogress'), # others were updated to "reached"
|
||||
('user_id', 'in', challenge.user_ids.ids),
|
||||
])
|
||||
# Check that even though login record for internal user is older than goal update, their goal was reached.
|
||||
# Check that goals of users not recently active were not updated
|
||||
self.assertEqual(
|
||||
portal_login_before_update,
|
||||
unchanged_goal_id.user_id,
|
||||
"Only portal user last logged in before last challenge update should not have been updated.",
|
||||
portal_last_active_old | internal_last_active_old,
|
||||
unchanged_goal_ids.user_id,
|
||||
)
|
||||
|
||||
def test_30_create_challenge_with_sum_goal(self):
|
||||
challenge = self.env['gamification.challenge'].create({
|
||||
'name': 'test',
|
||||
'state': 'draft',
|
||||
'user_domain': '[("active", "=", True)]', #Include all active users to get a least one participant
|
||||
'reward_id': 1,
|
||||
})
|
||||
|
||||
model = self.env['ir.model'].search([('model', '=', 'gamification.badge')])[0]
|
||||
field = self.env['ir.model.fields'].search([('model', '=', 'gamification.badge'), ('name', '=', 'rule_max_number')])[0]
|
||||
|
||||
sum_goal = self.env['gamification.goal.definition'].create({
|
||||
'name': 'test',
|
||||
'computation_mode': 'sum',
|
||||
'model_id': model.id,
|
||||
'field_id': field.id
|
||||
})
|
||||
|
||||
self.env['gamification.challenge.line'].create({
|
||||
'challenge_id': challenge.id,
|
||||
'definition_id': sum_goal.id,
|
||||
'condition': 'higher',
|
||||
'target_goal': 1
|
||||
})
|
||||
|
||||
challenge.action_start()
|
||||
|
||||
self.assertEqual(
|
||||
challenge.state,
|
||||
'inprogress',
|
||||
"Challenge failed to start",
|
||||
)
|
||||
|
||||
def test_40_create_challenge_with_sum_goal(self):
|
||||
challenge = self.env['gamification.challenge'].create({
|
||||
'name': 'Test Challenge',
|
||||
'state': 'draft',
|
||||
'user_domain': '[("active", "=", True)]',
|
||||
'reward_id': 1,
|
||||
})
|
||||
|
||||
model = self.env['ir.model'].search([('model', '=', 'gamification.badge')], limit=1)
|
||||
|
||||
field = self.env['ir.model.fields'].search([
|
||||
('model', '=', 'gamification.badge'),
|
||||
('name', '=', 'name')
|
||||
], limit=1)
|
||||
|
||||
self.assertNotIn(field.ttype, {'integer', 'float', 'monetary'}, "Field should not be numeric")
|
||||
|
||||
sum_goal = self.env['gamification.goal.definition'].create({
|
||||
'name': 'Test Definition',
|
||||
'computation_mode': 'sum',
|
||||
'model_id': model.id,
|
||||
'field_id': field.id,
|
||||
})
|
||||
|
||||
existing_badges_count = len(self.env['gamification.badge'].with_user(self.user_demo.id).search([]))
|
||||
|
||||
self.env['gamification.challenge.line'].create({
|
||||
'challenge_id': challenge.id,
|
||||
'definition_id': sum_goal.id,
|
||||
'condition': 'higher',
|
||||
'target_goal': existing_badges_count + 1,
|
||||
})
|
||||
|
||||
challenge.action_start()
|
||||
self.assertEqual(challenge.state, 'inprogress', "Challenge failed to start")
|
||||
|
||||
goal = self.env['gamification.goal'].search([
|
||||
('user_id', '=', self.user_demo.id),
|
||||
('definition_id', '=', sum_goal.id)
|
||||
])
|
||||
self.assertLess(goal.current, goal.target_goal, "Current goal should be less than the target goal")
|
||||
self.assertEqual(goal.state, 'inprogress')
|
||||
|
||||
badge = self.env['gamification.badge'].create({
|
||||
'name': self.user_demo.name + " triggered",
|
||||
'rule_auth': 'users',
|
||||
'rule_auth_user_ids': self.user_demo,
|
||||
})
|
||||
|
||||
badge_user_wizard = self.env['gamification.badge.user.wizard'].create({
|
||||
'user_id': self.user_demo.id,
|
||||
'badge_id': badge.id,
|
||||
})
|
||||
badge_user_wizard.action_grant_badge()
|
||||
|
||||
goal.update_goal()
|
||||
self.assertEqual(goal.current, goal.target_goal, "Current goal should be equal to the target goal")
|
||||
self.assertEqual(goal.state, 'reached')
|
||||
|
||||
def test_send_report_in_ranking(self):
|
||||
gamification_model = self.env['ir.model']._get_id('gamification.badge')
|
||||
field = self.env['ir.model.fields'].search([('model', '=', 'gamification.badge'), ('name', '=', 'rule_max_number')], limit=1)
|
||||
|
||||
sum_goal = self.env['gamification.goal.definition'].create({
|
||||
'name': 'test1',
|
||||
'computation_mode': 'sum',
|
||||
'model_id': gamification_model,
|
||||
'field_id': field.id
|
||||
})
|
||||
|
||||
challenge = self.env['gamification.challenge'].create({
|
||||
'name': 'test1',
|
||||
'state': 'draft',
|
||||
'user_domain': '[("active", "=", True)]',
|
||||
'reward_id': 1,
|
||||
'visibility_mode': 'ranking'
|
||||
})
|
||||
|
||||
self.env['gamification.challenge.line'].create({
|
||||
'challenge_id': challenge.id,
|
||||
'definition_id': sum_goal.id,
|
||||
'condition': 'higher',
|
||||
'target_goal': 1
|
||||
})
|
||||
|
||||
challenge.action_start()
|
||||
current_date = datetime.datetime.now()
|
||||
|
||||
with freeze_time(current_date):
|
||||
challenge.action_report_progress()
|
||||
|
||||
self.assertEqual(
|
||||
challenge.state,
|
||||
'inprogress',
|
||||
"Challenge failed to start",
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
challenge.last_report_date,
|
||||
current_date.date(),
|
||||
"Challenge last report date is not as expected"
|
||||
)
|
||||
|
||||
|
||||
class test_badge_wizard(TestGamificationCommon):
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue