e8081f4bc21c292e6b5fd1871c7fa9259361db3e
[odoo/odoo.git] / addons / gamification / views / goal.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <openerp>
3     <data>
4
5         <!-- Goal views -->
6         <record id="goal_list_action" model="ir.actions.act_window">
7             <field name="name">Goals</field>
8             <field name="res_model">gamification.goal</field>
9             <field name="view_mode">tree,form,kanban</field>
10             <field name="context">{'search_default_group_by_user': True, 'search_default_group_by_definition': True}</field>
11             <field name="help" type="html">
12                 <p class="oe_view_nocontent_create">
13                     Click to create a goal. 
14                 </p>
15                 <p>
16                     A goal is defined by a user and a goal definition.
17                     Goals can be created automatically by using challenges.
18                 </p>
19             </field>
20         </record>
21
22         <record id="goal_list_view" model="ir.ui.view">
23             <field name="name">Goal List</field>
24             <field name="model">gamification.goal</field>
25             <field name="arch" type="xml">
26                 <tree string="Goal List" colors="red:state == 'failed';green:state == 'reached';grey:state == 'canceled'" create="false">
27                     <field name="definition_id" invisible="1" />
28                     <field name="user_id" invisible="1" />
29                     <field name="start_date"/>
30                     <field name="end_date"/>
31                     <field name="current"/>
32                     <field name="target_goal"/>
33                     <field name="completeness" widget="progressbar"/>
34                     <field name="state" invisible="1"/>
35                     <field name="line_id" invisible="1"/>
36                 </tree>
37             </field>
38         </record>
39                 
40                 <record id="goal_form_view" model="ir.ui.view">
41             <field name="name">Goal Form</field>
42             <field name="model">gamification.goal</field>
43             <field name="arch" type="xml">
44                 <form string="Goal">
45                     <header>
46                         <button string="Start goal" type="object" name="action_start" states="draft" class="oe_highlight"/>
47                         
48                         <button string="Goal Reached" type="object" name="action_reach" states="inprogress" />
49                         <button string="Goal Failed" type="object" name="action_fail" states="inprogress"/>
50                         <button string="Reset Completion" type="object" name="action_cancel" states="failed,reached" groups="base.group_no_one" />
51                         <field name="state" widget="statusbar" statusbar_visible="draft,inprogress,reached" />
52                     </header>
53                     <sheet>
54                         <group>
55                             <group string="Reference">
56                                 <field name="definition_id" on_change="on_change_definition_id(definition_id)" attrs="{'readonly':[('state','!=','draft')]}"/>
57                                 <field name="user_id" attrs="{'readonly':[('state','!=','draft')]}"/>
58                                 <field name="challenge_id" />
59                             </group>
60                             <group string="Schedule">
61                                 <field name="start_date" attrs="{'readonly':[('state','!=','draft')]}"/>
62                                 <field name="end_date" />
63                                 <field name="computation_mode" invisible="1"/>
64
65                                 <label for="remind_update_delay" attrs="{'invisible':[('computation_mode','!=', 'manually')]}"/>
66                                 <div attrs="{'invisible':[('computation_mode','!=', 'manually')]}">
67                                     <field name="remind_update_delay" class="oe_inline"/>
68                                     days
69                                 </div>
70                                 <field name="last_update" groups="base.group_no_one"/>
71                             </group>
72                             <group string="Data" colspan="4">
73                                 <label for="target_goal" />
74                                 <div>
75                                     <field name="target_goal" attrs="{'readonly':[('state','!=','draft')]}" class="oe_inline"/>
76                                     <field name="definition_suffix" class="oe_inline"/>
77                                 </div>
78                                 <label for="current" />
79                                 <div>
80                                     <field name="current" class="oe_inline"/>
81                                     <button string="refresh" type="object" name="update" class="oe_link" attrs="{'invisible':['|',('computation_mode', '=', 'manually'),('state', '=', 'draft')]}" />
82                                     <div class="oe_grey" attrs="{'invisible':[('definition_id', '=', False)]}">
83                                         Reached when current value is <strong><field name="definition_condition" class="oe_inline"/></strong> than the target.
84                                     </div>
85                                 </div>
86                             </group>
87                         </group>
88                     </sheet>
89                 </form>
90             </field>
91         </record>
92
93         <record id="goal_search_view" model="ir.ui.view">
94             <field name="name">Goal Search</field>
95             <field name="model">gamification.goal</field>
96             <field name="arch" type="xml">
97                 <search string="Search Goals">
98                     <filter name="my" string="My Goals" domain="[('user_id', '=', uid)]"/>
99                     <separator/>
100                     <filter name="draft" string="Draft" domain="[('state', '=', 'draft')]"/>
101                     <filter name="inprogress" string="Running"
102                         domain="[
103                             '|',
104                                 ('state', '=', 'inprogress'),
105                                 '&amp;',
106                                     ('state', 'in', ('done', 'failed')),
107                                     ('end_date', '>=', context_today().strftime('%%Y-%%m-%%d'))
108                         ]"/>
109                     <filter name="closed" string="Done"
110                         domain="[
111                             ('state', 'in', ('reached', 'failed')),
112                             '|',
113                                 ('end_date', '=', False),
114                                 ('end_date', '&lt;', context_today().strftime('%%Y-%%m-%%d'))
115                         ]"/>
116                     <separator/>
117
118                     <field name="user_id"/>
119                     <field name="definition_id"/>
120                     <field name="challenge_id"/>
121                     <group expand="0" string="Group By">
122                         <filter name="group_by_user" string="User" domain="[]" context="{'group_by':'user_id'}"/>
123                         <filter name="group_by_definition" string="Goal Definition" domain="[]" context="{'group_by':'definition_id'}"/>
124                         <filter string="State" domain="[]" context="{'group_by':'state'}"/>
125                         <filter string="End Date" domain="[]" context="{'group_by':'end_date'}"/>
126                     </group>
127                 </search>
128             </field>
129         </record>
130
131         <record id="goal_kanban_view" model="ir.ui.view" >
132             <field name="name">Goal Kanban View</field>
133             <field name="model">gamification.goal</field>
134             <field name="arch" type="xml">
135                 <kanban class="oe_background_grey">
136                     <field name="definition_id"/>
137                     <field name="user_id"/>
138                     <field name="current"/>
139                     <field name="completeness"/>
140                     <field name="state"/>
141                     <field name="target_goal"/>
142                     <field name="definition_condition"/>
143                     <field name="definition_suffix"/>
144                     <field name="definition_display"/>
145                     <field name="start_date"/>
146                     <field name="end_date"/>
147                     <field name="last_update"/>
148                     <templates>
149                         <t t-name="kanban-tooltip">
150                            <field name="definition_description"/>
151                         </t>
152                         <t t-name="kanban-box">
153                             <div t-attf-class="oe_kanban_card oe_gamification_goal oe_kanban_goal #{record.end_date.raw_value &lt; record.last_update.raw_value &amp; record.state.raw_value == 'failed' ? 'oe_kanban_color_2' : ''} #{record.end_date.raw_value &lt; record.last_update.raw_value &amp; record.state.raw_value == 'reached' ? 'oe_kanban_color_5' : ''}">
154                                 <div class="oe_kanban_content">
155                                     <p><strong><h4 class="oe_goal_name text-center" tooltip="kanban-tooltip"><field name="definition_id" /></h4></strong></p>
156                                     <div class="oe_kanban_left">
157                                         <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" />
158                                     </div>
159                                     <field name="user_id" />
160                                     <div class="oe_goal_state_block">
161                                         <t t-if="record.definition_display.raw_value == 'boolean'">
162                                             <div class="oe_goal_state oe_e">
163                                                 <t t-if="record.state.raw_value=='reached'"><span class="oe_green" title="Goal Reached">W</span></t>
164                                                 <t t-if="record.state.raw_value=='inprogress'"><span title="Goal in Progress">N</span></t>
165                                                 <t t-if="record.state.raw_value=='failed'"><span class="oe_red" title="Goal Failed">X</span></t>
166                                             </div>
167                                         </t>
168                                         <t t-if="record.definition_display.raw_value == 'progress'">
169                                             <t t-if="record.definition_condition.raw_value =='higher'">
170                                                 <field name="current" widget="gauge" style="width:160px; height: 120px;" options="{'max_field': 'target_goal', 'label_field': 'definition_suffix'}" />
171                                             </t>
172                                             <t t-if="record.definition_condition.raw_value != 'higher'">
173                                                 <div t-attf-class="oe_goal_state #{record.current.raw_value == record.target_goal.raw_value+1 ? 'oe_orange' : record.current.raw_value &gt; record.target_goal.raw_value ? 'oe_red' : 'oe_green'}">
174                                                     <t t-esc="record.current.raw_value" />
175                                                 </div>
176                                                 <em>Target: less than <t t-esc="record.target_goal.raw_value" /></em>
177                                             </t>
178                                         </t>
179                                         
180                                     </div>
181                                     <p>
182                                         <t t-if="record.start_date.value">
183                                             From <t t-esc="record.start_date.value" />
184                                         </t>
185                                         <t t-if="record.end_date.value">
186                                             To <t t-esc="record.end_date.value" />
187                                         </t>
188                                     </p>
189                                 </div>
190                             </div>
191                         </t>
192                     </templates>
193                 </kanban>
194             </field>
195         </record>
196
197
198         <!-- Goal definitions view -->
199         
200         <record id="goal_definition_list_action" model="ir.actions.act_window">
201             <field name="name">Goal Definitions</field>
202             <field name="res_model">gamification.goal.definition</field>
203             <field name="view_mode">tree,form</field>
204             <field name="help" type="html">
205                 <p class="oe_view_nocontent_create">
206                     Click to create a goal definition. 
207                 </p>
208                 <p>
209                     A goal definition is a technical model of goal defining a condition to reach.
210                     The dates, values to reach or users are defined in goal instance.
211                 </p>
212             </field>
213         </record>
214
215         <record id="goal_definition_list_view" model="ir.ui.view">
216             <field name="name">Goal Definitions List</field>
217             <field name="model">gamification.goal.definition</field>
218             <field name="arch" type="xml">
219                 <tree string="Goal Definitions">
220                     <field name="name"/>
221                     <field name="computation_mode"/>
222                 </tree>
223             </field>
224         </record>
225
226
227         <record id="goal_definition_form_view" model="ir.ui.view">
228             <field name="name">Goal Definitions Form</field>
229             <field name="model">gamification.goal.definition</field>
230             <field name="arch" type="xml">
231                 <form string="Goal definitions">
232                     <sheet>
233                             <label for="name" class="oe_edit_only"/>
234                             <h1>
235                                 <field name="name" class="oe_inline"/>
236                             </h1>
237                             <label for="description" class="oe_edit_only"/>
238                             <div>
239                                 <field name="description" class="oe_inline"/>
240                             </div>
241                         
242                             <group string="How to compute the goal?">
243
244                                 <field widget="radio" name="computation_mode"/>
245
246                                 <!-- Hide the fields below if manually -->
247                                 <field name="model_id" attrs="{'invisible':[('computation_mode','not in',('sum', 'count'))], 'required':[('computation_mode','in',('sum', 'count'))]}" class="oe_inline"/>
248                                 <field name="field_id" attrs="{'invisible':[('computation_mode','!=','sum')], 'required':[('computation_mode','=','sum')]}" domain="[('model_id', '=', model_id)]"  class="oe_inline"/>
249                                 <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"/>
250                                 <field name="domain" attrs="{'invisible':[('computation_mode','not in',('sum', 'count'))], 'required':[('computation_mode','in',('sum', 'count'))]}" class="oe_inline"/>
251                                 <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)"/>
252                                 <field name="condition" widget="radio"/>
253                             </group>
254                             <group string="Optimisation" attrs="{'invisible': [('computation_mode', '!=', 'count')]}">
255                                 <field name="batch_mode" />
256                                 <div colspan="4">In batch mode, the domain is evaluated globally. If enabled, do not use keyword 'user' in above filter domain.</div>
257                                 <field name="batch_distinctive_field" attrs="{'invisible': [('batch_mode', '=', False)], 'required':  [('batch_mode', '=', True)]}" 
258                                     domain="[('model_id', '=', model_id)]" class="oe_inline" />
259                                 <field name="batch_user_expression" attrs="{'invisible': [('batch_mode', '=', False)], 'required':  [('batch_mode', '=', True)]}" class="oe_inline"
260                                     placeholder="e.g. user.partner_id.id"/>
261                             </group>
262                             <group string="Formating Options">
263                                 <field name="display_mode" widget="radio" />
264                                 <field name="suffix" placeholder="e.g. days" class="oe_inline"/>
265                                 <field name="monetary"/>
266                             </group>
267                             <group string="Clickable Goals" attrs="{'invisible': [('computation_mode', '=', 'manually')]}">
268                                 <field name="action_id"  class="oe_inline"/>
269                                 <field name="res_id_field"  attrs="{'invisible': [('action_id', '=', False)]}" class="oe_inline"/>
270                             </group>
271
272                     </sheet>
273                 </form>
274             </field>
275         </record>
276
277         <record id="goal_definition_search_view" model="ir.ui.view">
278             <field name="name">Goal Definition Search</field>
279             <field name="model">gamification.goal.definition</field>
280             <field name="arch" type="xml">
281                 <search string="Search Goal Definitions">
282                     <field name="name"/>
283                     <field name="model_id"/>
284                     <field name="field_id"/>
285                     <group expand="0" string="Group By">
286                         <filter string="Model" domain="[]" context="{'group_by':'model_id'}"/>
287                         <filter string="Computation Mode" domain="[]" context="{'group_by':'computation_mode'}"/>
288                     </group>
289                 </search>
290             </field>
291         </record>
292
293         <!-- menus in settings - technical feature required -->
294         <menuitem id="gamification_menu" name="Gamification Tools" parent="base.menu_administration" groups="base.group_no_one" />
295             <menuitem id="gamification_challenge_menu" parent="gamification_menu" action="challenge_list_action" sequence="0"/>
296             <menuitem id="gamification_goal_menu" parent="gamification_menu" action="goal_list_action" sequence="10"/>
297             <menuitem id="gamification_definition_menu" parent="gamification_menu" action="goal_definition_list_action" sequence="20"/>
298             <menuitem id="gamification_badge_menu" parent="gamification_menu" action="badge_list_action" sequence="30"/>
299
300     </data>
301 </openerp>