1 <?xml version="1.0" encoding="utf-8"?>
5 <menuitem id="menu_scrum"
7 parent="base.menu_main_pm"/>
11 <record id="view_project_project_form" model="ir.ui.view">
12 <field name="name">project.project.form</field>
13 <field name="model">project.project</field>
14 <field name="type">form</field>
15 <field name="inherit_id" ref="project.edit_project"/>
16 <field name="arch" type="xml">
17 <group name="misc" position="after">
18 <group col="2" colspan="2">
19 <separator string="Scrum Data" colspan="4"/>
20 <field name="product_owner_id" required="1" select="1"/>
21 <field name="sprint_size"/>
31 <record id="view_scrum_product_backlog_tree" model="ir.ui.view">
32 <field name="name">scrum.product.backlog.tree</field>
33 <field name="model">scrum.product.backlog</field>
34 <field name="type">tree</field>
35 <field name="arch" type="xml">
36 <tree string="Product Backlog">
37 <field name="sequence" invisible="1"/>
39 <field name="project_id"/>
40 <field name="sprint_id"/>
41 <field name="user_id"/>
42 <field name="progress" widget="progressbar"/>
43 <field name="expected_hours" sum="Expected hours" widget="float_time"/>
44 <field name="effective_hours" sum="Effective hours" widget="float_time"/>
46 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
47 <button type="action" string="Convert to Task" name="%(action_scrum_backlog_to_task)d" states="pending" icon="gtk-execute"/>
48 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
49 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
50 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
51 <button type="object" string="Cancel" name="button_cancel" states="open,pending" icon="gtk-convert"/>
56 <record id="view_scrum_product_backlog_form" model="ir.ui.view">
57 <field name="name">scrum.product.backlog.form</field>
58 <field name="model">scrum.product.backlog</field>
59 <field name="type">form</field>
60 <field name="arch" type="xml">
61 <form string="Product backlog">
62 <group colspan="4" col="6">
63 <field name="name" select="1"/>
64 <field name="project_id" select="1"/>
65 <field domain="[('project_id','=',project_id)]" name="sprint_id" select="1"/>
66 <field name="user_id" select="1"/>
67 <field name="sequence" groups="base.group_extended"/>
69 <field name="progress" widget="progressbar"/>
71 <notebook colspan="4">
72 <page string="Information">
73 <group colspan="6" col="8">
74 <field name="expected_hours" widget="float_time"/>
75 <field name="effective_hours" widget="float_time"/>
77 <separator string="Feature Description" colspan="4"/>
78 <field colspan="4" name="note" nolabel="1"/>
81 <field colspan="4" name="tasks_id" nolabel="1" widget="one2many_list" context="{'default_project_id':project_id, 'default_sprint_id':sprint_id, 'default_product_backlog_id':active_id}">
82 <tree colors="grey:state in ('cancelled','done');blue:remaining_hours<0;red:bool(date_deadline) and (date_deadline<current_date) and (state in ('draft','open'));black:state not in ('cancelled','done')" string="Tasks">
83 <field name="sequence" invisible="0"/>
85 <field name="user_id"/>
86 <field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
87 <field name="planned_hours" widget="float_time" sum="Planned Hours"/>
88 <field name="total_hours" widget="float_time"/>
89 <field name="remaining_hours" widget="float_time" sum="Remaining Hours" invisible="context.get('set_visible',False)"/>
90 <field name="date_deadline" invisible="context.get('set_visible',False)"/>
91 <field name="type" groups="base.group_extended" invisible="context.get('set_visible',False)"/>
92 <field name="date_start" invisible="1"/>
93 <field name="date_end" invisible="1"/>
94 <button name="next_type" invisible="context.get('set_visible',False)"
95 states="draft,open,pending"
99 groups="base.group_extended"
101 <field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/>
102 <field name="state" invisible="context.get('set_visible',False)"/>
103 <button name="do_open" states="pending,draft,done,cancel" string="Start Task" type="object" icon="gtk-execute" help="For changing to open state" invisible="context.get('set_visible',False)"/>
104 <button groups="base.group_extended" name="%(project.action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-execute" help="For changing to delegate state"/>
105 <button name="do_close" states="draft,pending,open" string="Done" type="object" icon="gtk-jump-to" help="For changing to done state"/>
106 <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
111 <group col="8" colspan="4">
112 <field name="state" select="1" readonly="1"/>
113 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
114 <button type="action" string="Convert to Task" name="%(action_scrum_backlog_to_task)d" states="pending" icon="gtk-execute"/>
115 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
116 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
117 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
118 <button type="object" string="Cancel" name="button_cancel" states="open,pending" icon="gtk-cancel"/>
124 <record model="ir.ui.view" id="view_scrum_product_backlog_search">
125 <field name="name">scrum.product.backlog.search</field>
126 <field name="model">scrum.product.backlog</field>
127 <field name="type">search</field>
128 <field name="arch" type="xml">
129 <search string="Product Backlogs">
130 <group col="10" colspan="4">
134 domain="['|','&',('sprint_id.date_start','<=',time.strftime('%%Y-%%m-%%d')), ('sprint_id.date_stop','>=',time.strftime('%%Y-%%m-%%d')), ('state','in',['draft','open'])]"
135 help="Current Backlogs"/>
136 <separator orientation="vertical"/>
137 <filter icon="terp-project" string="Draft" domain="[('state','=','draft')]" help="Draft Backlogs"/>
138 <filter icon="terp-project" string="Open" domain="[('state','=','open')]" help="Open Backlogs"/>
139 <separator orientation="vertical"/>
141 <field name="project_id" widget="selection"/>
142 <field name="sprint_id" widget="selection">
143 <filter icon="terp-project"
145 domain="[('sprint_id.state','=','open')]"
146 help="Backlogs Assigned To Current Sprints"/>
147 <filter icon="terp-project"
149 domain="[('sprint_id','=',False)]"
150 help="Backlogs Not Assigned To Sprints."/>
152 <field name="user_id" widget="selection"/>
155 <group expand="1" string="Group By..." colspan="4" col="20">
156 <filter string="Project" icon="terp-project" domain="[]" context="{'group_by':'project_id'}"/>
157 <filter string="Sprint" icon="terp-project" domain="[]" context="{'group_by':'sprint_id'}"/>
158 <filter string="Responsible" icon="terp-project" domain="[]" context="{'group_by':'user_id'}"/>
159 <filter string="State" icon="terp-project" domain="[]" context="{'group_by':'state'}"/>
166 <record id="action_product_backlog_form" model="ir.actions.act_window">
167 <field name="name">Product Backlogs</field>
168 <field name="res_model">scrum.product.backlog</field>
169 <field name="view_type">form</field>
170 <field name="context">{"search_default_user_id":uid}</field>
171 <field name="search_view_id" ref="view_scrum_product_backlog_search"/>
174 action="action_product_backlog_form"
175 id="menu_action_product_backlog_form"
177 parent="menu_scrum"/>
183 <record id="view_scrum_sprint_tree" model="ir.ui.view">
184 <field name="name">scrum.sprint.tree</field>
185 <field name="model">scrum.sprint</field>
186 <field name="type">tree</field>
187 <field name="arch" type="xml">
188 <tree string="Scrum Sprint">
190 <field name="project_id"/>
191 <field name="scrum_master_id"/>
192 <field name="product_owner_id" invisible="1"/>
193 <field name="date_start"/>
194 <field name="progress" widget="progressbar"/>
195 <field name="effective_hours" sum="Effective hours" widget="float_time"/>
196 <field name="planned_hours" sum="Planned hours" widget="float_time"/>
197 <field name="expected_hours" sum="Expected hours" widget="float_time"/>
198 <field name="state"/>
199 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
200 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
201 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
202 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
206 <record id="view_scrum_sprint_form" model="ir.ui.view">
207 <field name="name">scrum.sprint.form</field>
208 <field name="model">scrum.sprint</field>
209 <field name="type">form</field>
210 <field name="arch" type="xml">
211 <form string="Scrum Sprint">
212 <group colspan="4" col="6">
213 <field name="name" select="1"/>
214 <field name="project_id" on_change="onchange_project_id(project_id)"/>
215 <field name="active"/>
217 <notebook colspan="4">
218 <page string="Sprint Info">
219 <group colspan="2" col="2">
220 <separator string="Owners" colspan="2"/>
221 <field name="product_owner_id"/>
222 <field name="scrum_master_id"/>
224 <group colspan="2" col="2">
225 <separator string="Dates" colspan="2"/>
226 <field name="date_start" select="1"/>
227 <field name="date_stop"/>
229 <group colspan="2" col="2">
230 <separator string="Planning" colspan="2"/>
231 <field name="planned_hours" widget="float_time"/>
232 <field name="expected_hours" widget="float_time"/>
233 <field name="effective_hours" widget="float_time"/>
234 <field name="progress" widget="progressbar"/>
237 <page string="Daily Meetings">
238 <field colspan="4" name="meeting_ids" nolabel="1" widget="one2many_list"/>
240 <page string="Review">
241 <field colspan="4" name="review" nolabel="1"/>
243 <page string="Retrospective">
244 <field colspan="4" name="retrospective" nolabel="1"/>
247 <group col="6" colspan="4">
248 <field name="state" readonly="1"/>
249 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
250 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
251 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
252 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
258 <record model="ir.ui.view" id="view_scrum_sprint_search">
259 <field name="name">scrum.sprint.search</field>
260 <field name="model">scrum.sprint</field>
261 <field name="type">search</field>
262 <field name="arch" type="xml">
263 <search string="Sprints">
264 <group col="10" colspan="4">
265 <filter default="1" icon="terp-project" string="Current" domain="[('state','in',('draft','open'))]" help="Draft and open Sprints"/>
266 <filter icon="terp-project" string="Draft" domain="[('state','=','draft')]" help="Draft Sprints"/>
267 <filter icon="terp-project" string="Open" domain="[('state','=','open')]" help="Open Sprints"/>
268 <separator orientation="vertical"/>
270 <field name="project_id" widget="selection"/>
271 <field name="scrum_master_id" widget="selection"/>
272 <field name="date_start"/>
275 <group expand="1" string="Group By..." colspan="4" col="20">
276 <filter string="Project" icon="terp-project" domain="[]" context="{'group_by':'project_id'}"/>
277 <filter string="Masters" icon="terp-project" domain="[]" context="{'group_by':'scrum_master_id'}"/>
278 <filter string="Product owner" icon="terp-project" domain="[]" context="{'group_by':'product_owner_id'}"/>
279 <filter string="State" icon="terp-project" domain="[]" context="{'group_by':'state'}"/>
280 <separator orientation="vertical"/>
281 <filter string="Start Date" icon="terp-project" domain="[]" context="{'group_by':'date_start'}"/>
287 <record id="action_sprint_all_tree" model="ir.actions.act_window">
288 <field name="name">Sprints</field>
289 <field name="res_model">scrum.sprint</field>
290 <field name="view_type">form</field>
291 <field name="view_mode">tree,form</field>
292 <field name="view_id" ref="view_scrum_sprint_tree"/>
293 <field name="context">{"search_default_scrum_master_id":uid}</field>
294 <field name="search_view_id" ref="view_scrum_sprint_search"/>
298 action="action_sprint_all_tree" id="menu_action_sprint_all_tree" parent="menu_scrum"/>
304 <record id="view_scrum_meeting_tree" model="ir.ui.view">
305 <field name="name">scrum.meeting.tree</field>
306 <field name="model">scrum.meeting</field>
307 <field name="type">tree</field>
308 <field name="arch" type="xml">
309 <tree string="Scrum Sprint">
311 <field name="sprint_id"/>
315 <record id="view_scrum_meeting_form" model="ir.ui.view">
316 <field name="name">Scrum Meeting</field>
317 <field name="model">scrum.meeting</field>
318 <field name="type">form</field>
319 <field name="arch" type="xml">
320 <form string="Scrum Sprint">
321 <group colspan="4" col="6">
323 <field name="sprint_id" domain="[('state', '=', 'open')]"/>
325 <notebook colspan="4">
326 <page string="Scrum Meeting">
327 <separator colspan="4" string="What did you do since the last meeeting?"/>
328 <field colspan="4" name="question_yesterday" nolabel="1"/>
329 <separator colspan="4" string="What do you plan to do till the next meeting?"/>
330 <field colspan="4" name="question_today" nolabel="1"/>
331 <separator colspan="4" string="Are there anything blocking you?"/>
332 <field colspan="4" name="question_blocks" nolabel="1"/>
334 <page string="Optional Info">
335 <separator colspan="4" string="Are your Sprint Backlog estimate accurate ?"/>
336 <field colspan="4" name="question_backlog" nolabel="1"/>
338 <page string="Links">
339 <separator colspan="4" string="Tasks"/>
340 <field colspan="4" name="task_ids" nolabel="1" domain="[('sprint_id','=',sprint_id)]"/>
347 <record id="view_scrum_meeting_search" model="ir.ui.view">
348 <field name="name">scrum.meeting.search</field>
349 <field name="model">scrum.meeting</field>
350 <field name="type">search</field>
351 <field name="arch" type="xml">
352 <search string="Scrum Sprint">
353 <group col="10" colspan="4">
354 <filter name="scrum_daily" icon="terp-project" string="Daily" domain="[('date','=',time.strftime('%%Y-%%m-%%d'))]" help="Daily Meetings"/>
355 <separator orientation="vertical"/>
356 <field name="sprint_id" widget="selection">
357 <filter icon="terp-project" string="Current" domain="[('sprint_id.state','in',('draft','open'))]" help="Current Sprints" default="1"/>
359 <field name="project_id" widget="selection"/>
363 <group expand="1" string="Group By..." colspan="4" col="20">
364 <filter string="Sprint" icon="terp-project" domain="[]" context="{'group_by':'sprint_id'}"/>
365 <filter string="Date" icon="terp-project" domain="[]" context="{'group_by':'date'}"/>
371 <record id="action_meeting_form" model="ir.actions.act_window">
372 <field name="name">Scrum Meetings</field>
373 <field name="res_model">scrum.meeting</field>
374 <field name="view_type">form</field>
375 <field name="view_mode">tree,form</field>
376 <field name="context">{'search_default_scrum_daily':1}</field>
377 <field name="search_view_id" ref="view_scrum_meeting_search"/>
379 <menuitem sequence="30"
380 action="action_meeting_form" id="menu_action_meeting_form" parent="menu_scrum"/>
386 <record id="action_sprint_task_open" model="ir.actions.act_window">
387 <field name="res_model">project.task</field>
388 <field name="name">View sprint Tasks</field>
389 <field name="view_type">form</field>
390 <field name="view_mode">tree,form</field>
391 <field name="domain">[('product_backlog_id', '=', active_id)]</field>
393 <record id="ir_scrum_sprint_open_task" model="ir.values">
394 <field eval=" 'tree_but_open'" name="key2"/>
395 <field eval="'scrum.sprint'" name="model"/>
396 <field name="name">View sprint tasks</field>
397 <field eval="'ir.actions.act_window,'+str(action_sprint_task_open)" name="value"/>
398 <field eval="True" name="object"/>
401 <record id="action_sprint_backlog_open" model="ir.actions.act_window">
402 <field name="res_model">scrum.product.backlog</field>
403 <field name="name">View sprint backlog</field>
404 <field name="view_type">form</field>
405 <field name="view_mode">tree,form</field>
406 <field name="domain">[('sprint_id', '=', active_id)]</field>
408 <record id="ir_scrum_sprint_open_sprint" model="ir.values">
409 <field eval=" 'tree_but_open'" name="key2"/>
410 <field eval="'scrum.sprint'" name="model"/>
411 <field name="name">View sprint backlog</field>
412 <field eval="'ir.actions.act_window,'+str(action_sprint_backlog_open)" name="value"/>
413 <field eval="True" name="object"/>
420 <record id="dblc_proj" model="ir.actions.act_window">
421 <field name="res_model">scrum.product.backlog</field>
422 <field name="name">View project's backlog</field>
423 <field name="view_type">form</field>
424 <field name="view_mode">tree,form</field>
425 <field name="domain">[('project_id', 'child_of', [active_id])]</field>
427 <record id="ir_scrum_project_backlog" model="ir.values">
428 <field eval=" 'tree_but_open'" name="key2"/>
429 <field eval="'scrum.project'" name="model"/>
430 <field name="name">View project's backlog</field>
431 <field eval="'ir.actions.act_window,'+str(dblc_proj)" name="value"/>
432 <field eval="True" name="object"/>
434 <record id="dblc_proj2" model="ir.actions.act_window">
435 <field name="res_model">project.task</field>
436 <field name="name">View project's tasks</field>
437 <field name="view_type">form</field>
438 <field name="view_mode">tree,form</field>
439 <field name="domain">[('project_id', 'child_of', [active_id])]</field>
441 <record id="ir_scrum_project_task" model="ir.values">
442 <field eval=" 'tree_but_open'" name="key2"/>
443 <field eval="'scrum.project'" name="model"/>
444 <field name="name">View project's tasks</field>
445 <field eval="'ir.actions.act_window,'+str(dblc_proj2)" name="value"/>
446 <field eval="True" name="object"/>
453 <record id="view_task_tree2" model="ir.ui.view">
454 <field name="name">project.task.tree.scrum</field>
455 <field name="model">project.task</field>
456 <field name="type">tree</field>
457 <field name="inherit_id" ref="project.view_task_tree2"/>
458 <field name="arch" type="xml">
459 <field name="user_id" position="after">
460 <field name="sprint_id" invisible="context.get('sprint_invisible',True)"/>
461 <field name="product_backlog_id" invisible="1"/>
466 <record id="view_task_form2" model="ir.ui.view">
467 <field name="name">project.task.scrum.form</field>
468 <field name="model">project.task</field>
469 <field name="type">form</field>
470 <field name="inherit_id" ref="project.view_task_form2"/>
471 <field name="arch" type="xml">
472 <xpath expr="/form/group/field[@name='progress']" position="after">
473 <field domain="[('project_id','=',project_id),]" name="product_backlog_id" select="1"/>
478 <record id="view_task_form3" model="ir.ui.view">
479 <field name="name">project.task.scrum.form2</field>
480 <field name="model">project.task</field>
481 <field name="type">form</field>
482 <field name="inherit_id" ref="project.view_task_form2"/>
483 <field name="arch" type="xml">
484 <xpath expr="/form/notebook/page[@string='Extra Info']/group/field[@name='sequence']" position="after">
485 <field name="sprint_id" />
490 <record id="view_task_search_form2" model="ir.ui.view">
491 <field name="name">project.task.scrum.search</field>
492 <field name="model">project.task</field>
493 <field name="type">search</field>
494 <field name="inherit_id" ref="project.view_task_search_form"/>
495 <field name="arch" type="xml">
496 <field name="project_id" position="after">
497 <field name="sprint_id" widget="selection" context="{'sprint_invisible':False}">
498 <filter icon="terp-project" string="Current" context="{'sprint_invisible':False}" domain="[('sprint_id.state','in',('draft','open'))]" help="Current Sprints"/>
504 <record id="view_task_search_form3" model="ir.ui.view">
505 <field name="name">project.task.scrum.search</field>
506 <field name="model">project.task</field>
507 <field name="type">search</field>
508 <field name="inherit_id" ref="project.view_task_search_form"/>
509 <field name="arch" type="xml">
510 <xpath expr="/search/group[@string='Group By...']/filter[@string='End Date']" position="after">
511 <filter string="Sprint" icon="terp-project" domain="[]" context="{'group_by':'sprint_id'}"/>
512 <filter string="Backlog" icon="terp-project" domain="[]" context="{'group_by':'product_backlog_id'}"/>
513 <separator orientation="vertical"/>
519 domain="[('sprint_id', '=', active_id)]"
520 id="act_scrum_sprint_2_product_backlog"
522 res_model="scrum.product.backlog"
523 src_model="scrum.sprint"
524 view_mode="tree,form"
528 domain="[('sprint_id', '=', active_id)]"
529 id="act_scrum_sprint_2_project_task"
531 res_model="project.task"
532 src_model="scrum.sprint"
533 view_mode="tree,form"