[MERGE] project_issue: improve usability
This branch contains several usability improvements targetting saas-13. Each commit contains its own small feature or improvement.
This commit is contained in:
@@ -179,8 +179,8 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="edit_project_simplified" model="ir.ui.view">
|
||||
<field name="name">project.project.form.popup</field>
|
||||
<record id="project_project_view_form_simplified" model="ir.ui.view">
|
||||
<field name="name">project.project.view.form.simplified</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Project">
|
||||
@@ -208,7 +208,7 @@
|
||||
<field name="res_model">project.project</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="edit_project_simplified"/>
|
||||
<field name="view_id" ref="project_project_view_form_simplified"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -20,16 +20,13 @@ It allows the manager to quickly check the issues, assign them and decide on the
|
||||
],
|
||||
'data': [
|
||||
'data/mail_message_subtype_data.xml',
|
||||
'report/project_issue_report_view.xml',
|
||||
'report/project_issue_report_views.xml',
|
||||
'security/project_issue_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'views/project_issue_view.xml',
|
||||
'views/project_issue_config_settings_views.xml',
|
||||
'views/account_analytic_account_view.xml',
|
||||
'views/project_project_view.xml',
|
||||
'views/res_partner_view.xml',
|
||||
'views/project_issue_menu.xml',
|
||||
'views/project_dashboard.xml',
|
||||
'views/project_issue_views.xml',
|
||||
'views/account_analytic_account_views.xml',
|
||||
'views/project_project_views.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'views/project_config_settings_views.xml',
|
||||
],
|
||||
'demo': ['data/project_issue_demo.xml'],
|
||||
|
||||
@@ -41,7 +41,7 @@ class ProjectIssue(models.Model):
|
||||
date_closed = fields.Datetime(string='Closed', readonly=True, index=True)
|
||||
date = fields.Datetime('Date')
|
||||
date_last_stage_update = fields.Datetime(string='Last Stage Update', index=True, default=fields.Datetime.now)
|
||||
channel = fields.Char(string='Channel', help="Communication channel.")
|
||||
channel = fields.Char(string='Channel', help="Communication channel.") # TDE note: is it still used somewhere ?
|
||||
tag_ids = fields.Many2many('project.tags', string='Tags')
|
||||
priority = fields.Selection([('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority', index=True, default='0')
|
||||
stage_id = fields.Many2one('project.task.type', string='Stage', track_visibility='onchange', index=True,
|
||||
|
||||
@@ -25,8 +25,6 @@ class ProjectIssueReport(models.Model):
|
||||
project_id = fields.Many2one('project.project', 'Project', readonly=True)
|
||||
user_id = fields.Many2one('res.users', 'Assigned to', readonly=True)
|
||||
partner_id = fields.Many2one('res.partner', 'Contact')
|
||||
channel = fields.Char('Channel', readonly=True, help="Communication Channel.")
|
||||
task_id = fields.Many2one('project.task', 'Task')
|
||||
email = fields.Integer('# Emails', readonly=True)
|
||||
|
||||
@api.model_cr
|
||||
@@ -49,11 +47,9 @@ class ProjectIssueReport(models.Model):
|
||||
c.project_id as project_id,
|
||||
1 as nbr_issues,
|
||||
c.partner_id,
|
||||
c.channel,
|
||||
c.task_id,
|
||||
c.day_open as delay_open,
|
||||
c.day_close as delay_close,
|
||||
(SELECT count(id) FROM mail_message WHERE model='project.issue' AND res_id=c.id) AS email
|
||||
(SELECT count(id) FROM mail_message WHERE model='project.issue' AND message_type IN ('email', 'comment') AND res_id=c.id) AS email
|
||||
|
||||
FROM
|
||||
project_issue c
|
||||
|
||||
-2
@@ -48,8 +48,6 @@
|
||||
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
|
||||
<field name="stage_id"/>
|
||||
<filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/>
|
||||
<separator/>
|
||||
<filter string="New" name="new" domain="[('stage_id.sequence', '<=', 1)]"/>
|
||||
<group expand="1" string="Group By">
|
||||
<filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
|
||||
<filter string="Project" name="project" context="{'group_by':'project_id'}" />
|
||||
@@ -6,6 +6,12 @@
|
||||
<field name="model">project.config.settings</field>
|
||||
<field name="inherit_id" ref="project.view_config_settings"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='timesheets']" position="attributes">
|
||||
<attribute name="string">Timesheets</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='timesheets']" position="inside">
|
||||
<field name="module_project_issue_sheet" widget="radio"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='timesheets']" position="after">
|
||||
<group string="Helpdesk & Support">
|
||||
<field name="module_rating_project_issue" widget="radio"/>
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_project_kanban_inherited" model="ir.ui.view">
|
||||
<field name="name">project.project.kanban.inherited</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.view_project_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="use_tasks" position="after">
|
||||
<field name="use_issues"/>
|
||||
<field name="issue_ids" invisible="1"/>
|
||||
<field name="issue_needaction_count" invisible="1"/>
|
||||
</field>
|
||||
<xpath expr="//div/a[contains(@class, 'o_project_kanban_box')]" position="after">
|
||||
<a t-if="record.use_issues.raw_value" class="o_project_kanban_box" name="%(act_project_project_2_project_issue_all)d" type="action">
|
||||
<span class="o_value"><t t-raw="record.issue_ids.raw_value.length"/></span>
|
||||
<span class="o_label"><field name="label_issues"/></span>
|
||||
<a t-if="record.issue_needaction_count.raw_value" class="o_needaction" name="%(act_project_project_2_project_issue_all)d" type="action" context="{'search_default_message_needaction': 1}">
|
||||
<t t-esc="record.issue_needaction_count.raw_value"/>
|
||||
</a>
|
||||
</a>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//div[contains(@class, 'o_kanban_manage_reports')]" position="inside">
|
||||
<div>
|
||||
<a name="%(action_project_issue_report_filtered)d" type="action">Issues</a>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_config_settings_form_inherit_project_issue" model="ir.ui.view">
|
||||
<field name="name">project issue settings</field>
|
||||
<field name="model">project.config.settings</field>
|
||||
<field name="inherit_id" ref="project.view_config_settings"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='timesheets']" position="attributes">
|
||||
<attribute name="string">Timesheets</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='timesheets']" position="inside">
|
||||
<field name="module_project_issue_sheet" widget="radio"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!--
|
||||
ALL BUGS
|
||||
-->
|
||||
<record id="project_issue_categ_act0" model="ir.actions.act_window">
|
||||
<field name="name">Issues</field>
|
||||
<field name="res_model">project.issue</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,tree,calendar,form,pivot,graph</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="domain" eval=""/>
|
||||
<field name="context">{'search_default_my_issues': 1}</field>
|
||||
<field name="search_view_id" ref="view_project_issue_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p>
|
||||
The Odoo issues tracker allows you to efficiently manage things
|
||||
like internal requests, software development bugs, customer
|
||||
complaints, project troubles, material breakdowns, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_crm_tag_kanban_view0" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">kanban</field>
|
||||
<field name="view_id" ref="project_issue_kanban_view"/>
|
||||
<field name="act_window_id" ref="project_issue_categ_act0"/>
|
||||
</record>
|
||||
|
||||
<record id="action_crm_tag_tree_view0" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="project_issue_tree_view"/>
|
||||
<field name="act_window_id" ref="project_issue_categ_act0"/>
|
||||
</record>
|
||||
|
||||
<record id="action_crm_tag_calendar_view0" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">calendar</field>
|
||||
<field name="view_id" ref="project_issue_calendar_view"/>
|
||||
<field name="act_window_id" ref="project_issue_categ_act0"/>
|
||||
</record>
|
||||
|
||||
<record id="action_crm_tag_form_view0" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="project_issue_form_view"/>
|
||||
<field name="act_window_id" ref="project_issue_categ_act0"/>
|
||||
</record>
|
||||
|
||||
<record id="action_crm_tag_graph_view0" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="4"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="project_issue_graph_view"/>
|
||||
<field name="act_window_id" ref="project_issue_categ_act0"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_project_issue_track" name="Issues" parent="project.menu_project_management"
|
||||
action="project_issue_categ_act0" sequence="15"/>
|
||||
</odoo>
|
||||
+42
@@ -195,6 +195,19 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="project_issue_view_kanban_inherit_no_group_create" model="ir.ui.view">
|
||||
<field name="name">project.issue.view.kanban.inherit.no.group.create</field>
|
||||
<field name="model">project.issue</field>
|
||||
<field name="inherit_id" ref="project_issue.project_issue_kanban_view"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="priority">32</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban position="attributes">
|
||||
<attribute name="group_create">false</attribute>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="project_issue_pivot_view" model="ir.ui.view">
|
||||
<field name="name">project.issue.pivot.view</field>
|
||||
<field name="model">project.issue</field>
|
||||
@@ -267,4 +280,33 @@
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="project_issue_categ_act0" model="ir.actions.act_window">
|
||||
<field name="name">Issues</field>
|
||||
<field name="res_model">project.issue</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,tree,calendar,form,pivot,graph</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="domain" eval=""/>
|
||||
<field name="context">{'search_default_my_issues': 1}</field>
|
||||
<field name="search_view_id" ref="view_project_issue_filter"/>
|
||||
<field name="view_ids"
|
||||
eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'kanban', 'view_id': ref('project_issue_view_kanban_inherit_no_group_create')}),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('project_issue_tree_view')}),
|
||||
(0, 0, {'view_mode': 'calendar', 'view_id': ref('project_issue_calendar_view')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('project_issue_form_view')}),
|
||||
(0, 0, {'view_mode': 'graph', 'view_id': ref('project_issue_graph_view')}),
|
||||
]"/>
|
||||
<field name="help" type="html">
|
||||
<p>
|
||||
The Odoo issues tracker allows you to efficiently manage things
|
||||
like internal requests, software development bugs, customer
|
||||
complaints, project troubles, material breakdowns, etc.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_project_issue_track" name="Issues" parent="project.menu_project_management"
|
||||
action="project_issue_categ_act0" sequence="15"/>
|
||||
</odoo>
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Project -->
|
||||
<record id="view_project_form_inherited" model="ir.ui.view">
|
||||
<field name="name">project.project.form.inherited</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr='//div[@name="options_active"]' position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
</xpath>
|
||||
<xpath expr='//div[@name="options_active"]' position='inside'>
|
||||
<div>
|
||||
<field name="use_issues" class="oe_inline"/>
|
||||
<label for="use_issues" class="oe_inline" string="Issues"/>
|
||||
<span attrs="{'invisible':[('use_issues', '=', False)]}">as </span>
|
||||
<field name="label_issues" class="oe_inline oe_input_align" attrs="{'invisible': [('use_issues', '=', False)]}"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<div name="button_box" position="inside">
|
||||
<button class="oe_stat_button" type="action" attrs="{'invisible':[('use_issues','=', False)]}"
|
||||
name="%(act_project_project_2_project_issue_all)d" icon="fa-bug">
|
||||
<field string="Issues" name="issue_count" widget="statinfo" options="{'label_field': 'label_issues'}"/>
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="project_project_view_form_simplified_inherit_issue" model="ir.ui.view">
|
||||
<field name="name">project.project.view.form.simplified.inherit.issue</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.project_project_view_form_simplified"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="alias_def" position="after">
|
||||
<field name="use_tasks"/>
|
||||
<field name="use_issues"/>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_project_kanban_inherited" model="ir.ui.view">
|
||||
<field name="name">project.project.kanban.inherited</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.view_project_kanban"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="use_tasks" position="after">
|
||||
<field name="use_issues"/>
|
||||
<field name="issue_ids" invisible="1"/>
|
||||
<field name="issue_needaction_count" invisible="1"/>
|
||||
</field>
|
||||
<xpath expr="//div/a[contains(@class, 'o_project_kanban_box')]" position="after">
|
||||
<a t-if="record.use_issues.raw_value" class="o_project_kanban_box" name="%(act_project_project_2_project_issue_all)d" type="action">
|
||||
<span class="o_value"><t t-raw="record.issue_ids.raw_value.length"/></span>
|
||||
<span class="o_label"><field name="label_issues"/></span>
|
||||
<a t-if="record.issue_needaction_count.raw_value" class="o_needaction" name="%(act_project_project_2_project_issue_all)d" type="action" context="{'search_default_message_needaction': 1}">
|
||||
<t t-esc="record.issue_needaction_count.raw_value"/>
|
||||
</a>
|
||||
</a>
|
||||
</xpath>
|
||||
<xpath expr="//div[contains(@class, 'o_kanban_manage_reports')]" position="inside">
|
||||
<div>
|
||||
<a name="%(action_project_issue_report_filtered)d" type="action">Issues</a>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_project_form_inherited" model="ir.ui.view">
|
||||
<field name="name">project.project.form.inherited</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="options_active" position="attributes">
|
||||
<attribute name="class"></attribute>
|
||||
</div>
|
||||
<xpath expr='//div[@name="options_active"]' position='inside'>
|
||||
<div>
|
||||
<field name="use_issues" class="oe_inline"/>
|
||||
<label for="use_issues" class="oe_inline" string="Issues"/>
|
||||
<span attrs="{'invisible':[('use_issues', '=', False)]}">as </span>
|
||||
<field name="label_issues" class="oe_inline oe_input_align" attrs="{'invisible': [('use_issues', '=', False)]}"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<div name="button_box" position="inside">
|
||||
<button class="oe_stat_button" type="action" attrs="{'invisible':[('use_issues','=', False)]}"
|
||||
name="%(act_project_project_2_project_issue_all)d" icon="fa-bug">
|
||||
<field string="Issues" name="issue_count" widget="statinfo" options="{'label_field': 'label_issues'}"/>
|
||||
</button>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user