<menuitem id="menu_project_management" name="Project" parent="base.menu_main_pm" sequence="1"/>
<menuitem id="menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
+
+ <act_window
+ context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
+ id="act_project_project_2_project_task_all"
+ name="Tasks"
+ res_model="project.task"
+ src_model="project.project"
+ view_mode="kanban,tree,form,calendar,graph"
+ view_type="form"/>
<!-- Project -->
<record id="edit_project" model="ir.ui.view">
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Project" layout="manual">
- <div class="oe_form_topbar">
+ <header>
<button name="set_done" string="Done" type="object" states="open,pending"/>
<button name="set_open" string="Re-open project" type="object" states="pending,cancelled,close"/>
<button name="set_pending" string="Pending" type="object" states="open"/>
<button string="New Project Based on Template" name="duplicate_template" type="object" states="template" context="{'parent_id':parent_id}"/>
<button name="reset_project" string="Reset as Project" type="object" states="template"/>
<button name="set_cancel" string="Cancel" type="object" states="open,pending"/>
- <div class="oe_right">
- <field name="state" nolabel="1" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' select="1" readonly="1"/>
- </div>
- <div class="oe_clear"/>
- </div>
+ <field name="state" widget="statusbar" statusbar_visible="open,close" statusbar_colors='{"pending":"blue"}' readonly="1"/>
+ </header>
<sheet string="Project" layout="auto">
<group col="4" colspan="4">
<group col="2" colspan="2" class="oe_form_group_label_border">
<field name="user_id" string="Project Manager" select="1" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
<field name="analytic_account_id" invisible="1" required="0"/>
<field name="parent_id" invisible="1" string="Parent" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
+ <field name="privacy_visibility"/>
<!--<field name="date_start" string="Start Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>-->
<!--<field name="date" string="End Date" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>-->
<!--<field name="progress_rate" widget="progressbar"/>-->
</group>
<group col="2" colspan="2" class="oe_form_group_label_border">
- <table>
- <tr name="use_tasks">
- <th width="140px">Tasks Management</th>
+ <table border="0">
+ <tr name="use_tasks_row">
+ <th style="border-right:1px solid #DDD;" width="140px">Tasks Management</th>
<td><field name="use_tasks" nolabel="1"/></td>
- <td style="text-align:right;" width="110px"><button class="oe_btn_width" name="%(act_project_project_2_project_task_all)d" string="Tasks" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/></td>
+ <td style="text-align:right;" width="110px"><button icon="terp-stock_align_left_24" class="oe_btn_width" name="%(act_project_project_2_project_task_all)d" string="Tasks" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/></td>
+ </tr>
+ <tr name="use_attachment_row">
+ <th/>
+ <td/>
+ <td style="text-align:right;" width="110px"><button icon="gtk-dnd-multiple" class="oe_btn_width" name="%(base.action_attachment)d" string="Documents" type="action" /></td>
</tr>
</table>
</group>
<field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
</group>
</page>
- <page string="Team">
- <field colspan="4" name="members" nolabel="1">
+ <page name="team" string="Team" attrs="{'invisible':[('use_tasks','=', 0)]}">
+ <field colspan="4" name="members" nolabel="1" help="Project's members are users who can have an access to the tasks related to this project.">
<tree string="Members">
<field name="name"/>
<field name="user_email"/>
<page string="Tasks Stages">
<field nolabel="1" name="type_ids" colspan="4"/>
</page>
- <page string="Notes">
- <field colspan="4" name="description" nolabel="1"/>
- </page>
</notebook>
<newline/>
</sheet>
<div class="oe_form_bottom">
- <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/>
+ <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/>
</div>
</form>
</field>
</tree>
</field>
</record>
-
+
<act_window
- context="{'search_default_project_id': [active_id], 'default_project_id': active_id}"
+ context="{'search_default_project_id': active_id, 'default_project_id': active_id}"
id="act_project_project_2_project_task_all"
name="Tasks"
res_model="project.task"
<field name="task_count"/>
<templates>
<t t-name="kanban-box">
- <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_project oe_kanban_auto_height">
+ <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_project oe_kanban_auto_height oe_kanban_global_click">
<a class="oe_kanban_menuaction oe_i">B</a>
<ul class="oe_kanban_menu">
<li><a type="edit">Edit...</a></li>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<form string="Project" layout="manual">
- <div class="oe_form_topbar">
- <button name="action_close" states="pending,open" string="Done" type="object"/>
- <button name="do_open" states="pending,draft" string="Start Task" type="object"/>
- <button name="%(action_project_task_reevaluate)d" states="done,cancelled" string="Reactivate" type="action" context="{'button_reactivate':True}" />
- <button name="do_pending" states="open" string="Pending" type="object"/>
- <button name="do_draft" states="open" string="Draft" type="object"/>
- <button name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action"/>
- <button name="do_cancel" states="draft,open,pending" string="Cancel" type="object"/>
- <div class="oe_right">
- <field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}' select="1"/>
- </div>
- <div class="oe_clear"/>
- </div>
+ <header>
+ <button name="do_open" string="Start Task" type="object"
+ states="draft,pending"/>
+ <button name="%(action_project_task_reevaluate)d" string="Reactivate" type="action"
+ states="done,cancelled" context="{'button_reactivate':True}"/>
+ <button name="do_pending" string="Pending" type="object"
+ states="open"/>
+ <button name="action_close" string="Done" type="object"
+ states="draft,open,pending"/>
+ <button name="do_draft" string="Draft" type="object"
+ states="cancel,done"/>
+ <button name="%(action_project_task_delegate)d" string="Delegate" type="action"
+ states="pending,open,draft"/>
+ <button name="do_cancel" string="Cancel" type="object"
+ states="draft,open,pending" />
+ <button name="stage_previous" string="Previous Stage" type="object"
+ states="open,pending" icon="gtk-go-back" attrs="{'invisible': [('stage_id','=', False)]}"/>
+ <button name="stage_next" string="Next Stage" type="object"
+ states="open,pending" icon="gtk-go-forward" attrs="{'invisible': [('stage_id','=', False)]}"/>
+ <field name="stage_id" widget="statusbar"/>
+ </header>
<sheet string="Task edition" layout="auto">
<group colspan="6" col="6">
<field name="name" select="1"/>
<tree string="Delegated tasks">
<field name="name"/>
<field name="user_id"/>
- <field name="state"/>
+ <field name="stage_id"/>
+ <field name="state" groups="base.group_no_one"/>
<field name="effective_hours" widget="float_time"/>
<field name="progress" widget="progressbar"/>
<field name="remaining_hours" widget="float_time"/>
<separator string="Planning" colspan="2"/>
<field name="priority"/>
<field name="sequence"/>
+ <field name="state" groups="base.group_no_one"/>
</group>
<separator string="Miscellaneous" colspan="4"/>
<field name="partner_id" />
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
- <group col="4" colspan="2">
- <field name="type_id" widget="selection" readonly="1"/>
- <button name="prev_type" string="Previous" type="object" icon="gtk-go-back" help="Change to Previous Stage"/>
- <button name="next_type" string="Next" type="object" icon="gtk-go-forward" help="Change to Next Stage"/>
- </group>
+ <field name="state" groups="base.group_no_one"/>
<separator colspan="4" string="Notes"/>
<field colspan="4" name="notes" nolabel="1"/>
</page>
</notebook>
</sheet>
<div class="oe_form_bottom">
- <field name="message_ids_social" colspan="4" widget="ThreadView" nolabel="1"/>
+ <field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/>
</div>
</form>
</field>
</record>
-
+
<!-- Project Task Kanban View -->
<record model="ir.ui.view" id="view_task_kanban">
<field name="name">project.task.kanban</field>
<field name="model">project.task</field>
<field name="type">kanban</field>
<field name="arch" type="xml">
- <kanban default_group_by="type_id" >
+ <kanban default_group_by="stage_id" >
<field name="color"/>
<field name="priority"/>
- <field name="type_id"/>
+ <field name="stage_id"/>
<field name="user_id"/>
<field name="user_email"/>
<field name="description"/>
<field name="sequence"/>
- <field name="state"/>
+ <field name="state" groups="base.group_no_one"/>
<field name="kanban_state"/>
<field name="remaining_hours" sum="Remaining Time" groups="project.group_time_work_estimation_tasks"/>
<field name="date_deadline"/>
<a name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close"/>
</div>
<div class="oe_kanban_right">
- <a name="set_kanban_state_blocked" string="Mark as Blocked" kanban_states="normal,done" type="object" icon="kanban-stop"/>
- <a name="set_kanban_state_normal" string="Normal" kanban_states="blocked,done" type="object" icon="gtk-media-play"/>
- <a name="set_kanban_state_done" string="Done" kanban_states="blocked,normal" type="object" icon="kanban-apply"/>
+ <a name="set_kanban_state_blocked" string="Mark as Blocked" attrs="{'invisible' : [('kanban_state', 'not in', ('normal', 'done'))]}" type="object" icon="kanban-stop"/>
+ <a name="set_kanban_state_normal" string="Normal" attrs="{'invisible' : [('kanban_state', 'not in', ('blocked', 'done'))]}" type="object" icon="gtk-media-play"/>
+ <a name="set_kanban_state_done" string="Done" attrs="{'invisible' : [('kanban_state', 'not in', ('blocked', 'normal'))]}" type="object" icon="kanban-apply"/>
</div>
<div class="oe_kanban_clear"/>
</div>
<field name="effective_hours" widget="float_time" sum="Spent Hours" invisible="1"/>
<field name="remaining_hours" widget="float_time" sum="Remaining Hours" on_change="onchange_remaining(remaining_hours,planned_hours)" invisible="context.get('set_visible',False)" groups="project.group_time_work_estimation_tasks"/>
<field name="date_deadline" invisible="context.get('deadline_visible',True)"/>
- <field name="type_id" invisible="context.get('set_visible',False)"/>
- <button name="next_type" invisible="context.get('set_visible',False)"
- states="draft,open,pending"
- string="Change Stage"
- type="object"
- icon="gtk-go-forward"
- help="Change Type"/>
+ <field name="stage_id" invisible="context.get('set_visible',False)"/>
+ <field name="state" invisible="context.get('set_visible',False)" groups="base.group_no_one"/>
<field name="date_start" invisible="1" groups="base.group_no_one"/>
<field name="date_end" invisible="1" groups="base.group_no_one"/>
<field name="progress" widget="progressbar" invisible="context.get('set_visible',False)"/>
- <field name="state" invisible="context.get('set_visible',False)"/>
- <button name="do_open" states="pending,draft,done,cancelled" string="Start Task" type="object" icon="gtk-media-play" help="For changing to open state" invisible="context.get('set_visible',False)"/>
- <button name="%(action_project_task_delegate)d" states="pending,open,draft" string="Delegate" type="action" icon="terp-personal" help="For changing to delegate state"/>
- <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/>
</tree>
</field>
</record>
<filter string="Deadlines" context="{'deadline_visible': False}" domain="[('date_deadline','<>',False)]" help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/>
<separator orientation="vertical"/>
<field name="name"/>
+ <field name="project_id" invisible="1"/>
<filter name="project" string="Project" domain="[('project_id.user_id','=',uid)]" help="My Projects" icon="terp-check"/>
+ <field name="project_id"/>
<field name="user_id">
<filter string="My Tasks" domain="[('user_id','=',uid)]" help="My Tasks" icon="terp-personal" />
<filter string="Unassigned Tasks" domain="[('user_id','=',False)]" help="Unassigned Tasks" icon="terp-personal-" />
<separator orientation="vertical"/>
<filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
<separator orientation="vertical"/>
- <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'type_id'}"/>
+ <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
<filter string="Status" name="group_state" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
<separator orientation="vertical"/>
<filter string="Deadline" icon="terp-gnome-cpu-frequency-applet+" domain="[]" context="{'group_by':'date_deadline'}"/>
<field name="arch" type="xml">
<search string="Tasks Stages">
<group>
- <filter icon="terp-check" string="Common" name="common" domain="[('project_default', '=', 1)]" help="Stages common to all projects"/>
+ <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
<separator orientation="vertical"/>
<field name="name"/>
</group>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Task Stage">
- <group colspan="4" col="6">
- <field name="name"/>
- <field name="project_default"/>
- <field name="sequence"/>
+ <group colspan="2" col="2">
+ <field name="name"/>
+ <field name="state"/>
+ </group>
+ <group colspan="2" col="4">
+ <field name="case_default"/>
+ <field name="sequence"/>
+ <field name="fold"/>
</group>
<separator string="Description" colspan="4"/>
<field colspan="4" name="description" nolabel="1"/>
<tree string="Task Stage">
<field name="sequence"/>
<field name="name"/>
+ <field name="state"/>
</tree>
</field>
</record>
<menuitem id="menu_tasks_config" name="GTD" parent="project.menu_definitions" sequence="1"/>
- <menuitem id="menu_project_config_project" name="Stages" parent="menu_definitions" sequence="1"/>
+ <menuitem id="menu_project_config_project" name="Stages" parent="project.menu_definitions" sequence="1"/>
- <menuitem action="open_task_type_form" id="menu_task_types_view" parent="menu_project_config_project" sequence="2" groups="base.group_no_one"/>
+ <menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="menu_project_config_project" sequence="2"/>
<menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/>
- <act_window context="{'search_default_user_id': [active_id], '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"/>
+ <act_window context="{'search_default_user_id': active_id, '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"/>
<record id="task_company" model="ir.ui.view">
<field name="name">res.company.task.config</field>