1 <?xml version="1.0" encoding="utf-8"?>
6 icon="terp-project" id="base.menu_main_pm"
7 name="Project" sequence="10"
8 groups="group_project_manager,group_project_user,base.group_system,group_project_finance_user"/>
10 <menuitem id="menu_project_management" name="Project" parent="base.menu_main_pm" sequence="1"/>
11 <menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60" groups="base.group_system,group_project_finance_user"/>
14 <record id="edit_project" model="ir.ui.view">
15 <field name="name">project.project.form</field>
16 <field name="model">project.project</field>
17 <field name="type">form</field>
18 <field name="arch" type="xml">
19 <form string="Project">
20 <group colspan="6" col="6">
21 <field name="name" string="Project Name" select="1"/>
22 <field name="parent_id" string="Parent Project"/>
23 <field name="user_id" string="Project Manager" select="1" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
24 <field name="date_start" string="Start Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
25 <field name="date" string="End Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
26 <field name="progress_rate" widget="progressbar"/>
28 <notebook colspan="4">
29 <page string="Administration">
30 <group col="2" colspan="2" groups="base.group_extended">
31 <separator colspan="2" string="Scheduling"/>
32 <field name="priority"/>
33 <field name="active"/>
35 <group col="2" colspan="2">
36 <separator colspan="2" string="Performance"/>
37 <field name="planned_hours" widget="float_time"/>
38 <field name="effective_hours" widget="float_time" />
40 <group col="2" colspan="2" name="misc">
41 <separator colspan="2" string="Miscelleanous"/>
42 <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
43 <field name="warn_manager"/>
46 <separator colspan="4"/>
47 <group col="9" colspan="8">
48 <field name="state" select="1" readonly="1"/>
49 <button name="set_cancel" string="Cancel" type="object" states="open,pending" icon="gtk-cancel"/>
50 <button name="set_template" string="Set as Template" type="object" states="open" icon="gtk-convert" groups="base.group_extended"/>
51 <button name="set_open" string="Reactivate Project" type="object" states="pending,cancelled,close" icon="gtk-ok"/>
52 <button name="set_pending" string="Pending" type="object" states="open" icon="gtk-media-pause"/>
53 <button name="set_done" string="Done" type="object" states="open,pending" icon="terp-dialog-close"/>
54 <button name="reset_project" string="Reset as Project" type="object" states="template" icon="gtk-convert"/>
56 string="New Project Based on Template"
57 name="duplicate_template" type="object"
58 states="template" icon="gtk-new" context="{'parent_id':parent_id}"/>
61 <page string="Members">
62 <field colspan="4" name="members" nolabel="1">
63 <tree string="Members">
65 <field name="user_email"/>
66 <field name="address_id"/>
70 <page string="Billing" groups="account.group_account_invoice">
71 <field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id)" select="1" string="Customer"/>
72 <field domain="[('partner_id','=',partner_id)]" name="contact_id" string="Invoice Address"/>
73 <field name="warn_customer"/>
75 <group colspan="4" col="4" groups="base.group_extended">
76 <separator colspan="2" string="Mail Header"/>
77 <separator colspan="2" string="Mail Footer"/>
78 <field name="warn_header" nolabel="1" colspan="2"/>
79 <field name="warn_footer" nolabel="1" colspan="2"/>
81 <group col="3" colspan="4" groups="base.group_extended">
82 <separator string="Automatic variables for headers and footer. Use exactly the same notation." colspan="4"/>
83 <label string="Task: %%(name)s"/>
84 <label string="User: %%(user_id)s"/>
85 <label string="ID: %%(task_id)s"/>
86 <label string="Status: %%(state)s"/>
87 <label string="Date Start: %%(date_start)s"/>
88 <label string="Date Stop: %%(date_stop)s"/>
91 <page string="Tasks Stages" groups="base.group_extended">
92 <field nolabel="1" name="type_ids" colspan="4"/>
95 <field colspan="4" name="description" nolabel="1"/>
103 <record id="view_project_project_filter" model="ir.ui.view">
104 <field name="name">project.project.select</field>
105 <field name="model">project.project</field>
106 <field name="type">search</field>
107 <field name="arch" type="xml">
108 <search string="Search Project">
109 <group col='15' colspan='4'>
110 <filter icon="terp-check" string="Current" name="Current" domain="[('state', 'in',('open','pending'))]" help="Open and Pending Projects" default="1"/>
111 <separator orientation="vertical"/>
112 <filter icon="terp-personal+" string="Member" domain="['|',('user_id', '=', uid),('members', '=', uid)]" help="Projects in which I am a member." default="1"/>
113 <separator orientation="vertical"/>
114 <field name="name" string="Project Name"/>
115 <field name="user_id" string="Project Manager" default="1">
116 <filter domain="[('user_id','=',uid)]" help="Projects in which I am a manage" icon="terp-personal"/>
118 <field name="partner_id" string="Partner"/>
121 <group expand="0" string="Group By..." colspan="4" col="20" groups="base.group_extended">
122 <filter string="Manager" name="Manager" icon="terp-personal" domain = "[]" context="{'group_by':'user_id'}"/>
123 <filter string="Partner" name="Partner" icon="terp-partner" domain = "[]" context="{'group_by':'partner_id'}"/>
124 <separator orientation="vertical"/>
125 <filter string="Parent" name="Parent" help="Parent Project" icon="terp-folder-blue" domain = "[]" context="{'group_by':'parent_id'}"/>
131 <record id="view_project" model="ir.ui.view">
132 <field name="name">project.project.tree</field>
133 <field name="model">project.project</field>
134 <field name="type">tree</field>
135 <field name="field_parent">child_ids</field>
136 <field name="arch" type="xml">
137 <tree colors="red:date and (date<current_date) and (state in ('open'));blue:state in ('draft','pending');grey: state in ('close','cancelled')" string="Projects">
138 <field name="sequence" invisible="1"/>
139 <field name="date" invisible="1"/>
140 <field name="name" string="Project Name"/>
141 <field name="user_id" string="Project Manager"/>
142 <field name="partner_id" string="Partner"/>
143 <field name="parent_id" invisible="1"/>
144 <field name="planned_hours" widget="float_time"/>
145 <field name="total_hours" widget="float_time"/>
146 <field name="effective_hours" widget="float_time"/>
147 <field name="progress_rate" widget="progressbar"/>
148 <field name="state"/>
153 <record id="open_view_project_all" model="ir.actions.act_window">
154 <field name="name">Projects</field>
155 <field name="res_model">project.project</field>
156 <field name="view_type">form</field>
157 <field name="domain">[]</field>
158 <field name="view_id" ref="view_project"/>
159 <field name="search_view_id" ref="view_project_project_filter"/>
160 <field name="context">{'search_default_Current':1}</field>
161 <field name="help">Consult and define your projects here. A project contains a set of related activities that will be performed by your company. Any project can be put into a hierarchy, as a child of a Parent Project. This allows you to design large project structure very useful for work organization.</field>
163 <menuitem action="open_view_project_all" id="menu_open_view_project_all" parent="menu_project_management" sequence="1"/>
165 <record id="open_view_template_project" model="ir.actions.act_window">
166 <field name="name">Templates of Projects</field>
167 <field name="res_model">project.project</field>
168 <field name="view_type">form</field>
169 <field name="domain">[('state','=','template')]</field>
170 <field name="view_id" ref="view_project"/>
173 <record id="view_task_work_form" model="ir.ui.view">
174 <field name="name">project.task.work.form</field>
175 <field name="model">project.task.work</field>
176 <field name="type">form</field>
177 <field name="arch" type="xml">
178 <form string="Task Work">
179 <field colspan="4" name="name" select="1"/>
180 <field name="hours" select="1" widget="float_time"/>
181 <field name="date" select="1"/>
182 <field name="user_id" select="1"/>
183 <field name="company_id" groups="base.group_multi_company" widget="selection"/>
188 <record id="view_task_work_tree" model="ir.ui.view">
189 <field name="name">project.task.work.tree</field>
190 <field name="model">project.task.work</field>
191 <field name="type">tree</field>
192 <field name="arch" type="xml">
193 <tree editable="top" string="Task Work">
196 <field name="hours" widget="float_time"/>
197 <field name="user_id"/>
203 <record id="view_task_form2" model="ir.ui.view">
204 <field name="name">project.task.form</field>
205 <field name="model">project.task</field>
206 <field name="type">form</field>
207 <field eval="2" name="priority"/>
208 <field name="arch" type="xml">
209 <form string="Task edition">
210 <group colspan="6" col="6">
211 <field name="name" select="1"/>
212 <field name="project_id" select="1" domain="[('user_id','=',uid)]"/>
213 <field name="total_hours" widget="float_time"/>
214 <field name="date_deadline" attrs="{'readonly':[('state','in',['done', 'cancelled'])]}"/>
215 <field name="user_id" select="1" attrs="{'readonly':[('state','in',['done', 'cancelled'])]}"/>
216 <field name="progress" widget="progressbar"/>
218 <notebook colspan="4">
219 <page string="Information">
220 <group col="2" colspan="2">
224 attrs="{'readonly':[('state','!=','draft')]}"
225 on_change="onchange_planned(planned_hours, effective_hours)"/>
226 <field name="effective_hours" widget="float_time"/>
228 <group col="3" colspan="2">
229 <field name="remaining_hours" widget="float_time" attrs="{'readonly':[('state','!=','draft')]}" colspan="2"/>
230 <button name="%(action_project_task_reevaluate)d" string="Reevaluate" type="action" colspan="1" target="new" states="open,pending" icon="gtk-edit"/>
232 <field name="delay_hours" widget="float_time"/>
235 <field colspan="4" name="description" nolabel="1" attrs="{'readonly':[('state','=','done')]}" widget="text_wiki"/>
236 <field colspan="4" name="work_ids" nolabel="1" attrs="{'readonly':[('state','in',['draft','done'])]}">
237 <tree string="Task Work" editable="top">
238 <field name="name" />
239 <field name="hours" widget="float_time" />
240 <field name="user_id" />
241 <field name="date" />
245 <group col="11" colspan="4">
246 <field name="state" select="1"/>
247 <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel"/>
248 <button name="do_draft" states="open" string="Draft" type="object" icon="gtk-indent"/>
249 <button name="do_open" states="pending,draft" string="Start Task" type="object" icon="gtk-execute"/>
250 <button name="%(action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" icon="gtk-convert" context="{'button_reactivate':True}" />
251 <button name="do_pending" states="open" string="Pending" type="object" icon="gtk-media-pause"/>
252 <button groups="base.group_extended" name="%(action_project_task_delegate)d" states="pending,open" string="Delegate" type="action" icon="gtk-sort-descending"/>
253 <button name="action_close" states="pending,open" string="Done" type="object" icon="terp-dialog-close"/>
256 <page groups="base.group_extended" string="Delegations">
257 <separator string="Parent Tasks" colspan="4"/>
258 <field colspan="4" height="150" name="parent_ids" nolabel="1"/>
259 <separator string="Delegated tasks" colspan="4"/>
260 <field colspan="4" height="150" name="child_ids" nolabel="1">
261 <tree string="Delegated tasks">
263 <field name="user_id"/>
264 <field name="state"/>
265 <field name="effective_hours" widget="float_time"/>
266 <field name="progress" widget="progressbar"/>
267 <field name="remaining_hours" widget="float_time"/>
268 <field name="date_deadline"/>
273 <page groups="base.group_extended" string="Extra Info" attrs="{'readonly':[('state','=','done')]}">
274 <group colspan="2" col="2">
275 <separator string="Planning" colspan="2"/>
276 <field name="priority"/>
277 <field name="sequence"/>
279 <group colspan="2" col="2">
280 <separator string="Dates" colspan="2"/>
281 <field name="date_start"/>
282 <field name="date_end"/>
283 <field name="create_date"/>
285 <separator string="Miscelleanous" colspan="4"/>
286 <field name="partner_id"/>
287 <field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
288 <group col="4" colspan="2">
289 <field name="type_id" widget="selection" readonly="1"/>
290 <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/>
291 <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/>
293 <separator colspan="4" string="Notes"/>
294 <field colspan="4" name="notes" nolabel="1"/>
301 <record id="view_task_tree2" model="ir.ui.view">
302 <field name="name">project.task.tree</field>
303 <field name="model">project.task</field>
304 <field name="type">tree</field>
305 <field eval="2" name="priority"/>
306 <field name="arch" type="xml">
307 <tree colors="grey:state in ('cancelled','done');blue:remaining_hours<0 and state in ('pending');red:date_deadline and (date_deadline<current_date) and (state in ('draft','open'))" string="Tasks">
309 <field name="sequence" invisible="not context.get('seq_visible', False)"/>
311 <field name="project_id" icon="gtk-indent" domain="['|',('user_id','=',uid),('members','=',uid)]" invisible="context.get('user_invisible', False)"/>
312 <field name="user_id" invisible="context.get('user_invisible', False)"/>
313 <field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
314 <field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)"/>
315 <field name="planned_hours"/>
316 <field name="delay_hours"/>
317 <field name="date_deadline" invisible="context.get('set_visible',False)"/>
318 <field name="type_id" groups="base.group_extended" invisible="context.get('set_visible',False)"/>
319 <button name="next_type" invisible="context.get('set_visible',False)"
320 states="draft,open,pending"
321 string="Change Stage"
323 icon="gtk-go-forward"
324 groups="base.group_extended"
326 <field name="date_start" invisible="1"/>
327 <field name="date_end" invisible="1"/>
328 <field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/>
329 <field name="state" invisible="context.get('set_visible',False)"/>
330 <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object" icon="gtk-cancel" help="For cancelling the task"/>
331 <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)"/>
332 <button groups="base.group_extended" name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="gtk-sort-descending" help="For changing to delegate state"/>
333 <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/>
338 <record id="view_task_calendar" model="ir.ui.view">
339 <field name="name">project.task.calendar</field>
340 <field name="model">project.task</field>
341 <field name="type">calendar</field>
342 <field eval="2" name="priority"/>
343 <field name="arch" type="xml">
344 <calendar color="user_id" date_delay="planned_hours" date_start="date_start" string="Tasks">
346 <field name="project_id"/>
351 <record id="view_task_gantt" model="ir.ui.view">
352 <field name="name">project.task.gantt</field>
353 <field name="model">project.task</field>
354 <field name="type">gantt</field>
355 <field eval="2" name="priority"/>
356 <field name="arch" type="xml">
357 <gantt color="user_id" date_delay="planned_hours" date_start="date_start" string="Tasks">
358 <level object="project.project" link="project_id" domain="[]">
365 <record id="view_project_task_graph" model="ir.ui.view">
366 <field name="name">project.task.graph</field>
367 <field name="model">project.task</field>
368 <field name="type">graph</field>
369 <field name="arch" type="xml">
370 <graph string="Project Tasks" type="bar">
371 <field name="project_id"/>
372 <field name="planned_hours" operator="+"/>
373 <field name="delay_hours" operator="+"/>
378 <record id="view_task_search_form" model="ir.ui.view">
379 <field name="name">project.task.search.form</field>
380 <field name="model">project.task</field>
381 <field name="type">search</field>
382 <field name="arch" type="xml">
383 <search string="Task Edition">
384 <group col="20" colspan="4">
385 <filter string="Current" domain="[('state','in',('open','draft'))]" name="current" help="Draft and In Progress tasks" icon="terp-check" default="1"/>
386 <filter string="In Progress" domain="[('state','=','open')]" help="In Progress Tasks" icon="terp-camera_test"/>
387 <filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
388 <separator orientation="vertical"/>
390 string="Edit" context="{'set_editable':True,'seq_visible': True}"
392 groups="base.group_extended"/>
393 <separator orientation="vertical"/>
394 <filter string="Deadlines" domain="[('date_deadline','<>',False)]" help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/>
395 <separator orientation="vertical"/>
396 <field name="name" select="1"/>
397 <field name="type_id" widget="selection"/>
398 <separator orientation="vertical"/>
399 <field name="project_id" select="1">
400 <filter domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-personal"/>
402 <field name="user_id" select="1">
403 <filter domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-" separator="1"/>
407 <group expand="0" string="Group By..." colspan="4" col="20">
408 <filter string="Users" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
409 <separator orientation="vertical"/>
410 <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
411 <separator orientation="vertical"/>
412 <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'type_id'}"/>
413 <filter string="State" name="group_state" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
414 <separator orientation="vertical"/>
415 <filter string="Deadline" icon="terp-gnome-cpu-frequency-applet+" domain="[]" context="{'group_by':'date_deadline'}"/>
416 <separator orientation="vertical"/>
417 <filter string="Start Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}"/>
418 <filter string="End Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_end'}"/>
424 <record id="action_view_task" model="ir.actions.act_window">
425 <field name="name">Tasks</field>
426 <field name="res_model">project.task</field>
427 <field name="view_type">form</field>
428 <field name="view_mode">tree,form,calendar,gantt,graph</field>
429 <field eval="False" name="filter"/>
430 <field name="view_id" ref="view_task_tree2"/>
431 <field name="context">{"search_default_project_id":project_id, "search_default_user_id":uid, "search_default_current": 1}</field>
432 <field name="search_view_id" ref="view_task_search_form"/>
433 <field name="help">In OpenERP, a project is made of a set of activities (or tasks) for completion. A list view allows the manager to quickly check for task status and make it evolve, delegate task, etc. A search tool allows a multi-criteria sort of activities.</field>
435 <menuitem action="action_view_task" id="menu_action_view_task" parent="project.menu_project_management" sequence="3"/>
437 <record id="action_view_task_overpassed_draft" model="ir.actions.act_window">
438 <field name="name">Overpassed Tasks</field>
439 <field name="res_model">project.task</field>
440 <field name="view_type">form</field>
441 <field name="view_mode">tree,form,calendar,graph</field>
442 <field name="domain">[('date_deadline','<',time.strftime('%Y-%m-%d')),('state','in',('draft','pending','open'))]</field>
443 <field name="filter" eval="True"/>
444 <field name="search_view_id" ref="view_task_search_form"/>
447 <!-- Opening task when double clicking on project -->
448 <record id="dblc_proj" model="ir.actions.act_window">
449 <field name="res_model">project.task</field>
450 <field name="name">Project's tasks</field>
451 <field name="view_type">form</field>
452 <field name="view_mode">tree,form,calendar,graph,gantt</field>
453 <field name="domain">[('project_id', 'child_of', [active_id])]</field>
454 <field name="context">{'project_id':active_id, 'active_test':False}</field>
457 <record id="ir_project_task_open" model="ir.values">
458 <field eval=" 'tree_but_open'" name="key2"/>
459 <field eval="'project.project'" name="model"/>
460 <field name="name">View project's tasks</field>
461 <field eval="'ir.actions.act_window,'+str(dblc_proj)" name="value"/>
462 <field eval="True" name="object"/>
466 <record id="task_type_edit" model="ir.ui.view">
467 <field name="name">project.task.type.form</field>
468 <field name="model">project.task.type</field>
469 <field name="type">form</field>
470 <field name="arch" type="xml">
471 <form string="Task Stage">
472 <field name="name" select="1"/>
473 <field name="sequence"/>
474 <separator string="Description" colspan="4"/>
475 <field colspan="4" name="description" nolabel="1"/>
480 <record id="task_type_tree" model="ir.ui.view">
481 <field name="name">project.task.type.tree</field>
482 <field name="model">project.task.type</field>
483 <field name="type">tree</field>
484 <field name="arch" type="xml">
485 <tree string="Task Stage">
486 <field name="sequence"/>
492 <record id="open_task_type_form" model="ir.actions.act_window">
493 <field name="name">Stages</field>
494 <field name="res_model">project.task.type</field>
495 <field name="view_type">form</field>
496 <field name="view_id" ref="task_type_tree"/>
499 <menuitem id="menu_tasks_config" name="Tasks" parent="project.menu_definitions" sequence="1" groups="base.group_system,group_project_finance_user"/>
500 <menuitem action="open_task_type_form" id="menu_task_types_view" parent="menu_tasks_config" sequence="1"/>
502 <act_window context="{'search_default_user_id': [active_id]}" id="act_res_users_2_project_project" name="User's projects" res_model="project.project" src_model="res.users" view_mode="tree,form" view_type="form"/>
505 domain="[('project_id', '=', active_id)]"
506 id="act_project_project_2_project_task_all"
508 res_model="project.task"
509 src_model="project.project"
510 view_mode="tree,form,calendar,graph"
513 <record id="task_company" model="ir.ui.view">
514 <field name="name">res.company.task.config</field>
515 <field name="model">res.company</field>
516 <field name="type">form</field>
517 <field name="inherit_id" ref="base.view_company_form"/>
518 <field name="arch" type="xml">
519 <page string="Configuration" position="inside">
520 <separator string="Project Management" colspan="4"/>
521 <field name="project_time_mode_id"/>
528 <record id="view_project_users_form_simple" model="ir.ui.view">
529 <field name="name">res.users.project.form1</field>
530 <field name="model">res.users</field>
531 <field name="type">form</field>
532 <field name="inherit_id" ref="base.view_users_form"/>
533 <field eval="18" name="priority"/>
534 <field name="arch" type="xml">
535 <field name="password" position="after">
536 <field name="context_project_id"/>
541 <record model="ir.ui.view" id="view_users_form_project_modif_inherited1">
542 <field name="name">view.users.form.project.modif.inherited1</field>
543 <field name="model">res.users</field>
544 <field name="inherit_id" ref="base.view_users_form_simple_modif" />
545 <field name="type">form</field>
546 <field eval="18" name="priority"/>
547 <field name="arch" type="xml">
548 <page string="Current Activity" position="inside">
549 <field name="context_project_id" completion="1" context="{'user_prefence':True}" widget="selection" readonly="0"/>
553 <act_window context="{'search_default_user_id': [active_id]}" domain="[('state', '<>', 'cancelled'),('state', '<>', 'done')]" id="act_res_users_2_project_task_opened" name="Assigned tasks" res_model="project.task" src_model="res.users" view_mode="tree,form,gantt,calendar,graph" view_type="form"/>
554 <act_window context="{'search_default_user_id': [active_id]}" domain="[('date', '>=', time.strftime('%Y-%m-01'))]" id="act_res_users_2_project_task_work_month" name="Month works" res_model="project.task.work" src_model="res.users" view_mode="tree,form" view_type="form"/>