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="effective_hours" sum="Effective hours" widget="float_time"/>
44 <field name="planned_hours" sum="Planned hours" widget="float_time"/>
45 <field name="expected_hours" sum="Expected hours" widget="float_time"/>
47 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
48 <button type="action" string="Convert to Task" name="%(action_scrum_backlog_to_task)d" states="pending" icon="gtk-execute"/>
49 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
50 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
51 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
52 <button type="object" string="Cancel" name="button_cancel" states="open,pending" icon="gtk-convert"/>
57 <record id="view_scrum_product_backlog_form" model="ir.ui.view">
58 <field name="name">scrum.product.backlog.form</field>
59 <field name="model">scrum.product.backlog</field>
60 <field name="type">form</field>
61 <field name="arch" type="xml">
62 <form string="Product backlog">
63 <group colspan="4" col="6">
64 <field name="name" select="1"/>
65 <field name="project_id" select="1"/>
66 <field domain="[('project_id','=',project_id)]" name="sprint_id" select="1"/>
67 <field name="user_id" select="1"/>
68 <field name="sequence"/>
70 <field name="active" select="1"/>
71 <group colspan="6" col="8">
72 <field name="effective_hours" widget="float_time"/>
73 <field name="planned_hours" widget="float_time"/>
74 <field name="expected_hours" widget="float_time"/>
75 <field name="progress" widget="progressbar"/>
78 <notebook colspan="4">
79 <page string="Feature Description">
80 <field colspan="4" name="note" nolabel="1"/>
83 <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}"/>
86 <group col="8" colspan="4">
87 <field name="state" select="1" readonly="1"/>
88 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
89 <button type="action" string="Convert to Task" name="%(action_scrum_backlog_to_task)d" states="pending" icon="gtk-execute"/>
90 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
91 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
92 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
93 <button type="object" string="Cancel" name="button_cancel" states="open,pending" icon="gtk-cancel"/>
99 <record model="ir.ui.view" id="view_scrum_product_backlog_search">
100 <field name="name">scrum.product.backlog.search</field>
101 <field name="model">scrum.product.backlog</field>
102 <field name="type">search</field>
103 <field name="arch" type="xml">
104 <search string="Product Backlogs">
105 <group col="10" colspan="4">
109 domain="['|','&',('sprint_id.date_start','<=',time.strftime('%%Y-%%m-%%d')), ('sprint_id.date_stop','>=',time.strftime('%%Y-%%m-%%d')), ('state','in',['draft','open'])]"
110 help="Current Backlogs"/>
111 <separator orientation="vertical"/>
112 <filter icon="terp-project" string="Draft" domain="[('state','=','draft')]" help="Draft Backlogs"/>
113 <filter icon="terp-project" string="Open" domain="[('state','=','open')]" help="Open Backlogs"/>
114 <separator orientation="vertical"/>
116 <field name="project_id" widget="selection"/>
117 <field name="sprint_id" widget="selection">
118 <filter icon="terp-project"
120 domain="[('sprint_id.state','=','open')]"
121 help="Backlogs Assigned To Current Sprints"/>
122 <filter icon="terp-project"
124 domain="[('sprint_id','=',False)]"
125 help="Backlogs Not Assigned To Sprints."/>
127 <field name="user_id" widget="selection">
131 domain="[('user_id','=',uid)]"
136 <group expand="1" string="Group By..." colspan="4" col="20">
137 <filter string="Project" icon="terp-project" domain="[]" context="{'group_by':'project_id'}"/>
138 <filter string="Sprint" icon="terp-project" domain="[]" context="{'group_by':'sprint_id'}"/>
139 <filter string="Responsible" icon="terp-project" domain="[]" context="{'group_by':'user_id'}"/>
140 <filter string="State" icon="terp-project" domain="[]" context="{'group_by':'state'}"/>
147 <record id="action_product_backlog_form" model="ir.actions.act_window">
148 <field name="name">Product Backlogs</field>
149 <field name="res_model">scrum.product.backlog</field>
150 <field name="view_type">form</field>
151 <field name="search_view_id" ref="view_scrum_product_backlog_search"/>
154 action="action_product_backlog_form"
155 id="menu_action_product_backlog_form"
157 parent="menu_scrum"/>
163 <record id="view_scrum_sprint_tree" model="ir.ui.view">
164 <field name="name">scrum.sprint.tree</field>
165 <field name="model">scrum.sprint</field>
166 <field name="type">tree</field>
167 <field name="arch" type="xml">
168 <tree string="Scrum Sprint">
170 <field name="project_id"/>
171 <field name="scrum_master_id"/>
172 <field name="product_owner_id" invisible="1"/>
173 <field name="date_start"/>
174 <field name="progress" widget="progressbar"/>
175 <field name="effective_hours" sum="Effective hours" widget="float_time"/>
176 <field name="planned_hours" sum="Planned hours" widget="float_time"/>
177 <field name="expected_hours" sum="Expected hours" widget="float_time"/>
178 <field name="state"/>
179 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
180 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
181 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
182 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
186 <record id="view_scrum_sprint_form" model="ir.ui.view">
187 <field name="name">scrum.sprint.form</field>
188 <field name="model">scrum.sprint</field>
189 <field name="type">form</field>
190 <field name="arch" type="xml">
191 <form string="Scrum Sprint">
192 <field name="name" select="1"/>
193 <field name="project_id" on_change="onchange_project_id(project_id)"/>
194 <notebook colspan="4">
195 <page string="Sprint Info">
196 <group colspan="2" col="2">
197 <separator string="Owners" colspan="2"/>
198 <field name="product_owner_id"/>
199 <field name="scrum_master_id"/>
201 <group colspan="2" col="2">
202 <separator string="Dates" colspan="2"/>
203 <field name="date_start" select="1"/>
204 <field name="date_stop"/>
206 <group colspan="2" col="2">
207 <separator string="Planning" colspan="2"/>
208 <field name="planned_hours" widget="float_time"/>
209 <field name="expected_hours" widget="float_time"/>
210 <field name="effective_hours" widget="float_time"/>
211 <field name="progress" widget="progressbar"/>
214 <page string="Daily Meetings">
215 <field colspan="4" name="meeting_ids" nolabel="1" widget="one2many_list"/>
217 <page string="Review">
218 <field colspan="4" name="review" nolabel="1"/>
220 <page string="Retrospective">
221 <field colspan="4" name="retrospective" nolabel="1"/>
224 <group col="6" colspan="4">
225 <field name="state" readonly="1"/>
226 <button type="object" string="Open" name="button_open" states="draft,pending" icon="gtk-jump-to"/>
227 <button type="object" string="Pending" name="button_pending" states="open" icon="gtk-media-pause"/>
228 <button type="object" string="Close" name="button_close" states="open,pending" icon="gtk-jump-to"/>
229 <button type="object" string="Set to Draft" name="button_draft" states="cancel,done" icon="gtk-convert"/>
235 <record model="ir.ui.view" id="view_scrum_sprint_search">
236 <field name="name">scrum.sprint.search</field>
237 <field name="model">scrum.sprint</field>
238 <field name="type">search</field>
239 <field name="arch" type="xml">
240 <search string="Sprints">
241 <group col="10" colspan="4">
242 <filter default="1" icon="terp-project" string="Current" domain="[('state','in',('draft','open'))]" help="Draft and open Sprints"/>
243 <filter icon="terp-project" string="Draft" domain="[('state','=','draft')]" help="Draft Sprints"/>
244 <filter icon="terp-project" string="Open" domain="[('state','=','open')]" help="Open Sprints"/>
245 <separator orientation="vertical"/>
247 <field name="project_id" widget="selection"/>
248 <field name="scrum_master_id" widget="selection">
249 <filter icon="gtk-execute" domain="[('scrum_master_id','=',uid)]"
253 <field name="date_start"/>
256 <group expand="1" string="Group By..." colspan="4" col="20">
257 <filter string="Project" icon="terp-project" domain="[]" context="{'group_by':'project_id'}"/>
258 <filter string="Masters" icon="terp-project" domain="[]" context="{'group_by':'scrum_master_id'}"/>
259 <filter string="Product owner" icon="terp-project" domain="[]" context="{'group_by':'product_owner_id'}"/>
260 <filter string="State" icon="terp-project" domain="[]" context="{'group_by':'state'}"/>
261 <separator orientation="vertical"/>
262 <filter string="Start Date" icon="terp-project" domain="[]" context="{'group_by':'date_start'}"/>
268 <record id="action_sprint_all_tree" model="ir.actions.act_window">
269 <field name="name">Sprints</field>
270 <field name="res_model">scrum.sprint</field>
271 <field name="view_type">form</field>
272 <field name="view_mode">tree,form</field>
273 <field name="view_id" ref="view_scrum_sprint_tree"/>
274 <field name="search_view_id" ref="view_scrum_sprint_search"/>
278 action="action_sprint_all_tree" id="menu_action_sprint_all_tree" parent="menu_scrum"/>
284 <record id="view_scrum_meeting_tree" model="ir.ui.view">
285 <field name="name">scrum.meeting.tree</field>
286 <field name="model">scrum.meeting</field>
287 <field name="type">tree</field>
288 <field name="arch" type="xml">
289 <tree string="Scrum Sprint">
292 <field name="sprint_id"/>
296 <record id="view_scrum_meeting_form" model="ir.ui.view">
297 <field name="name">Scrum Meeting</field>
298 <field name="model">scrum.meeting</field>
299 <field name="type">form</field>
300 <field name="arch" type="xml">
301 <form string="Scrum Sprint">
302 <group colspan="4" col="6">
303 <field name="name" select="1"/>
305 <field name="sprint_id"/>
307 <notebook colspan="4">
308 <page string="Scrum Meeting">
309 <separator colspan="4" string="What have you accomplished since yesterday ?"/>
310 <field colspan="4" name="question_yesterday" nolabel="1"/>
311 <separator colspan="4" string="What are you working on today ?"/>
312 <field colspan="4" name="question_today" nolabel="1"/>
313 <separator colspan="4" string="Is there anything blocking you ?"/>
314 <field colspan="4" name="question_blocks" nolabel="1"/>
316 <page string="Optional Info">
317 <separator colspan="4" string="Are your Sprint Backlog estimate accurate ?"/>
318 <field colspan="4" name="question_backlog" nolabel="1"/>
320 <page string="Links">
321 <separator colspan="4" string="Tasks"/>
322 <field colspan="4" name="task_ids" nolabel="1" domain="[('sprint_id','=',sprint_id)]"/>
329 <record id="view_scrum_meeting_search" model="ir.ui.view">
330 <field name="name">scrum.meeting.search</field>
331 <field name="model">scrum.meeting</field>
332 <field name="type">search</field>
333 <field name="arch" type="xml">
334 <search string="Scrum Sprint">
335 <group col="10" colspan="4">
336 <filter name="scrum_daily" icon="terp-project" string="Daily" domain="[('date','=',time.strftime('%%Y%%m%%d'))]" help="Daily Meetings"/>
337 <separator orientation="vertical"/>
339 <field name="sprint_id">
340 <filter icon="terp-project" string="Current" domain="[('sprint_id.state','in',('draft','open'))]" help="Current Sprints" default="1"/>
342 <field name="project_id" widget="selection"/>
346 <group expand="1" string="Group By..." colspan="4" col="20">
347 <filter string="Sprint" icon="terp-project" domain="[]" context="{'group_by':'sprint_id'}"/>
348 <filter string="Date" icon="terp-project" domain="[]" context="{'group_by':'date'}"/>
354 <record id="action_meeting_form" model="ir.actions.act_window">
355 <field name="name">Scrum Meetings</field>
356 <field name="res_model">scrum.meeting</field>
357 <field name="view_type">form</field>
358 <field name="view_mode">tree,form</field>
359 <field name="context">{'search_default_scrum_daily':1}</field>
360 <field name="search_view_id" ref="view_scrum_meeting_search"/>
362 <menuitem sequence="30"
363 action="action_meeting_form" id="menu_action_meeting_form" parent="menu_scrum"/>
369 <record id="action_sprint_task_open" model="ir.actions.act_window">
370 <field name="res_model">project.task</field>
371 <field name="name">View sprint Tasks</field>
372 <field name="view_type">form</field>
373 <field name="view_mode">tree,form</field>
374 <field name="domain">[('product_backlog_id', '=', active_id)]</field>
376 <record id="ir_scrum_sprint_open_task" model="ir.values">
377 <field eval=" 'tree_but_open'" name="key2"/>
378 <field eval="'scrum.sprint'" name="model"/>
379 <field name="name">View sprint tasks</field>
380 <field eval="'ir.actions.act_window,'+str(action_sprint_task_open)" name="value"/>
381 <field eval="True" name="object"/>
384 <record id="action_sprint_backlog_open" model="ir.actions.act_window">
385 <field name="res_model">scrum.product.backlog</field>
386 <field name="name">View sprint backlog</field>
387 <field name="view_type">form</field>
388 <field name="view_mode">tree,form</field>
389 <field name="domain">[('sprint_id', '=', active_id)]</field>
391 <record id="ir_scrum_sprint_open_sprint" model="ir.values">
392 <field eval=" 'tree_but_open'" name="key2"/>
393 <field eval="'scrum.sprint'" name="model"/>
394 <field name="name">View sprint backlog</field>
395 <field eval="'ir.actions.act_window,'+str(action_sprint_backlog_open)" name="value"/>
396 <field eval="True" name="object"/>
403 <record id="dblc_proj" model="ir.actions.act_window">
404 <field name="res_model">scrum.product.backlog</field>
405 <field name="name">View project's backlog</field>
406 <field name="view_type">form</field>
407 <field name="view_mode">tree,form</field>
408 <field name="domain">[('project_id', 'child_of', [active_id])]</field>
410 <record id="ir_scrum_project_backlog" model="ir.values">
411 <field eval=" 'tree_but_open'" name="key2"/>
412 <field eval="'scrum.project'" name="model"/>
413 <field name="name">View project's backlog</field>
414 <field eval="'ir.actions.act_window,'+str(dblc_proj)" name="value"/>
415 <field eval="True" name="object"/>
417 <record id="dblc_proj2" model="ir.actions.act_window">
418 <field name="res_model">project.task</field>
419 <field name="name">View project's tasks</field>
420 <field name="view_type">form</field>
421 <field name="view_mode">tree,form</field>
422 <field name="domain">[('project_id', 'child_of', [active_id])]</field>
424 <record id="ir_scrum_project_task" model="ir.values">
425 <field eval=" 'tree_but_open'" name="key2"/>
426 <field eval="'scrum.project'" name="model"/>
427 <field name="name">View project's tasks</field>
428 <field eval="'ir.actions.act_window,'+str(dblc_proj2)" name="value"/>
429 <field eval="True" name="object"/>
436 <record id="view_task_tree2" model="ir.ui.view">
437 <field name="name">project.task.tree.scrum</field>
438 <field name="model">project.task</field>
439 <field name="type">tree</field>
440 <field name="inherit_id" ref="project.view_task_tree2"/>
441 <field name="arch" type="xml">
442 <field name="user_id" position="after">
443 <field name="sprint_id" invisible="context.get('sprint_invisible',True)"/>
444 <field name="product_backlog_id" invisible="1"/>
449 <record id="view_task_form2" model="ir.ui.view">
450 <field name="name">project.task.scrum.form</field>
451 <field name="model">project.task</field>
452 <field name="type">form</field>
453 <field name="inherit_id" ref="project.view_task_form2"/>
454 <field name="arch" type="xml">
455 <xpath expr="/form/group/field[@name='progress']" position="after">
456 <field domain="[('project_id','=',project_id),]" name="product_backlog_id" select="1"/>
461 <record id="view_task_form3" model="ir.ui.view">
462 <field name="name">project.task.scrum.form2</field>
463 <field name="model">project.task</field>
464 <field name="type">form</field>
465 <field name="inherit_id" ref="project.view_task_form2"/>
466 <field name="arch" type="xml">
467 <xpath expr="/form/notebook/page[@string='Extra Info']/group/field[@name='sequence']" position="after">
468 <field name="sprint_id" />
473 <record id="view_task_search_form2" model="ir.ui.view">
474 <field name="name">project.task.scrum.search</field>
475 <field name="model">project.task</field>
476 <field name="type">search</field>
477 <field name="inherit_id" ref="project.view_task_search_form"/>
478 <field name="arch" type="xml">
479 <field name="project_id" position="after">
480 <field name="sprint_id" widget="selection" context="{'sprint_invisible':False}">
481 <filter icon="terp-project" string="Current" context="{'sprint_invisible':False}" domain="[('sprint_id.state','in',('draft','open'))]" help="Current Sprints"/>
487 <record id="view_task_search_form3" model="ir.ui.view">
488 <field name="name">project.task.scrum.search</field>
489 <field name="model">project.task</field>
490 <field name="type">search</field>
491 <field name="inherit_id" ref="project.view_task_search_form"/>
492 <field name="arch" type="xml">
493 <xpath expr="/search/group[@string='Group By...']/filter[@string='End Date']" position="after">
494 <filter string="Sprint" icon="terp-project" domain="[]" context="{'group_by':'sprint_id'}"/>
495 <filter string="Backlog" icon="terp-project" domain="[]" context="{'group_by':'product_backlog_id'}"/>
496 <separator orientation="vertical"/>
502 domain="[('sprint_id', '=', active_id)]"
503 id="act_scrum_sprint_2_product_backlog"
505 res_model="scrum.product.backlog"
506 src_model="scrum.sprint"
507 view_mode="tree,form"
511 domain="[('sprint_id', '=', active_id)]"
512 id="act_scrum_sprint_2_project_task"
514 res_model="project.task"
515 src_model="scrum.sprint"
516 view_mode="tree,form"