<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="name" string="Project Name" select="1"/>
+ <field name="analytic_account_id" invisible="1" required="0"/>
+ <label for="name" class="oe_edit_only" string="Project Name"/>
+ <h1>
+ <field name="name" string="Project Name"/>
+ </h1>
+ <label for="parent_id" class="oe_edit_only" string="Parent Project"/>
+ <h2>
+ <field name="parent_id" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}"/>
+ </h2>
+ <group>
+ <group>
<field name="partner_id" on_change="onchange_partner_id(partner_id)" select="1"/>
- <field name="user_id" string="Project Manager" select="1" attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"/>
+ <field name="user_id" string="Project Manager" 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"/>
</group>
- <group col="2" colspan="2" class="oe_form_group_label_border">
- <table border="0">
+ <group>
+ <table>
<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 icon="terp-gtk-go-back-rtl" class="oe_btn_width" name="%(act_project_project_2_project_task_all)d" string="Tasks" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"/></td>
+ <td><group><field name="use_tasks"/></group></td>
+ <td><button icon="terp-gtk-go-back-rtl" 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="terp-gtk-go-back-rtl" class="oe_btn_width" name="%(base.action_attachment)d" string="Documents" type="action" /></td>
+ <td><button icon="terp-gtk-go-back-rtl" class="oe_btn_width" name="%(base.action_attachment)d" string="Documents" type="action" /></td>
</tr>
</table>
</group>
</group>
- <notebook colspan="4">
- <page string="Team" attrs="{'invisible':[('use_tasks','=', 0)]}" name="team">
- <field colspan="4" name="members" nolabel="1" widget="many2many_kanban">
+ <notebook>
+ <page string="Team" name="team">
+ <field colspan="4" name="members" widget="many2many_kanban">
<kanban quick_create="true" create="false">
<field name="name"/>
<templates>
</kanban>
</field>
</page>
- <page string="Administration">
- <group col="2" colspan="2">
- <separator colspan="4" string="Performance"/>
- <field name="planned_hours" widget="float_time"/>
- <field name="effective_hours" widget="float_time" />
- <field name="resource_calendar_id"/>
- </group>
- <newline/>
- <group col="2" colspan="2" name="misc">
- <separator colspan="4" string="Miscellaneous"/>
- <field name="company_id" select="1" groups="base.group_multi_company" widget="selection" required="1"/>
- <field name="warn_manager"/>
- <field name="priority"/>
- <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
- </group>
- </page>
- <page string="Billing" groups="account.group_account_invoice">
- <field name="warn_customer"/>
- <field name="currency_id" select="1" groups="base.group_multi_company" required="1"/>
- <newline/>
- <group colspan="4" col="4">
- <separator colspan="2" string="Mail Header"/>
- <separator colspan="2" string="Mail Footer"/>
- <field name="warn_header" nolabel="1" colspan="2"/>
- <field name="warn_footer" nolabel="1" colspan="2"/>
- </group>
- <group col="3">
- <b>
- <label string="Variables you can use for headers and footer." colspan="3"/>
- </b>
- <label string="Task: %%(name)s"/>
- <label string="User: %%(user_id)s"/>
- <label string="ID: %%(task_id)s"/>
- <label string="Status: %%(state)s"/>
- <label string="Date Start: %%(date_start)s"/>
- <label string="Date Stop: %%(date)s"/>
+ <page string="Other Info">
+ <group>
+ <group string="Administration">
+ <field name="planned_hours" widget="float_time"/>
+ <field name="effective_hours" widget="float_time"/>
+ <field name="resource_calendar_id"/>
+ </group>
+ <group string="Miscellaneous" name="misc">
+ <field name="company_id" select="1" groups="base.group_multi_company" widget="selection" required="1"/>
+ <field name="priority"/>
+ <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
+ <field name="currency_id" select="1" groups="base.group_multi_company" required="1"/>
+ </group>
</group>
</page>
<page string="Tasks Stages">
<field name="arch" type="xml">
<search string="Search Project">
<group>
+ <field name="complete_name" string="Project Name"/>
+ <separator orientation="vertical"/>
<filter icon="terp-check" string="Open" name="Current" domain="[('state', '=','open')]" help="Open Projects"/>
<filter icon="gtk-media-pause" string="Pending" name="Pending" domain="[('state', '=','pending')]" help="Pending Projects"/>
- <filter icon="gtk-media-pause" string="Template"
- name="Template" domain="[('state', '=','template')]" help="Templates of Projects"/>
- <separator orientation="vertical"/>
+ <filter icon="gtk-media-pause" string="Template" name="Template" domain="[('state', '=','template')]" help="Templates of Projects"/>
<filter icon="terp-personal+" string="Member" domain="['|',('user_id', '=', uid),('members', '=', uid)]" help="Projects in which I am a member."/>
+ <filter string="Project(s) Manager" domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/>
<separator orientation="vertical"/>
- <field name="name" string="Project Name"/>
- <field name="user_id" string="Project Manager">
- <filter domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/>
- </field>
+ <field name="user_id" string="Project Manager"/>
<field name="partner_id" string="Partner"/>
</group>
<newline />
- <group expand="0" string="Group By...">
- <filter string="Manager" name="Manager" icon="terp-personal" domain = "[]" context="{'group_by':'user_id'}"/>
- <filter string="Partner" name="Partner" icon="terp-partner" domain = "[]" context="{'group_by':'partner_id'}"/>
- <separator orientation="vertical"/>
- <filter string="Parent" name="Parent" help="Parent" icon="terp-folder-blue" domain = "[]" context="{'group_by':'parent_id'}"/>
- </group>
+ <group expand="0" string="Group By...">
+ <filter string="Manager" name="Manager" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
+ <filter string="Partner" name="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
+ <separator orientation="vertical"/>
+ <filter string="Parent" name="Parent" help="Parent" icon="terp-folder-blue" domain = "[]" context="{'group_by':'parent_id'}"/>
+ </group>
</search>
</field>
</record>
<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 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>
- <li><a type="delete">Delete</a></li>
- <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
- </ul>
+ <div class="oe_dropdown_toggle oe_dropdown_kanban">
+ <span class="oe_e">i</span>
+ <ul class="oe_dropdown_menu">
+ <li><a type="edit">Edit...</a></li>
+ <li><a type="delete">Delete</a></li>
+ <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+ </ul>
+ </div>
<div class="oe_kanban_content">
<h3 class="oe_kanban_ellipsis"><field name="name"/></h3>
<div class="oe_kanban_project_avatars">
<t t-foreach="record.members.raw_value" t-as="member">
- <img t-att-src="kanban_image('res.users', 'avatar', member)" t-att-data-member_id="member"/>
+ <img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/>
</t>
</div>
</div>
<field name="arch" type="xml">
<form string="Project" version="7.0">
<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" groups="project.group_delegate_task"/>
- <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)]}"/>
+ <span groups="base.group_user">
+ <!--
+ <button name="do_open" string="Start Task" type="object"
+ states="draft,pending"/>
+ <button name="do_draft" string="Draft" type="object"
+ states="cancel,done"/>
+ -->
+ <button name="%(action_project_task_reevaluate)d" string="Reactivate" type="action"
+ states="done,cancelled" context="{'button_reactivate':True}"/>
+ <button name="action_close" string="Done" type="object"
+ states="draft,open,pending"/>
+ <button name="do_pending" string="Pending" type="object"
+ states="open"/>
+ <button name="%(action_project_task_delegate)d" string="Delegate" type="action"
+ states="pending,open,draft" groups="project.group_delegate_task"/>
+ <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)]}"/>
+ </span>
<field name="stage_id" widget="statusbar"/>
</header>
<sheet string="Task">
- <label for="name" class="oe_form_readonly_hidden"/>
+ <label for="name" class="oe_edit_only"/>
<h1>
<field name="name"/>
</h1>
- <label for="project_id" class="oe_form_readonly_hidden"/>
+ <label for="project_id" class="oe_edit_only"/>
<h2>
<field name="project_id" on_change="onchange_project(project_id)"/>
</h2>
<group>
<group>
- <field name="effective_hours"
- widget="float_time" invisible="1" groups="project.group_tasks_work_on_tasks"/>
<field name="user_id" attrs="{'readonly':[('state','in',['done', 'cancelled'])]}"/>
- <field name="partner_id" />
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
</group>
<group>
<field name="planned_hours" widget="float_time" attrs="{'readonly':[('state','!=','draft')]}"
groups="project.group_time_work_estimation_tasks"
on_change="onchange_planned(planned_hours, effective_hours)"/>
-
- <label for="remaining_hours" string="+ Remaining"/>
- <div>
- <field name="remaining_hours" widget="float_time" attrs="{'readonly':[('state','!=','draft')]}" groups="project.group_time_work_estimation_tasks"/>
- <button name="%(action_project_task_reevaluate)d" string="Reevaluate" type="action" target="new" states="open,pending" icon="gtk-edit"/>
- </div>
- <field name="total_hours" widget="float_time" groups="project.group_tasks_work_on_tasks"
- string="= Total"/>
-
- <field name="progress" widget="progressbar" groups="project.group_tasks_work_on_tasks"/>
+ <field name="progress" widget="progressbar"
+ groups="project.group_time_work_estimation_tasks"
+ invisible="1"/>
</group>
</group>
<notebook>
<page string="Description">
- <field name="description" attrs="{'readonly':[('state','=','done')]}" placeholder="Add a Description..." />
- <separator string="Task Works" />
- <field name="work_ids" attrs="{'readonly':[('state','in',['done','draft'])]}" groups="project.group_tasks_work_on_tasks">
+ <field name="description" attrs="{'readonly':[('state','=','done')]}" placeholder="Add a Description..."/>
+ <field name="work_ids" groups="project.group_tasks_work_on_tasks">
<tree string="Task Work" editable="top">
- <field name="name" />
+ <field name="date"/>
+ <field name="name"/>
+ <field name="user_id"/>
<field name="hours" widget="float_time" sum="Spent Hours"/>
- <field name="user_id" />
- <field name="date" />
</tree>
</field>
+ <group class="oe_subtotal_footer oe_right" name="project_hours" groups="project.group_time_work_estimation_tasks">
+ <field name="effective_hours" widget="float_time"/>
+ <label for="remaining_hours" string="Remaining" groups="project.group_time_work_estimation_tasks"/>
+ <div>
+ <button name="%(action_project_task_reevaluate)d" string="Reevaluate" type="action" target="new" states="open,pending" icon="gtk-edit"/>
+ <field name="remaining_hours" widget="float_time" attrs="{'readonly':[('state','!=','draft')]}" groups="project.group_time_work_estimation_tasks"/>
+ </div>
+ <field name="total_hours" widget="float_time" class="oe_subtotal_footer_separator"/>
+ </group>
+ <div class="oe_clear"/>
</page>
<page string="Delegations History" groups="project.group_delegate_task">
<separator string="Parent Tasks"/>
</page>
<page string="Extra Info" attrs="{'readonly':[('state','=','done')]}">
<group col="4">
- <field name="priority"/>
+ <field name="priority" groups="base.group_user"/>
<field name="sequence"/>
+ <field name="partner_id"/>
<field name="state" groups="base.group_no_one"/>
</group>
</page>
<field name="arch" type="xml">
<kanban default_group_by="stage_id" >
<field name="color"/>
- <field name="priority"/>
+ <field name="priority" groups="base.group_user"/>
<field name="stage_id"/>
<field name="user_id"/>
<field name="user_email"/>
<field name="name"/>
</td>
<td valign="top" width="22">
- <img t-att-src="kanban_image('res.users', 'avatar', record.user_id.raw_value[0])" t-att-title="record.user_id.value"
+ <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value[0])" t-att-title="record.user_id.value"
width="22" height="22" class="oe_kanban_gravatar"/>
</td>
</tr>
<field name="arch" type="xml">
<search string="Tasks">
<group>
+ <field name="name" string="Tasks"/>
+ <separator orientation="vertical"/>
<filter name="draft" string="New" domain="[('state','=','draft')]" help="New Tasks" icon="terp-check"/>
<filter name="open" string="In Progress" domain="[('state','=','open')]" help="In Progress Tasks" icon="terp-camera_test"/>
<filter string="Pending" domain="[('state','=','pending')]" context="{'show_delegated':False}" help="Pending Tasks" icon="terp-gtk-media-pause"/>
- <separator orientation="vertical"/>
- <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"/>
+ <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-" />
+ <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="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-" />
- </field>
+ <field name="user_id"/>
</group>
<newline/>
<group expand="0" string="Group By...">
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<xpath expr='//separator[@name="project_sep"]' position='replace'>
- <separator colspan="2" string="Project Management" name="project_sep"/> <!-- removal of invisible attribute -->
+ <separator colspan="4" string="Project Management" name="project_sep"/> <!-- removal of invisible attribute -->
</xpath>
<xpath expr='//separator[@name="project_sep"]' position='after'>
<field name="use_tasks" />
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Tasks Stages">
- <group>
- <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
+ <group>
+ <field name="name" string="Tasks Stages"/>
<separator orientation="vertical"/>
- <field name="name"/>
- </group>
+ <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
+ </group>
</search>
</field>
</record>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<page string="Configuration" position="inside">
- <separator string="Project Management" colspan="4"/>
- <field name="project_time_mode_id" domain="[('category_id','=','Working Time')]"/>
- <newline/>
+ <group string="Project Management">
+ <field name="project_time_mode_id" domain="[('category_id','=','Working Time')]"/>
+ </group>
</page>
</field>
</record>