[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:
Thibault Delavallée
2016-09-05 12:51:26 +02:00
14 changed files with 126 additions and 157 deletions
+3 -3
View File
@@ -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>
+5 -8
View File
@@ -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'],
+1 -1
View File
@@ -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
@@ -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', '&lt;=', 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 &amp; 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>
@@ -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>