Since the form view has no longer a readonly mode, the task name could be cropped since its size has been reduced in a previous commit to keep the same size in edit mode in 15.3 (before the OWL conversion and the always edit feature). This behavior is no longer expected and the size should be the one in readonly mode to use the available spaces between the task name and the kanban state. It is for this reason, this commit reverts 74a069226294044fa8901aed6b02bc25c4e11b21. closes odoo/odoo#104118 X-original-commit: 677c8b1bc60fe0736ce45e8c041a03e65fc6413c Signed-off-by: Laurent Stukkens (ltu) <ltu@odoo.com> Signed-off-by: Xavier <xbo@odoo.com>
370 lines
24 KiB
XML
370 lines
24 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
|
|
<record id="project_sharing_quick_create_task_form" model="ir.ui.view">
|
|
<field name="name">project.task.form.quick_create</field>
|
|
<field name="model">project.task</field>
|
|
<field name="priority">999</field>
|
|
<field name="groups_id" eval="[(4, ref('base.group_portal')), (4, ref('base.group_user'))]"/>
|
|
<field name="arch" type="xml">
|
|
<form>
|
|
<group>
|
|
<field name="name" string="Task Title" placeholder="e.g. Send Invitations"/>
|
|
</group>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_project_task_view_kanban" model="ir.ui.view">
|
|
<field name="name">project.sharing.project.task.view.kanban</field>
|
|
<field name="model">project.task</field>
|
|
<field name="priority">999</field>
|
|
<field name="groups_id" eval="[(4, ref('base.group_portal')), (4, ref('base.group_user'))]"/>
|
|
<field name="arch" type="xml">
|
|
<kanban
|
|
class="o_kanban_small_column o_kanban_project_tasks"
|
|
default_group_by="stage_id"
|
|
on_create="quick_create"
|
|
quick_create_view="project.project_sharing_quick_create_task_form"
|
|
archivable="0"
|
|
import="0"
|
|
>
|
|
<field name="color"/>
|
|
<field name="priority"/>
|
|
<field name="stage_id" options='{"group_by_tooltip": {"description": "Description"}}'/>
|
|
<field name="portal_user_names"/>
|
|
<field name="partner_id"/>
|
|
<field name="sequence"/>
|
|
<field name="is_closed"/>
|
|
<field name="partner_is_company"/>
|
|
<field name="displayed_image_id"/>
|
|
<field name="active"/>
|
|
<field name="allow_subtasks"/>
|
|
<field name="child_text"/>
|
|
<field name="legend_blocked" invisible="1"/>
|
|
<field name="legend_normal" invisible="1"/>
|
|
<field name="legend_done" invisible="1"/>
|
|
<field name="allow_milestones" />
|
|
<field name="has_late_and_unreached_milestone"/>
|
|
<progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger", "normal": "200"}'/>
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
|
|
<div class="oe_kanban_content">
|
|
<div class="o_kanban_record_top">
|
|
<div class="o_kanban_record_headings">
|
|
<strong class="o_kanban_record_title">
|
|
<s t-if="!record.active.raw_value"><field name="name" widget="name_with_subtask_count"/></s>
|
|
<t t-else=""><field name="name" widget="name_with_subtask_count"/></t>
|
|
</strong>
|
|
<span invisible="context.get('default_project_id', False)"><br/><field name="project_id" required="1"/></span>
|
|
<span t-if="record.allow_milestones.raw_value and record.milestone_id.raw_value" t-attf-class="{{record.has_late_and_unreached_milestone.raw_value ? 'text-danger' : ''}}">
|
|
<br/>
|
|
<field name="milestone_id" />
|
|
</span>
|
|
<br />
|
|
<t t-if="record.partner_id.value">
|
|
<span t-if="!record.partner_is_company.raw_value">
|
|
<field name="commercial_partner_id"/>
|
|
</span>
|
|
<span t-else="">
|
|
<field name="partner_id"/>
|
|
</span>
|
|
</t>
|
|
<t t-else="record.email_from.raw_value"><span><field name="email_from"/></span></t>
|
|
</div>
|
|
<div class="o_dropdown_kanban dropdown" t-if="!selection_mode">
|
|
<a role="button" class="dropdown-toggle o-no-caret btn" data-bs-toggle="dropdown" data-bs-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu">
|
|
<span class="fa fa-ellipsis-v"/>
|
|
</a>
|
|
<div class="dropdown-menu" role="menu">
|
|
<a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit</a>
|
|
<div role="separator" class="dropdown-divider"></div>
|
|
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="o_kanban_record_body">
|
|
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" context="{'project_id': project_id}"/>
|
|
<div t-if="record.date_deadline.raw_value" name="date_deadline" attrs="{'invisible': [('is_closed', '=', True)]}">
|
|
<field name="date_deadline" widget="remaining_days"/>
|
|
</div>
|
|
<div t-if="record.displayed_image_id.value" groups="base.group_user">
|
|
<field name="displayed_image_id" widget="attachment_image"/>
|
|
</div>
|
|
</div>
|
|
<div class="o_kanban_record_bottom" t-if="!selection_mode">
|
|
<div class="oe_kanban_bottom_left">
|
|
<field name="priority" widget="priority"/>
|
|
</div>
|
|
<div class="oe_kanban_bottom_right" t-if="!selection_mode">
|
|
<span t-if="record.portal_user_names.raw_value.length > 0" class="pe-2" t-att-title="record.portal_user_names.raw_value">
|
|
<t t-set="user_count" t-value="record.portal_user_names.raw_value.split(',').length"/>
|
|
<t t-out="user_count"/>
|
|
<t t-if="user_count > 1"> assignees</t>
|
|
<t t-else=""> assignee</t>
|
|
</span>
|
|
<field name="kanban_state" widget="state_selection"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="clearfix"></div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_project_task_view_tree" model="ir.ui.view">
|
|
<field name="name">project.sharing.project.task.tree</field>
|
|
<field name="model">project.task</field>
|
|
<field name="priority">999</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Tasks" sample="1" delete="0" import="0">
|
|
<field name="is_closed" invisible="1" />
|
|
<field name="sequence" invisible="1" readonly="1"/>
|
|
<field name="allow_milestones" invisible="1"/>
|
|
<field name="priority" widget="priority" optional="show" nolabel="1"/>
|
|
<field name="child_text" invisible="1"/>
|
|
<field name="allow_subtasks" invisible="1" />
|
|
<field name="name" widget="name_with_subtask_count"/>
|
|
<field name="company_id" invisible="1"/>
|
|
<field name="milestone_id" attrs="{'column_invisible': [('allow_milestones', '=', False)]}"/>
|
|
<field name="partner_id" optional="hide"/>
|
|
<field name="portal_user_names" string="Assignees" optional="show"/>
|
|
<field name="date_deadline" optional="hide" widget="remaining_days" attrs="{'invisible': [('is_closed', '=', True)]}"/>
|
|
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show"/>
|
|
<field name="kanban_state" widget="state_selection" options="{'hide_label': True}" nolabel="1" optional="show"/>
|
|
<field name="legend_blocked" invisible="1"/>
|
|
<field name="legend_normal" invisible="1"/>
|
|
<field name="legend_done" invisible="1"/>
|
|
<field name="stage_id" invisible="context.get('set_visible',False)" optional="show"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_project_task_view_form" model="ir.ui.view">
|
|
<field name="name">project.sharing.project.task.view.form</field>
|
|
<field name="model">project.task</field>
|
|
<field name="priority">999</field>
|
|
<field name="groups_id" eval="[(4, ref('base.group_portal')), (4, ref('base.group_user'))]"/>
|
|
<field name="arch" type="xml">
|
|
<form string="Project Sharing: Task" class="o_form_project_tasks">
|
|
<header>
|
|
<button name="action_assign_to_me" string="Assign to Me" type="object" class="oe_highlight"
|
|
attrs="{'invisible' : "[('user_ids', 'in', [uid])]"}" data-hotkey="q" groups="base.group_user"/>
|
|
<button name="action_unassign_me" string="Unassign Me" type="object" class="oe_highlight"
|
|
attrs="{'invisible' : "[('user_ids', 'not in', [uid])]"}" data-hotkey="q"/>
|
|
<field name="stage_id" widget="statusbar" options="{'clickable': '1', 'fold_field': 'fold'}" attrs="{'invisible': [('project_id', '=', False), ('stage_id', '=', False)]}" />
|
|
</header>
|
|
<sheet string="Task">
|
|
<div class="oe_button_box" name="button_box">
|
|
<field name="display_parent_task_button" invisible="1"/>
|
|
<button name="action_project_sharing_view_parent_task" type="object" class="oe_stat_button" icon="fa-tasks" string="Parent Task" attrs="{'invisible': [('display_parent_task_button', '=', False)]}"/>
|
|
<button name="action_project_sharing_open_subtasks" type="object" class="oe_stat_button" icon="fa-tasks"
|
|
attrs="{'invisible' : ['|', '|', ('allow_subtasks', '=', False), ('id', '=', False), ('subtask_count', '=', 0)]}" context="{'default_user_ids': [(6, 0, [uid])]}">
|
|
<div class="o_field_widget o_stat_info">
|
|
<span class="o_stat_value">
|
|
<field name="subtask_count" widget="statinfo" nolabel="1"/>
|
|
</span>
|
|
<span class="o_stat_text">Sub-tasks</span>
|
|
</div>
|
|
</button>
|
|
</div>
|
|
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
|
<div class="oe_title pe-0">
|
|
<h1 class="d-flex flex-row justify-content-between">
|
|
<field name="priority" widget="priority" class="me-3"/>
|
|
<field name="name" class="o_task_name text-truncate" placeholder="Task Title..."/>
|
|
<field name="kanban_state" widget="state_selection" class="ms-auto"/>
|
|
<field name="legend_blocked" invisible="1"/>
|
|
<field name="legend_normal" invisible="1"/>
|
|
<field name="legend_done" invisible="1"/>
|
|
</h1>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="project_id" invisible="1"/>
|
|
<field name="display_project_id" string="Project" invisible="1"/>
|
|
<field name="allow_milestones" invisible="1"/>
|
|
<field name="milestone_id"
|
|
placeholder="e.g. Product Launch"
|
|
context="{'default_project_id': project_id if not parent_id or not display_project_id else display_project_id}"
|
|
attrs="{'invisible': [('allow_milestones', '=', False)]}"
|
|
options="{'no_open': True, 'no_create': True, 'no_edit': True}"
|
|
/>
|
|
<field name="user_ids" invisible="1" />
|
|
<field name="portal_user_names"
|
|
string="Assignees"
|
|
class="o_task_user_field"/>
|
|
</group>
|
|
<group>
|
|
<field name="active" invisible="1"/>
|
|
<field name="parent_id" invisible="1" />
|
|
<field name="company_id" invisible="1" />
|
|
<field name="is_closed" invisible="1" />
|
|
<field name="allow_subtasks" invisible="1" />
|
|
<field name="partner_id" options="{'no_open': True, 'no_create': True, 'no_edit': True}"/>
|
|
<field name="date_deadline" attrs="{'invisible': [('is_closed', '=', True)]}"/>
|
|
<field name="tag_ids" context="{'project_id': project_id}" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True, 'no_edit_color': True}"/>
|
|
</group>
|
|
</group>
|
|
<notebook>
|
|
<page name="description_page" string="Description">
|
|
<field name="description" type="html" options="{'collaborative': true}"/>
|
|
</page>
|
|
<page name="sub_tasks_page" string="Sub-tasks" attrs="{'invisible': [('allow_subtasks', '=', False)]}">
|
|
<field name="child_ids" context="{'default_project_id': project_id if not parent_id or not display_project_id else display_project_id, 'default_parent_id': id, 'default_partner_id': partner_id, 'form_view_ref' : 'project.project_sharing_project_task_view_form'}">
|
|
<tree editable="bottom">
|
|
<field name="project_id" invisible="1"/>
|
|
<field name="is_closed" invisible="1"/>
|
|
<field name="sequence" widget="handle"/>
|
|
<field name="priority" widget="priority" optional="show" nolabel="1"/>
|
|
<field name="name"/>
|
|
<field name="display_project_id" string="Project" optional="hide" invisible="1"/>
|
|
<field name="allow_milestones" invisible="1"/>
|
|
<field name="milestone_id"
|
|
optional="hide"
|
|
context="{'default_project_id': display_project_id or project_id}"
|
|
attrs="{'invisible': [('allow_milestones', '=', False)], 'column_invisible': [('parent.allow_milestones', '=', False)]}"
|
|
/>
|
|
<field name="company_id" invisible="1"/>
|
|
<field name="partner_id" options="{'no_open': True, 'no_create': True, 'no_edit': True}" optional="hide"/>
|
|
<field name="user_ids" invisible="1" />
|
|
<field name="portal_user_names" string="Assignees" optional="show"/>
|
|
<field name="date_deadline" attrs="{'invisible': [('is_closed', '=', True)]}" optional="show"/>
|
|
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="hide"/>
|
|
<field name="kanban_state" widget="state_selection" options="{'hide_label': True}" nolabel="1" optional="show"/>
|
|
<field name="stage_id" optional="show"/>
|
|
<button name="action_open_task" type="object" title="View Task" string="View Task" class="btn btn-link float-end"
|
|
context="{'form_view_ref': 'project.project_sharing_project_task_view_form'}"
|
|
attrs="{'invisible': "[('display_project_id', '!=', False), ('display_project_id', '!=', active_id)]"}"/>
|
|
</tree>
|
|
</field>
|
|
</page>
|
|
</notebook>
|
|
</sheet>
|
|
<div class="oe_chatter"/>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_project_task_view_search" model="ir.ui.view">
|
|
<field name="name">project.task.search.form</field>
|
|
<field name="model">project.task</field>
|
|
<field name="priority">999</field>
|
|
<field name="arch" type="xml">
|
|
<search string="Tasks">
|
|
<field name="name" string="Task"/>
|
|
<field name="tag_ids"/>
|
|
<field name="portal_user_names" string="Assignees"/>
|
|
<field string="Project" name="display_project_id"/>
|
|
<field name="milestone_id" groups="project.group_project_milestone"/>
|
|
<field name="stage_id"/>
|
|
<field name="partner_id" operator="child_of"/>
|
|
<filter string="Unassigned" name="unassigned" domain="[('user_ids', '=', False)]"/>
|
|
<separator/>
|
|
<filter string="High Priority" name="high_priority" domain="[('priority', '=', 1)]"/>
|
|
<filter string="Low Priority" name="low_priority" domain="[('priority', '=', 0)]"/>
|
|
<separator/>
|
|
<filter string="Late Tasks" name="late" domain="[('date_deadline', '<', context_today().strftime('%Y-%m-%d')), ('is_closed', '=', False)]"/>
|
|
<filter string="Tasks Due Today" name="tasks_due_today" domain="[('date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<filter string="Late Milestones" name="late_milestone" domain="[('is_closed', '=', False), ('has_late_and_unreached_milestone', '=', True)]" groups="project.group_project_milestone"/>
|
|
<separator/>
|
|
<filter string="Open Tasks" name="open_tasks" domain="[('is_closed', '=', False)]"/>
|
|
<filter string="Closed Tasks" name="closed_tasks" domain="[('is_closed', '=', True)]"/>
|
|
<filter string="Closed Last 7 Days" name="closed_last_7_days" domain="[('is_closed', '=', True), ('date_last_stage_update', '>', datetime.datetime.now() - relativedelta(days=7))]"/>
|
|
<filter string="Closed Last 30 Days" name="closed_last_30_days" domain="[('is_closed', '=', True), ('date_last_stage_update', '>', datetime.datetime.now() - relativedelta(days=30))]"/>
|
|
<separator/>
|
|
<filter invisible="1" string="Today Activities" name="activities_today"
|
|
domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
|
domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
|
<group expand="0" string="Group By">
|
|
<filter string="Stage" name="stage" context="{'group_by': 'stage_id'}"/>
|
|
<filter string="Milestone" name="milestone" context="{'group_by': 'milestone_id'}" groups="project.group_project_milestone"/>
|
|
<filter string="Customer" name="customer" context="{'group_by': 'partner_id'}"/>
|
|
<filter string="Kanban State" name="kanban_state" context="{'group_by': 'kanban_state'}"/>
|
|
<filter string="Deadline" name="date_deadline" context="{'group_by': 'date_deadline'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_project_task_action" model="ir.actions.act_window">
|
|
<field name="name">Project Sharing</field>
|
|
<field name="res_model">project.task</field>
|
|
<field name="view_mode">kanban,tree,form</field>
|
|
<field name="search_view_id" ref="project.project_sharing_project_task_view_search"/>
|
|
<field name="domain">[('display_project_id', '=', active_id)]</field>
|
|
<field name="context">{
|
|
'default_project_id': active_id,
|
|
'delete': 0,
|
|
}</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
No tasks found. Let's create one!
|
|
</p>
|
|
<p>
|
|
Keep track of the progress of your tasks from creation to completion.<br/>
|
|
Collaborate efficiently by chatting in real-time or via email.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_kanban_action_view" model="ir.actions.act_window.view">
|
|
<field name="view_mode">kanban</field>
|
|
<field name="act_window_id" ref="project.project_sharing_project_task_action"/>
|
|
<field name="view_id" ref="project.project_sharing_project_task_view_kanban"/>
|
|
</record>
|
|
|
|
<record id="project_sharing_tree_action_view" model="ir.actions.act_window.view">
|
|
<field name="view_mode">tree</field>
|
|
<field name="act_window_id" ref="project.project_sharing_project_task_action"/>
|
|
<field name="view_id" ref="project.project_sharing_project_task_view_tree"/>
|
|
</record>
|
|
|
|
<record id="project_sharing_form_action_view" model="ir.actions.act_window.view">
|
|
<field name="view_mode">form</field>
|
|
<field name="act_window_id" ref="project.project_sharing_project_task_action"/>
|
|
<field name="view_id" ref="project.project_sharing_project_task_view_form"/>
|
|
</record>
|
|
|
|
<record id="project_sharing_project_task_action_sub_task" model="ir.actions.act_window">
|
|
<field name="name">Sub-tasks</field>
|
|
<field name="res_model">project.task</field>
|
|
<field name="view_mode">tree,kanban,form</field>
|
|
<field name="search_view_id" ref="project.project_sharing_project_task_view_search"/>
|
|
<field name="domain">[('id', 'child_of', active_id), ('id', '!=', active_id)]</field>
|
|
<field name="context">{'default_parent_id': active_id}</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
No tasks found. Let's create one!
|
|
</p><p>
|
|
To get things done, use activities and status on tasks.<br/>
|
|
Chat in real time or by email to collaborate efficiently.
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="project_sharing_subtasks_tree_action_view" model="ir.actions.act_window.view">
|
|
<field name="view_mode">tree</field>
|
|
<field name="act_window_id" ref="project.project_sharing_project_task_action_sub_task"/>
|
|
<field name="view_id" ref="project.project_sharing_project_task_view_tree"/>
|
|
</record>
|
|
|
|
<record id="project_sharing_subtasks_kanban_action_view" model="ir.actions.act_window.view">
|
|
<field name="view_mode">kanban</field>
|
|
<field name="act_window_id" ref="project.project_sharing_project_task_action_sub_task"/>
|
|
<field name="view_id" ref="project.project_sharing_project_task_view_kanban"/>
|
|
</record>
|
|
|
|
<record id="project_sharing_subtasks_form_action_view" model="ir.actions.act_window.view">
|
|
<field name="view_mode">form</field>
|
|
<field name="act_window_id" ref="project.project_sharing_project_task_action_sub_task"/>
|
|
<field name="view_id" ref="project.project_sharing_project_task_view_form"/>
|
|
</record>
|
|
|
|
</odoo>
|