groups="group_project_manager,group_project_user"
sequence="40"/>
- <menuitem id="menu_project_management" name="Project" parent="base.menu_main_pm" sequence="1"/>
- <menuitem id="base.menu_definitions" name="Configuration" parent="base.menu_main_pm" sequence="60"/>
+ <menuitem name="Project"
+ id="menu_project_management"
+ parent="base.menu_main_pm"
+ sequence="1"/>
+
+ <menuitem name="Configuration"
+ id="base.menu_definitions"
+ parent="base.menu_main_pm"
+ groups="group_project_manager"
+ sequence="60"/>
<record id="view_task_search_form" model="ir.ui.view">
<field name="name">project.task.search.form</field>
<search string="Tasks">
<field name="name" string="Tasks"/>
<field name="categ_ids"/>
- <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/>
- <filter string="New" name="draft" domain="[('stage_id.sequence', '<=', 1)]"/>
- <separator/>
- <filter string="My Tasks" domain="[('user_id','=',uid)]"/>
- <separator/>
- <filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
- <separator/>
- <filter string="Deadlines" context="{'deadline_visible': False}" domain="[('date_deadline','<>',False)]"
- help="Show only tasks having a deadline"/>
<field name="partner_id"/>
<field name="project_id"/>
<field name="user_id"/>
- <field name="stage_id" domain="[]"/>
+ <field name="stage_id"/>
+ <filter string="My Tasks" domain="[('user_id','=',uid)]"/>
+ <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/>
+ <separator/>
+ <filter string="New" name="draft" domain="[('stage_id.sequence', '<=', 1)]"/>
+ <separator/>
+ <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By">
- <filter string="Users" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
- <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
- <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
- <filter string="Last Stage Update" icon="terp-go-month" domain="[]" context="{'group_by':'date_last_stage_update'}"/>
- <filter string="Deadline" icon="terp-gnome-cpu-frequency-applet+" domain="[]" context="{'group_by':'date_deadline'}"/>
- <filter string="Start Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}"/>
- <filter string="End Month" icon="terp-go-month" domain="[]" context="{'group_by':'date_end'}" groups="base.group_no_one"/>
+ <filter string="Project" name="project" context="{'group_by':'project_id'}"/>
+ <filter string="Task" context="{'group_by':'name'}"/>
+ <filter string="Assigned to" name="User" context="{'group_by':'user_id'}"/>
+ <filter string="Stage" name="Stage" context="{'group_by':'stage_id'}"/>
+ <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ <separator/>
+ <filter string="Last Message" name="group_message_last_post" context="{'group_by':'message_last_post:week'}"/>
+ <filter string="Assignation Month" context="{'group_by':'date_start:month'}" help="Creation Date"/>
</group>
</search>
</field>
<field name="res_model">project.task</field>
<field name="view_mode">kanban,tree,form,calendar,gantt,graph</field>
<field name="context">{
- 'search_default_project_id': [active_id],
+ 'search_default_project_id': [active_id],
'default_project_id': active_id,
'active_test': False,
}</field>
<field name="search_view_id" ref="view_task_search_form"/>
<field name="help" type="html">
<p>
- OpenERP's project management allows you to manage the pipeline
+ Odoo's project management allows you to manage the pipeline
of tasks in order to get things done efficiently. You can
track progress, discuss on tasks, attach documents, etc.
</p>
<field name="name">project.project.form</field>
<field name="model">project.project</field>
<field name="arch" type="xml">
- <form string="Project" version="7.0">
+ <form string="Project">
<header>
<button name="set_open" string="Re-open project" type="object" states="pending" class="oe_highlight" groups="base.group_user"/>
<button name="set_done" string="Close Project" type="object" states="open,pending" groups="base.group_user"/>
<button name="set_open" string="Re-open project" type="object" states="cancelled,close" groups="base.group_user"/>
- <button name="set_pending" string="Pending" type="object" states="open" groups="base.group_user"/>
+ <button name="set_pending" string="Set as Pending" type="object" states="open" groups="base.group_user"/>
<button name="set_template" string="Set as Template" type="object" states="open" groups="base.group_user"/>
<button string="New Project Based on Template" name="duplicate_template" type="object" states="template" context="{'parent_id':parent_id}" class="oe_highlight" groups="base.group_user"/>
<button name="reset_project" string="Reset as Project" type="object" states="template" class="oe_highlight" groups="base.group_user"/>
<field name="name" string="Project Name"/>
</h1>
<div name="options_active">
- <field name="use_tasks" class="oe_inline"/>
- <label for="use_tasks"/>
+ <div>
+ <field name="use_tasks" class="oe_inline" string="Use Tasks"/>
+ <label for="use_tasks" class="oe_inline"/> as <field name="label_tasks" class="oe_inline"/>
+ </div>
</div>
</div>
<div class="oe_right oe_button_box" name="buttons" groups="base.group_user">
- <button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"
+ <button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_tasks','=', 0)]}"
name="%(act_project_project_2_project_task_all)d" icon="fa-tasks">
- <field string="Tasks" name="task_count" widget="statinfo"/>
+ <field string="Tasks" name="task_count" widget="statinfo" options="{'label_field': 'label_tasks'}"/>
</button>
<button class="oe_inline oe_stat_button" name="attachment_tree_view" type="object" icon="fa-files-o">
<field string="Documents" name="doc_count" widget="statinfo"/>
</div>
<group>
<group col="4">
- <field name="user_id" string="Project Manager"
- attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"
+ <field name="user_id" string="Project Manager"
+ attrs="{'readonly':[('state','in',['close', 'cancelled'])]}"
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_manager']}"/>
<newline/>
- <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
+ <field name="partner_id" on_change="onchange_partner_id(partner_id)" string="Customer"/>
</group>
- <p attrs="{'invisible': [('analytic_account_id','=',False)]}">
- To invoice or setup invoicing and renewal options, go to the related contract:
- <field name="analytic_account_id" readonly="1" required="0" class="oe_inline" nolabel="1"/>.
- </p>
<group name="group_alias"
attrs="{'invisible': [('alias_domain', '=', False)]}">
<label for="alias_name" string="Email Alias"/>
</group>
<notebook>
<page string="Team" name="team">
- <field colspan="4" name="members" widget="many2many_kanban" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'group_project_user']}">
+ <field colspan="4" name="members" widget="many2many_kanban" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}">
<kanban quick_create="false" create="true" delete="true">
<field name="name"/>
<templates>
<field name="resource_calendar_id"
groups="project.group_time_work_estimation_tasks"/>
</group>
- <group string="Miscellaneous" name="misc">
- <field name="date_start"/>
+ <group name="misc">
+ <field name="date_start" string="Start Date"/>
<field name="date" string="End Date"/>
<field name="sequence" groups="base.group_no_one"/>
<field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/>
</group>
</page>
<page string="Project Stages" attrs="{'invisible': [('use_tasks', '=', False)]}" name="project_stages">
- <field name="type_ids"/>
+ <p class="oe_grey">
+ Stages are defined globally and shared between projects.
+ You can "configure all available stages".Stages are used to organize work in steps inside a project.
+ In each step, you are able to change the status (validated, stopped) of the activity, no need to create specific stages for validation or blocked activities.
+ </p>
+ <field name="type_ids"/>
</page>
</notebook>
</sheet>
<field name="arch" type="xml">
<search string="Search Project">
<field name="name" string="Project Name"/>
- <filter icon="terp-mail-message-new" string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]"/>
- <separator/>
- <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"/>
+ <filter string="Open" name="Current" domain="[('state', '=','open')]"/>
+ <filter string="Pending" name="Pending" domain="[('state', '=','pending')]"/>
+ <filter string="Template" name="Template" domain="[('state', '=','template')]"/>
<separator/>
- <filter icon="terp-personal+" string="Member" domain="['|',('user_id', '=', uid),('members', '=', uid)]" help="Projects in which I am a member."/>
+ <filter string="Member" domain="['|',('user_id', '=', uid),('members', '=', uid)]"/>
+ <filter string="Manager" domain="[('user_id','=',uid)]"/>
<separator/>
- <filter string="Project(s) Manager" domain="[('user_id','=',uid)]" help="Projects in which I am a manager" icon="terp-personal"/>
+ <filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<field name="user_id" string="Project Manager"/>
<field name="partner_id" string="Contact" filter_domain="[('partner_id', 'child_of', self)]"/>
<group expand="0" string="Group By">
- <filter string="Manager" name="Manager" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
- <filter string="Contact" name="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
- <filter string="Parent" name="Parent" help="Parent" icon="terp-folder-blue" domain = "[]" context="{'group_by':'parent_id'}"/>
+ <filter string="Manager" name="Manager" context="{'group_by':'user_id'}"/>
+ <filter string="Contact" name="Partner" context="{'group_by':'partner_id'}"/>
+ <filter string="Parent" name="Parent" help="Parent" context="{'group_by':'parent_id'}"/>
</group>
</search>
</field>
<field name="name">project.project.kanban</field>
<field name="model">project.project</field>
<field name="arch" type="xml">
- <kanban version="7.0" class="oe_background_grey">
+ <kanban class="oe_background_grey">
<field name="effective_hours"/>
<field name="planned_hours"/>
<field name="name"/>
<field name="task_count"/>
<field name="task_ids"/>
<field name="alias_id"/>
+ <field name="alias_name"/>
+ <field name="alias_domain"/>
<field name="doc_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_global_click">
+ <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_project oe_kanban_global_click oe_kanban_project_task_spark">
<div class="oe_dropdown_toggle oe_dropdown_kanban" groups="base.group_user">
- <span class="oe_e">í</span>
+ <span class="oe_e">i</span>
<ul class="oe_dropdown_menu">
- <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Project Settings</a></li></t>
+ <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit Project</a></li></t>
<t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
<li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
</ul>
</div>
- <div class="oe_kanban_content">
- <h4><field name="name"/></h4>
- <div class="oe_kanban_alias" t-if="record.alias_id.value">
- <span class="oe_e oe_e_alias">%%</span><small><field name="alias_id"/></small>
+ <div class="oe_project_kanban_content">
+ <div class="row">
+ <h4 class="text-center"><strong><field name="name"/></strong></h4>
+ <div class="text-center oe_kanban_alias" t-if="record.alias_name.value and record.alias_domain.value">
+ <small><i class="fa fa-envelope-o"></i> <field name="alias_id"/></small>
+ </div>
</div>
- <div class="oe_kanban_project_list">
- <a t-if="record.use_tasks.raw_value" name="%(act_project_project_2_project_task_all)d" type="action" style="margin-right: 10px">
- <t t-raw="record.task_ids.raw_value.length"/> Tasks
+ <div class="row oe_margin_top_8 oe_kanban_project_list">
+ <a t-if="record.use_tasks.raw_value" class="oe_sparkline_bar_link" name="%(act_project_project_2_project_task_all)d" type="action" style="margin-right: -5px">
+ <t t-raw="record.task_ids.raw_value.length" /> <field name="label_tasks"/>
+ <field name="monthly_tasks" widget="sparkline_bar" options="{'delayIn': '1000'}">
+ Created Tasks
+ </field>
</a>
+ <div t-if="record.use_tasks.raw_value and record.task_count.raw_value lt 1" style="margin-top: 6px;margin-left:20px;">
+ <img src="/project/static/src/img/top_left_arrow.png" style="margin-top: -8px; width: 22px;" />
+ <span>No activity yet, click to enter in the project.</span>
+ </div>
</div>
- <div class="oe_kanban_project_list">
+ <div class="row oe_margin_top_8 oe_kanban_project_list">
<a t-if="record.doc_count.raw_value" name="attachment_tree_view" type="object" style="margin-right: 10px"> <field name="doc_count"/> Documents</a>
</div>
- <div class="oe_kanban_footer_left">
+ <div class="row oe_margin_top_8 oe_kanban_footer_left">
<span groups="project.group_time_work_estimation_tasks">
<span class="oe_e">R</span>
<t t-esc="Math.round(record.effective_hours.raw_value)"/>/<t t-esc="Math.round(record.planned_hours.raw_value)"/> <field name="company_uom_id"/>
<field name="date"/>
</span>
</div>
- <div class="oe_kanban_project_avatars">
+ <div class="row oe_margin_top_8 oe_kanban_project_avatars">
<t t-foreach="record.members.raw_value.slice(0,11)" t-as="member">
<img t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/>
</t>
<field name="name">project.task.work.form</field>
<field name="model">project.task.work</field>
<field name="arch" type="xml">
- <form string="Task Work" version="7.0">
+ <form string="Task Work">
<group col="4">
<field colspan="4" name="name"/>
<field name="hours" widget="float_time"/>
<field name="model">project.task</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
- <form string="Project" version="7.0">
+ <form string="Project">
<header>
<field name="stage_id" widget="statusbar" clickable="True"
options="{'fold_field': 'fold'}"/>
</header>
<sheet string="Task">
- <div class="oe_right">
- <field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/>
+ <div class="row">
+ <h1 class="col-xs-11">
+ <field class="oe_inline oe_left" name="priority" widget="priority"/>
+ <field name="name" placeholder="Task summary..." class="oe_inline"/>
+ </h1>
+ <div class="col-xs-1 text-right">
+ <field name="kanban_state" class="oe_inline" widget="kanban_state_selection"
+ options='{
+ "states_legend_field": "stage_id",
+ "states_legend": {"normal": "legend_normal", "blocked": "legend_blocked", "done": "legend_done"}}'/>
+ </div>
</div>
- <h1>
- <field name="name" placeholder="Task summary..." class="oe_inline"/>
- </h1>
<group>
<group>
- <field name="project_id" domain="[('state', '!=', 'close')]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
+ <field name="project_id" domain="[('state','not in', ('close', 'cancelled'))]" on_change="onchange_project(project_id)" context="{'default_use_tasks':1}"/>
<field name="user_id"
options='{"no_open": True}'
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/>
</group>
<notebook>
<page string="Description">
- <field name="description" placeholder="Add a Description..."/>
+ <field name="description" type="html"/>
<field name="work_ids" groups="project.group_tasks_work_on_tasks">
<tree string="Task Work" editable="top">
<field name="name"/>
</page>
<page string="Extra Info">
<group col="4">
- <field name="priority" groups="base.group_user" widget="priority"/>
- <field name="sequence"/>
+ <field name="sequence" groups="base.group_no_one"/>
<field name="partner_id"/>
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
+ <field name="date_last_stage_update" groups="base.group_no_one"/>
</group>
<group>
<group string="Gantt View">
+ <p class="oe_grey" colspan='2'>
+ Assign dates to make this task appear in the gantt chart (<span class="oe_form_gantt_avatars"></span> icon on the top right)
+ </p>
<field name="date_start"/>
<field name="date_end"/>
</group>
- <group>
- <field name="date_last_stage_update" groups="base.group_no_one"/>
- </group>
</group>
</page>
</notebook>
<field name="name">project.task.kanban</field>
<field name="model">project.task</field>
<field name="arch" type="xml">
- <kanban default_group_by="stage_id" >
+ <kanban default_group_by="stage_id">
<field name="color"/>
<field name="priority"/>
- <field name="stage_id"/>
+ <field name="stage_id" options='{"group_by_tooltip": {"description": "Description", "legend_priority": "Use of stars"}}'/>
<field name="user_id"/>
<field name="user_email"/>
<field name="description"/>
<field name="sequence"/>
- <field name="kanban_state"/>
<field name="remaining_hours" sum="Remaining Time" groups="project.group_time_work_estimation_tasks"/>
<field name="date_deadline"/>
<field name="message_summary"/>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
<div class="oe_dropdown_toggle oe_dropdown_kanban" groups="base.group_user">
- <span class="oe_e">í</span>
+ <span class="oe_e">i</span>
<ul class="oe_dropdown_menu">
- <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit...</a></li></t>
+ <t t-if="widget.view.is_action_enabled('edit')"><li><a type="edit">Edit Task</a></li></t>
<t t-if="widget.view.is_action_enabled('delete')"><li><a type="delete">Delete</a></li></t>
<li>
<ul class="oe_kanban_project_times" groups="project.group_time_work_estimation_tasks">
<div class="oe_kanban_content">
<div><b><field name="name"/></b></div>
<div>
- <field name="project_id"/><br/>
+ <field name="project_id" invisible="context.get('default_project_id', False)"/><br/>
<t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())" t-set="red">oe_kanban_text_red</t>
<span t-attf-class="#{red || ''}"><i><field name="date_deadline"/></i></span>
</div>
<div class="oe_kanban_bottom_right">
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
<div class="pull-left" groups="base.group_user">
- <field name="kanban_state" widget="kanban_state_selection"/>
+ <field name="kanban_state" widget="kanban_state_selection"
+ options='{"states_legend": {"normal": "legend_normal", "blocked": "legend_blocked", "done": "legend_done"}}'/>
<field name="priority" widget="priority"/>
</div>
</div>
<field name="message_unread" invisible="1"/>
<field name="sequence" invisible="not context.get('seq_visible', False)"/>
<field name="name"/>
- <field name="project_id" icon="gtk-indent" invisible="context.get('user_invisible', False)"/>
+ <field name="project_id" invisible="context.get('user_invisible', False)"/>
<field name="user_id" invisible="context.get('user_invisible', False)"/>
<field name="delegated_user_id" invisible="context.get('show_delegated', True)"/>
<field name="total_hours" invisible="1"/>
<field name="arch" type="xml">
<graph string="Project Tasks" type="bar">
<field name="project_id" type="row"/>
- <field name="planned_hours" type="measure"/>
+ <field name="stage_id" type="row"/>
</graph>
</field>
</record>
<field name="search_view_id" ref="view_task_search_form"/>
<field name="help" type="html">
<p>
- OpenERP's project management allows you to manage the pipeline
+ Odoo's project management allows you to manage the pipeline
of tasks in order to get things done efficiently. You can
track progress, discuss on tasks, attach documents, etc.
</p>
<field name="arch" type="xml">
<search string="Tasks Stages">
<field name="name" string="Tasks Stages"/>
- <filter icon="terp-check" string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
+ <filter string="Common" name="common" domain="[('case_default', '=', 1)]" help="Stages common to all projects"/>
</search>
</field>
</record>
<field name="name">project.task.type.form</field>
<field name="model">project.task.type</field>
<field name="arch" type="xml">
- <form string="Task Stage" version="7.0">
+ <form string="Task Stage">
<group>
<group>
<field name="name"/>
<field name="sequence"/>
- </group>
- <group>
<field name="case_default"/>
<field name="fold"/>
</group>
+ <group>
+ <field name="legend_blocked"/>
+ <field name="legend_done"/>
+ <field name="legend_normal"/>
+ <field name="legend_priority"/>
+ </group>
</group>
<field name="description" placeholder="Add a description..."/>
</form>
<menuitem id="menu_tasks_config" name="GTD" parent="base.menu_definitions" sequence="1"/>
- <menuitem id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1" groups="base.group_no_one"/>
+ <menuitem action="open_task_type_form" id="base.menu_project_config_project" name="Stages" parent="base.menu_definitions" sequence="1" groups="base.group_no_one"/>
- <menuitem action="open_task_type_form" name="Task Stages" id="menu_task_types_view" parent="base.menu_project_config_project" sequence="2"/>
<menuitem action="open_view_project_all" id="menu_projects" name="Projects" parent="menu_project_management" sequence="1"/>
+ <record id="product_search_form_view_procurment_consume" model="ir.ui.view">
+ <field name="name">product.product.service.search</field>
+ <field name="model">product.template</field>
+ <field name="inherit_id" ref="product.product_template_search_view"/>
+ <field name="arch" type="xml">
+ <xpath expr="//filter[@name='services']" position="replace">
+ <filter string="Services" name="services" domain="[('type','=','service')]" invisible="context.get('consumable_services', False)"/>
+ </xpath>
+ <xpath expr="//filter[@name='consumable']" position="replace">
+ <filter string="Consumable" name="consumable" domain="[('type','=','consu')]" help="Consumable products" invisible="context.get('consumable_services', False)"/>
+ </xpath>
+ </field>
+ </record>
<record id="task_company" model="ir.ui.view">
<field name="name">res.company.task.config</field>
<field name="model">project.category</field>
<field name="arch" type="xml">
<form string="Tags">
- <field name="name"/>
+ <group col="4">
+ <field name="name"/>
+ </group>
</form>
</field>
</record>