diff options
| author | Thibault Delavallée <tde@openerp.com> | 2014-01-06 14:57:00 +0100 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2014-01-06 14:57:00 +0100 |
| commit | 49c0b7a82003a889edc19cb189d0d6d0ebda2c5f (patch) | |
| tree | d24c9d3fe3baad3ba06f11d4bf334e2504fb6092 /addons/gamification/views | |
| parent | c4c268c902a134efdf0f097053c9b28d6b14417c (diff) | |
| parent | ced63415b7319e12fb9d31a3e370850278f697c1 (diff) | |
[MERGE] Sync with trunk
bzr revid: tde@openerp.com-20140106135700-rt0g44w5xmpbtxiu
Diffstat (limited to 'addons/gamification/views')
| -rw-r--r-- | addons/gamification/views/badge.xml | 194 | ||||
| -rw-r--r-- | addons/gamification/views/challenge.xml | 289 | ||||
| -rw-r--r-- | addons/gamification/views/goal.xml | 289 |
3 files changed, 772 insertions, 0 deletions
diff --git a/addons/gamification/views/badge.xml b/addons/gamification/views/badge.xml new file mode 100644 index 00000000000..0b37e62051d --- /dev/null +++ b/addons/gamification/views/badge.xml @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="UTF-8"?> +<openerp> + <data> + + <!-- Badge views --> + <record id="badge_list_action" model="ir.actions.act_window"> + <field name="name">Badges</field> + <field name="res_model">gamification.badge</field> + <field name="view_mode">kanban,tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a badge. + </p> + <p> + A badge is a symbolic token granted to a user as a sign of reward. + It can be deserved automatically when some conditions are met or manually by users. + Some badges are harder than others to get with specific conditions. + </p> + </field> + </record> + + <record id="badge_list_view" model="ir.ui.view"> + <field name="name">Badge List</field> + <field name="model">gamification.badge</field> + <field name="arch" type="xml"> + <tree string="Badge List"> + <field name="name"/> + <field name="stat_count"/> + <field name="stat_this_month"/> + <field name="stat_my"/> + <field name="rule_auth"/> + </tree> + </field> + </record> + + <record id="badge_form_view" model="ir.ui.view"> + <field name="name">Badge Form</field> + <field name="model">gamification.badge</field> + <field name="arch" type="xml"> + <form string="Badge" version="7.0"> + <header> + <button string="Grant this Badge" type="action" name="%(action_grant_wizard)d" class="oe_highlight" attrs="{'invisible': [('remaining_sending','=',0)]}" /> + <button string="Check Badge" type="object" name="check_automatic" groups="base.group_no_one" /> + </header> + <sheet> + <div class="oe_right oe_button_box"> + </div> + <field name="image" widget='image' class="oe_left oe_avatar"/> + <div class="oe_title"> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name"/> + </h1> + </div> + <group> + <field name="description" nolabel="1" placeholder="Badge Description" /> + </group> + <group string="Granting"> + <div class="oe_grey" colspan="4"> + Security rules to define who is allowed to manually grant badges. Not enforced for administrator. + </div> + <field name="rule_auth" widget="radio" /> + <field name="rule_auth_user_ids" attrs="{'invisible': [('rule_auth','!=','users')]}" widget="many2many_tags" /> + <field name="rule_auth_badge_ids" attrs="{'invisible': [('rule_auth','!=','having')]}" widget="many2many_tags" /> + <field name="rule_max" attrs="{'invisible': [('rule_auth','=','nobody')]}" /> + <field name="rule_max_number" attrs="{'invisible': ['|',('rule_max','=',False),('rule_auth','=','nobody')]}"/> + <label for="stat_my_monthly_sending"/> + <div> + <field name="stat_my_monthly_sending" attrs="{'invisible': [('rule_auth','=','nobody')]}" /> + <div attrs="{'invisible': [('remaining_sending','=',-1)]}" class="oe_grey"> + You can still grant <field name="remaining_sending" class="oe_inline"/> badges this month + </div> + <div attrs="{'invisible': [('remaining_sending','!=',-1)]}" class="oe_grey"> + No monthly sending limit + </div> + </div> + </group> + <group string="Rewards for challenges"> + <field name="challenge_ids" widget="many2many_kanban" nolabel="1" /> + </group> + <group string="Statistics"> + <group> + <field name="stat_count"/> + <field name="stat_this_month"/> + <field name="stat_count_distinct"/> + </group> + <group> + <field name="stat_my"/> + <field name="stat_my_this_month"/> + </group> + </group> + </sheet> + </form> + </field> + </record> + + + <record id="badge_kanban_view" model="ir.ui.view" > + <field name="name">Badge Kanban View</field> + <field name="model">gamification.badge</field> + <field name="arch" type="xml"> + <kanban version="7.0" class="oe_background_grey"> + <field name="name"/> + <field name="description"/> + <field name="image"/> + <field name="stat_my"/> + <field name="stat_count"/> + <field name="stat_this_month"/> + <field name="unique_owner_ids"/> + <field name="stat_my_monthly_sending"/> + <field name="remaining_sending" /> + <field name="rule_max_number" /> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="#{record.stat_my.raw_value ? 'oe_kanban_color_5' : 'oe_kanban_color_white'} oe_kanban_card oe_kanban_global_click oe_kanban_badge"> + <div class="oe_kanban_content"> + <div class="oe_kanban_left"> + <a type="open"><img t-att-src="kanban_image('gamification.badge', 'image', record.image.raw_value)" t-att-title="record.name.value" width="90" height="90" /></a> + </div> + <div class="oe_no_overflow"> + <h4><field name="name"/></h4> + <t t-if="record.remaining_sending.value != 0"> + <button type="action" name="%(action_grant_wizard)d" class="oe_highlight">Grant</button> + <span class="oe_grey"> + <t t-if="record.remaining_sending.value != -1"> + <t t-esc="record.stat_my_monthly_sending.value"/>/<t t-esc="record.rule_max_number.value"/> + </t> + <t t-if="record.remaining_sending.value == -1"> + <t t-esc="record.stat_my_monthly_sending.value"/>/∞ + </t> + </span> + </t> + <t t-if="record.remaining_sending.value == 0"> + <div class="oe_grey">Can not grant</div> + </t> + <p> + <strong><t t-esc="record.stat_count.raw_value"/></strong> granted,<br/> + <strong><t t-esc="record.stat_this_month.raw_value"/></strong> this month + </p> + </div> + <div class="oe_kanban_badge_avatars"> + <t t-if="record.description.value"> + <p><em><field name="description"/></em></p> + </t> + <a type="object" name="get_granted_employees"> + <t t-foreach="record.unique_owner_ids.raw_value.slice(0,11)" t-as="owner"> + <img t-att-src="kanban_image('res.users', 'image_small', owner)" t-att-data-member_id="owner"/> + </t> + </a> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + + <!-- Badge user viewss --> + + <record id="badge_user_kanban_view" model="ir.ui.view" > + <field name="name">Badge User Kanban View</field> + <field name="model">gamification.badge.user</field> + <field name="arch" type="xml"> + <kanban version="7.0" class="oe_background_grey"> + <field name="badge_name"/> + <field name="badge_id"/> + <field name="user_id"/> + <field name="comment"/> + <field name="create_date"/> + <templates> + <t t-name="kanban-box"> + <div class="oe_kanban_card oe_kanban_global_click oe_kanban_badge oe_kanban_color_white"> + <div class="oe_kanban_content"> + <div class="oe_kanban_left"> + <a type="open"><img t-att-src="kanban_image('gamification.badge', 'image', record.badge_id.raw_value)" t-att-title="record.badge_name.value" width="24" height="24" /></a> + </div> + <h4> + <a type="open"><t t-esc="record.badge_name.raw_value" /></a> + </h4> + <t t-if="record.comment.raw_value"> + <p><em><field name="comment"/></em></p> + </t> + <p>Granted by <a type="open"><field name="create_uid" /></a> the <t t-esc="record.create_date.raw_value.toString(Date.CultureInfo.formatPatterns.shortDate)" /></p> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + </data> +</openerp> diff --git a/addons/gamification/views/challenge.xml b/addons/gamification/views/challenge.xml new file mode 100644 index 00000000000..075afcaccfa --- /dev/null +++ b/addons/gamification/views/challenge.xml @@ -0,0 +1,289 @@ +<?xml version="1.0" encoding="UTF-8"?> +<openerp> + <data> + + <record id="challenge_list_view" model="ir.ui.view"> + <field name="name">Challenges List</field> + <field name="model">gamification.challenge</field> + <field name="arch" type="xml"> + <tree string="Goal definitions" colors="blue:state == 'draft';grey:state == 'done'"> + <field name="name"/> + <field name="period"/> + <field name="manager_id"/> + <field name="state"/> + </tree> + </field> + </record> + + <record id="goals_from_challenge_act" model="ir.actions.act_window"> + <field name="res_model">gamification.goal</field> + <field name="name">Related Goals</field> + <field name="view_mode">kanban,tree</field> + <field name="context">{'search_default_group_by_definition': True, 'search_default_inprogress': True, 'search_default_challenge_id': active_id, 'default_challenge_id': active_id}</field> + <field name="help" type="html"> + <p> + There is no goals associated to this challenge matching your search. + Make sure that your challenge is active and assigned to at least one user. + </p> + </field> + </record> + + <record id="challenge_form_view" model="ir.ui.view"> + <field name="name">Challenge Form</field> + <field name="model">gamification.challenge</field> + <field name="arch" type="xml"> + <form string="Goal definitions" version="7.0"> + <header> + <button string="Refresh Challenge" type="object" name="action_check" states="inprogress"/> + <button string="Send Report" type="object" name="action_report_progress" states="inprogress,done" groups="base.group_no_one"/> + <field name="state" widget="statusbar" clickable="True"/> + </header> + <sheet> + + <div class="oe_title"> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name" placeholder="e.g. Monthly Sales Objectives"/> + </h1> + <label for="user_ids" class="oe_edit_only" string="Assign Challenge To"/> + <div> + <field name="user_ids" widget="many2many_tags" /> + </div> + </div> + + <!-- action buttons --> + <div class="oe_right oe_button_box"> + <button type="action" name="%(goals_from_challenge_act)d" string="Related Goals" attrs="{'invisible': [('state','=','draft')]}" /> + </div> + <group> + <group> + <field name="period" attrs="{'readonly':[('state','!=','draft')]}"/> + <field name="visibility_mode" widget="radio" colspan="1" /> + </group> + <group> + <field name="manager_id"/> + <field name="start_date" attrs="{'readonly':[('state','!=','draft')]}"/> + <field name="end_date" attrs="{'readonly':[('state','!=','draft')]}"/> + </group> + </group> + <notebook> + <page string="Goals"> + <field name="line_ids" nolabel="1" colspan="4"> + <tree string="Line List" version="7.0" editable="bottom" > + <field name="sequence" widget="handle"/> + <field name="definition_id" on_change="on_change_definition_id(definition_id)" /> + <field name="condition"/> + <field name="target_goal"/> + <field name="definition_full_suffix"/> + </tree> + </field> + <field name="description" placeholder="Describe the challenge: what is does, who it targets, why it matters..."/> + </page> + <page string="Reward"> + <group> + <field name="reward_id"/> + <field name="reward_first_id" /> + <field name="reward_second_id" attrs="{'invisible': [('reward_first_id','=', False)]}" /> + <field name="reward_third_id" attrs="{'invisible': ['|',('reward_first_id','=', False),('reward_second_id','=', False)]}" /> + <field name="reward_failure" attrs="{'invisible': [('reward_first_id','=', False)]}" /> + </group> + <div class="oe_grey"> + <p>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.</p> + </div> + </page> + <page string="Advanced Options"> + <group string="Subscriptions"> + <field name="autojoin_group_id" /> + <field name="invited_user_ids" widget="many2many_tags" /> + </group> + <group string="Notification Messages"> + <div class="oe_grey" colspan="4"> + <p>Depending on the Display mode, reports will be individual or shared.</p> + </div> + <field name="report_message_frequency" /> + <field name="report_template_id" attrs="{'invisible': [('report_message_frequency','=','never')]}" /> + <field name="report_message_group_id" attrs="{'invisible': [('report_message_frequency','=','never')]}" /> + </group> + <group string="Reminders for Manual Goals"> + <label for="remind_update_delay" /> + <div> + <field name="remind_update_delay" class="oe_inline"/> days + </div> + </group> + <group string="Category" groups="base.group_no_one"> + <field name="category" widget="radio" /> + </group> + </page> + </notebook> + + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids" widget="mail_followers"/> + <field name="message_ids" widget="mail_thread"/> + </div> + </form> + </field> + </record> + + <record model="ir.ui.view" id="view_challenge_kanban"> + <field name="name">Challenge Kanban</field> + <field name="model">gamification.challenge</field> + <field name="arch" type="xml"> + <kanban string="Challenges" class="oe_background_grey" version="7.0"> + <field name="line_ids"/> + <field name="user_ids"/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_card oe_kanban_goal oe_kanban_global_click"> + <div class="oe_dropdown_toggle oe_dropdown_kanban"> + <span class="oe_e">í</span> + <ul class="oe_dropdown_menu"> + <li><a type="edit">Configure Challenge</a></li> + </ul> + </div> + <div class="oe_kanban_content"> + + <h4><field name="name"/></h4> + <div class="oe_kanban_project_list"> + <a type="action" name="%(goals_from_challenge_act)d" style="margin-right: 10px"> + <span t-if="record.line_ids.raw_value.length gt 1"><t t-esc="record.line_ids.raw_value.length"/> Goals</span> + <span t-if="record.line_ids.raw_value.length lt 2"><t t-esc="record.line_ids.raw_value.length"/> Goal</span> + </a> + </div> + <div class="oe_kanban_badge_avatars"> + <t t-foreach="record.user_ids.raw_value.slice(0,11)" t-as="member"> + <img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/> + </t> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record id="challenge_list_action" model="ir.actions.act_window"> + <field name="name">Challenges</field> + <field name="res_model">gamification.challenge</field> + <field name="view_mode">kanban,tree,form</field> + <field name="context">{'search_default_inprogress':True, 'default_inprogress':True}</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a challenge. + </p> + <p> + Assign a list of goals to chosen users to evaluate them. + The challenge can use a period (weekly, monthly...) for automatic creation of goals. + The goals are created for the specified users or member of the group. + </p> + </field> + </record> + <!-- Specify form view ID to avoid selecting view_challenge_wizard --> + <record id="challenge_list_action_view1" model="ir.actions.act_window.view"> + <field eval="1" name="sequence"/> + <field name="view_mode">kanban</field> + <field name="act_window_id" ref="challenge_list_action"/> + <field name="view_id" ref="view_challenge_kanban"/> + </record> + <record id="challenge_list_action_view2" model="ir.actions.act_window.view"> + <field eval="10" name="sequence"/> + <field name="view_mode">form</field> + <field name="act_window_id" ref="challenge_list_action"/> + <field name="view_id" ref="challenge_form_view"/> + </record> + + <!-- Line --> + <record id="challenge_line_list_view" model="ir.ui.view"> + <field name="name">Challenge line list</field> + <field name="model">gamification.challenge.line</field> + <field name="arch" type="xml"> + <tree string="Challenge Lines" > + <field name="definition_id"/> + <field name="target_goal"/> + </tree> + </field> + </record> + + + <record id="challenge_search_view" model="ir.ui.view"> + <field name="name">Challenge Search</field> + <field name="model">gamification.challenge</field> + <field name="arch" type="xml"> + <search string="Search Challenges"> + <filter name="inprogress" string="Running Challenges" + domain="[('state', '=', 'inprogress')]"/> + <filter name="hr_challenges" string="HR Challenges" + domain="[('category', '=', 'hr')]"/> + <field name="name"/> + <group expand="0" string="Group By..."> + <filter string="State" domain="[]" context="{'group_by':'state'}"/> + <filter string="Period" domain="[]" context="{'group_by':'period'}"/> + </group> + </search> + </field> + </record> + + + <record id="view_challenge_wizard" model="ir.ui.view"> + <field name="name">Challenge Wizard</field> + <field name="model">gamification.challenge</field> + <field name="arch" type="xml"> + <form string="Challenge" version="7.0"> + <field name="reward_failure" invisible="1"/> + <div class="oe_title"> + <h1><field name="name" nolabel="1" readonly="1"/></h1> + </div> + <field name="description" nolabel="1" readonly="1" /> + <group> + <field name="start_date" readonly="1" /> + <field name="end_date" readonly="1" /> + <field name="user_ids" string="Participating" readonly="1" widget="many2many_tags" /> + <field name="invited_user_ids" string="Invited" readonly="1" widget="many2many_tags" /> + </group> + <group string="Goals"> + <field name="line_ids" nolabel="1" readonly="1" colspan="4"> + <tree string="Challenge Lines" version="7.0" editable="bottom" > + <field name="sequence" widget="handle"/> + <field name="definition_id"/> + <field name="condition"/> + <field name="target_goal"/> + <field name="definition_full_suffix"/> + </tree> + </field> + </group> + <group string="Reward"> + <div class="oe_grey" attrs="{'invisible': ['|',('reward_id','!=',False),('reward_first_id','!=',False)]}"> + There is no reward upon completion of this challenge. + </div> + <group attrs="{'invisible': [('reward_id','=',False),('reward_first_id','=',False)]}"> + <field name="reward_id" readonly="1" attrs="{'invisible': [('reward_first_id','=', False)]}" /> + <field name="reward_first_id" readonly="1" attrs="{'invisible': [('reward_first_id','=', False)]}" /> + <field name="reward_second_id" readonly="1" attrs="{'invisible': [('reward_second_id','=', False)]}" /> + <field name="reward_third_id" readonly="1" attrs="{'invisible': [('reward_third_id','=', False)]}" /> + </group> + <div class="oe_grey" attrs="{'invisible': [('reward_failure','=',False)]}"> + Even if the challenge is failed, best challengers will be rewarded + </div> + </group> + <footer> + <center> + <button string="Accept" type="object" name="accept_challenge" class="oe_highlight" /> + <button string="Reject" type="object" name="discard_challenge"/> or + <button string="reply later" special="cancel" class="oe_link"/> + </center> + </footer> + </form> + </field> + </record> + + <record id="challenge_wizard" model="ir.actions.act_window"> + <field name="name">Challenge Description</field> + <field name="res_model">gamification.challenge</field> + <field name="view_type">form</field> + <field name="view_id" ref="view_challenge_wizard"/> + <field name="target">new</field> + </record> + + </data> +</openerp>
\ No newline at end of file diff --git a/addons/gamification/views/goal.xml b/addons/gamification/views/goal.xml new file mode 100644 index 00000000000..a269f710c02 --- /dev/null +++ b/addons/gamification/views/goal.xml @@ -0,0 +1,289 @@ +<?xml version="1.0" encoding="UTF-8"?> +<openerp> + <data> + + <!-- Goal views --> + <record id="goal_list_action" model="ir.actions.act_window"> + <field name="name">Goals</field> + <field name="res_model">gamification.goal</field> + <field name="view_mode">tree,form,kanban</field> + <field name="context">{'search_default_group_by_user': True, 'search_default_group_by_definition': True}</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a goal. + </p> + <p> + A goal is defined by a user and a goal definition. + Goals can be created automatically by using challenges. + </p> + </field> + </record> + + <record id="goal_list_view" model="ir.ui.view"> + <field name="name">Goal List</field> + <field name="model">gamification.goal</field> + <field name="arch" type="xml"> + <tree string="Goal List" colors="red:state == 'failed';green:state == 'reached';grey:state == 'canceled'"> + <field name="definition_id" invisible="1" /> + <field name="user_id" invisible="1" /> + <field name="start_date"/> + <field name="end_date"/> + <field name="current"/> + <field name="target_goal"/> + <field name="completeness" widget="progressbar"/> + <field name="state" invisible="1"/> + <field name="line_id" invisible="1"/> + </tree> + </field> + </record> + + <record id="goal_form_view" model="ir.ui.view"> + <field name="name">Goal Form</field> + <field name="model">gamification.goal</field> + <field name="arch" type="xml"> + <form string="Goal" version="7.0"> + <header> + <button string="Start goal" type="object" name="action_start" states="draft" class="oe_highlight"/> + + <button string="Goal Reached" type="object" name="action_reach" states="inprogress,inprogress_update" /> + <button string="Goal Failed" type="object" name="action_fail" states="inprogress,inprogress_update"/> + <button string="Reset Completion" type="object" name="action_cancel" states="failed,reached" groups="base.group_no_one" /> + <field name="state" widget="statusbar" statusbar_visible="draft,inprogress,reached" /> + </header> + <sheet> + <group> + <group string="Reference"> + <field name="definition_id" on_change="on_change_definition_id(definition_id)" attrs="{'readonly':[('state','!=','draft')]}"/> + <field name="user_id" attrs="{'readonly':[('state','!=','draft')]}"/> + <field name="challenge_id" attrs="{'readonly':[('state','!=','draft')]}"/> + </group> + <group string="Schedule"> + <field name="start_date" attrs="{'readonly':[('state','!=','draft')]}"/> + <field name="end_date" /> + <field name="computation_mode" invisible="1"/> + + <label for="remind_update_delay" attrs="{'invisible':[('computation_mode','!=', 'manually')]}"/> + <div attrs="{'invisible':[('computation_mode','!=', 'manually')]}"> + <field name="remind_update_delay" class="oe_inline"/> + days + </div> + <field name="last_update" groups="base.group_no_one"/> + </group> + <group string="Data" colspan="4"> + <label for="target_goal" /> + <div> + <field name="target_goal" attrs="{'readonly':[('state','!=','draft')]}" class="oe_inline"/> + <field name="definition_suffix" class="oe_inline"/> + </div> + <label for="current" /> + <div> + <field name="current" class="oe_inline"/> + <button string="refresh" type="object" name="update" class="oe_link" attrs="{'invisible':['|',('computation_mode', '=', 'manually'),('state', '=', 'draft')]}" /> + <div class="oe_grey" attrs="{'invisible':[('definition_id', '=', False)]}"> + Reached when current value is <strong><field name="definition_condition" class="oe_inline"/></strong> than the target. + </div> + </div> + </group> + </group> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids" widget="mail_followers"/> + <field name="message_ids" widget="mail_thread"/> + </div> + </form> + </field> + </record> + + <record id="goal_search_view" model="ir.ui.view"> + <field name="name">Goal Search</field> + <field name="model">gamification.goal</field> + <field name="arch" type="xml"> + <search string="Search Goals"> + <filter name="my" string="My Goals" domain="[('user_id', '=', uid)]"/> + <separator/> + <filter name="draft" string="Draft" domain="[('state', '=', 'draft')]"/> + <filter name="inprogress" string="Current" + domain="[ + '|', + ('state', 'in', ('inprogress', 'inprogress_update')), + ('end_date', '>=', context_today().strftime('%%Y-%%m-%%d')) + ]"/> + <filter name="closed" string="Passed" domain="[('state', 'in', ('reached', 'failed'))]"/> + <separator/> + + <field name="user_id"/> + <field name="definition_id"/> + <field name="challenge_id"/> + <group expand="0" string="Group By..."> + <filter name="group_by_user" string="User" domain="[]" context="{'group_by':'user_id'}"/> + <filter name="group_by_definition" string="Goal Definition" domain="[]" context="{'group_by':'definition_id'}"/> + <filter string="State" domain="[]" context="{'group_by':'state'}"/> + <filter string="End Date" domain="[]" context="{'group_by':'end_date'}"/> + </group> + </search> + </field> + </record> + + <record id="goal_kanban_view" model="ir.ui.view" > + <field name="name">Goal Kanban View</field> + <field name="model">gamification.goal</field> + <field name="arch" type="xml"> + <kanban version="7.0" class="oe_background_grey"> + <field name="definition_id"/> + <field name="user_id"/> + <field name="current"/> + <field name="completeness"/> + <field name="state"/> + <field name="target_goal"/> + <field name="definition_condition"/> + <field name="definition_suffix"/> + <field name="definition_display"/> + <field name="start_date"/> + <field name="end_date"/> + <field name="last_update"/> + <templates> + <t t-name="kanban-tooltip"> + <field name="definition_description"/> + </t> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_card oe_gamification_goal oe_kanban_goal #{record.end_date.raw_value < record.last_update.raw_value & record.state.raw_value == 'failed' ? 'oe_kanban_color_2' : ''} #{record.end_date.raw_value < record.last_update.raw_value & record.state.raw_value == 'reached' ? 'oe_kanban_color_5' : ''}"> + <div class="oe_kanban_content"> + <p><h4 class="oe_goal_name" tooltip="kanban-tooltip"><field name="definition_id" /></h4></p> + <div class="oe_kanban_left"> + <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" /> + </div> + <field name="user_id" /> + <div class="oe_goal_state_block"> + <t t-if="record.definition_display.raw_value == 'boolean'"> + <div class="oe_goal_state oe_e"> + <t t-if="record.state.raw_value=='reached'"><span class="oe_green" title="Goal Reached">W</span></t> + <t t-if="record.state.raw_value=='inprogress' || record.state.raw_value=='inprogress_update'"><span title="Goal in Progress">N</span></t> + <t t-if="record.state.raw_value=='failed'"><span class="oe_red" title="Goal Failed">X</span></t> + </div> + </t> + <t t-if="record.definition_display.raw_value == 'progress'"> + <t t-if="record.definition_condition.raw_value =='higher'"> + <field name="current" widget="gauge" style="width:160px; height: 120px;" options="{'max_field': 'target_goal', 'label_field': 'definition_suffix'}" /> + </t> + <t t-if="record.definition_condition.raw_value != 'higher'"> + <div t-attf-class="oe_goal_state #{record.current.raw_value == record.target_goal.raw_value+1 ? 'oe_orange' : record.current.raw_value > record.target_goal.raw_value ? 'oe_red' : 'oe_green'}"> + <t t-esc="record.current.raw_value" /> + </div> + <em>Target: less than <t t-esc="record.target_goal.raw_value" /></em> + </t> + </t> + + </div> + <p> + <t t-if="record.start_date.value"> + From <t t-esc="record.start_date.value" /> + </t> + <t t-if="record.end_date.value"> + To <t t-esc="record.end_date.value" /> + </t> + </p> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + + <!-- Goal definitions view --> + + <record id="goal_definition_list_action" model="ir.actions.act_window"> + <field name="name">Goal Definitions</field> + <field name="res_model">gamification.goal.definition</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a goal definition. + </p> + <p> + A goal definition is a technical model of goal defining a condition to reach. + The dates, values to reach or users are defined in goal instance. + </p> + </field> + </record> + + <record id="goal_definition_list_view" model="ir.ui.view"> + <field name="name">Goal Definitions List</field> + <field name="model">gamification.goal.definition</field> + <field name="arch" type="xml"> + <tree string="Goal Definitions"> + <field name="name"/> + <field name="computation_mode"/> + </tree> + </field> + </record> + + + <record id="goal_definition_form_view" model="ir.ui.view"> + <field name="name">Goal Definitions Form</field> + <field name="model">gamification.goal.definition</field> + <field name="arch" type="xml"> + <form string="Goal definitions" version="7.0"> + <sheet> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name" class="oe_inline"/> + </h1> + <label for="description" class="oe_edit_only"/> + <div> + <field name="description" class="oe_inline"/> + </div> + + <group string="How to compute the goal?"> + + <field widget="radio" name="computation_mode"/> + + <!-- Hide the fields below if manually --> + <field name="model_id" attrs="{'invisible':[('computation_mode','not in',('sum', 'count'))], 'required':[('computation_mode','in',('sum', 'count'))]}" class="oe_inline"/> + <field name="field_id" attrs="{'invisible':[('computation_mode','!=','sum')], 'required':[('computation_mode','=','sum')]}" domain="[('model_id','=',model_id)]" class="oe_inline"/> + <field name="field_date_id" attrs="{'invisible':[('computation_mode','not in',('sum', 'count'))]}" domain="[('ttype', 'in', ('date', 'datetime')), ('model_id','=',model_id)]" class="oe_inline"/> + <field name="domain" attrs="{'invisible':[('computation_mode','not in',('sum', 'count'))], 'required':[('computation_mode','in',('sum', 'count'))]}" class="oe_inline"/> + <field name="compute_code" attrs="{'invisible':[('computation_mode','!=','python')], 'required':[('computation_mode','=','python')]}" placeholder="e.g. result = pool.get('mail.followers').search(cr, uid, [('res_model', '=', 'mail.group'), ('partner_id', '=', object.user_id.partner_id.id)], count=True, context=context)"/> + <field name="condition" widget="radio"/> + </group> + <group string="Formating Options"> + <field name="display_mode" widget="radio" /> + <field name="suffix" placeholder="e.g. days"/> + <field name="monetary"/> + </group> + <group string="Clickable Goals" attrs="{'invisible': [('computation_mode', '=', 'manually')]}"> + <field name="action_id" class="oe_inline"/> + <field name="res_id_field" attrs="{'invisible': [('action_id', '=', False)]}" class="oe_inline"/> + </group> + + </sheet> + </form> + </field> + </record> + + <record id="goal_definition_search_view" model="ir.ui.view"> + <field name="name">Goal Definition Search</field> + <field name="model">gamification.goal.definition</field> + <field name="arch" type="xml"> + <search string="Search Goal Definitions"> + <field name="name"/> + <field name="model_id"/> + <field name="field_id"/> + <group expand="0" string="Group By..."> + <filter string="Model" domain="[]" context="{'group_by':'model_id'}"/> + <filter string="Computation Mode" domain="[]" context="{'group_by':'computation_mode'}"/> + </group> + </search> + </field> + </record> + + <!-- menus in settings - technical feature required --> + <menuitem id="gamification_menu" name="Gamification Tools" parent="base.menu_administration" groups="base.group_no_one" /> + <menuitem id="gamification_goal_menu" parent="gamification_menu" action="goal_list_action" sequence="0"/> + <menuitem id="gamification_challenge_menu" parent="gamification_menu" action="challenge_list_action" sequence="10"/> + <menuitem id="gamification_definition_menu" parent="gamification_menu" action="goal_definition_list_action" sequence="20"/> + <menuitem id="gamification_badge_menu" parent="gamification_menu" action="badge_list_action" sequence="30"/> + + </data> +</openerp> |
