summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaresh Shyara <hsh@odoo.com>2016-10-26 11:43:26 +0530
committerJérome Maes <jem@openerp.com>2016-12-06 15:39:06 +0100
commitbc3d55550cc8fee6e6f750f0e292fa4343cab403 (patch)
treee6f7f21d1d23d22d571c6c9216bd86c1765ff983
parent4b877547ef6267f9710a4b8138b4eb71e8dec5ab (diff)
[IMP] project, project_issue: tasks and issue stat button on partner view
- Use read_group to compute task_count of res.partner for performance sake - When creating a task/issue from partner form view, the default partner will be the current one (event if the use case is rare) - Only display button when count is greater than 0 - Also avoid default 'My Tasks' filter when coming from partner form view
-rw-r--r--addons/project/models/project.py6
-rw-r--r--addons/project/models/res_partner.py4
-rw-r--r--addons/project/views/project_views.xml7
-rw-r--r--addons/project/views/res_partner_views.xml4
-rw-r--r--addons/project_issue/models/project_issue.py6
-rw-r--r--addons/project_issue/views/project_issue_views.xml7
-rw-r--r--addons/project_issue/views/res_partner_views.xml4
7 files changed, 29 insertions, 9 deletions
diff --git a/addons/project/models/project.py b/addons/project/models/project.py
index 393c94821b2..6e6ad7ddfd8 100644
--- a/addons/project/models/project.py
+++ b/addons/project/models/project.py
@@ -387,11 +387,13 @@ class Task(models.Model):
@api.onchange('project_id')
def _onchange_project(self):
+ default_partner_id = self.env.context.get('default_partner_id')
+ default_partner = self.env['res.partner'].browse(default_partner_id) if default_partner_id else None
if self.project_id:
- self.partner_id = self.project_id.partner_id
+ self.partner_id = self.project_id.partner_id or default_partner
self.stage_id = self.stage_find(self.project_id.id, [('fold', '=', False)])
else:
- self.partner_id = False
+ self.partner_id = default_partner
self.stage_id = False
@api.onchange('user_id')
diff --git a/addons/project/models/res_partner.py b/addons/project/models/res_partner.py
index 2fd7f0f7e3a..a21370e52ed 100644
--- a/addons/project/models/res_partner.py
+++ b/addons/project/models/res_partner.py
@@ -12,5 +12,7 @@ class ResPartner(models.Model):
task_count = fields.Integer(compute='_compute_task_count', string='# Tasks')
def _compute_task_count(self):
+ fetch_data = self.env['project.task'].read_group([('partner_id', 'in', self.ids)], ['partner_id'], ['partner_id'])
+ result = dict((data['partner_id'][0], data['partner_id_count']) for data in fetch_data)
for partner in self:
- partner.task_count = len(partner.task_ids)
+ partner.task_count = result.get(partner.id, 0)
diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml
index cd7a0cbd7d0..11b29664b6d 100644
--- a/addons/project/views/project_views.xml
+++ b/addons/project/views/project_views.xml
@@ -574,6 +574,13 @@ action = model.activate_sample_project()
<menuitem action="action_view_task" id="menu_action_view_task" parent="project.menu_project_management" sequence="5"/>
+ <record id="project_task_action_from_partner" model="ir.actions.act_window">
+ <field name="name">Tasks</field>
+ <field name="res_model">project.task</field>
+ <field name="view_mode">kanban,tree,form</field>
+ <field name="search_view_id" ref="view_task_search_form"/>
+ </record>
+
<record id="action_view_task_overpassed_draft" model="ir.actions.act_window">
<field name="name">Overpassed Tasks</field>
<field name="res_model">project.task</field>
diff --git a/addons/project/views/res_partner_views.xml b/addons/project/views/res_partner_views.xml
index d81016193e3..34e59d2d3f4 100644
--- a/addons/project/views/res_partner_views.xml
+++ b/addons/project/views/res_partner_views.xml
@@ -10,8 +10,8 @@
<field name="groups_id" eval="[(4, ref('project.group_project_user'))]"/>
<field name="arch" type="xml">
<button name="toggle_active" position="before">
- <button class="oe_stat_button" type="action" name="%(action_view_task)d"
- context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
+ <button class="oe_stat_button" type="action" name="%(project_task_action_from_partner)d"
+ context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" attrs="{'invisible': [('task_count', '=', 0)]}"
icon="fa-tasks">
<field string="Tasks" name="task_count" widget="statinfo"/>
</button>
diff --git a/addons/project_issue/models/project_issue.py b/addons/project_issue/models/project_issue.py
index 721a19bb448..849cc35ff19 100644
--- a/addons/project_issue/models/project_issue.py
+++ b/addons/project_issue/models/project_issue.py
@@ -123,14 +123,16 @@ class ProjectIssue(models.Model):
@api.onchange('project_id')
def _onchange_project_id(self):
+ default_partner_id = self.env.context.get('default_partner_id')
+ default_partner = self.env['res.partner'].browse(default_partner_id) if default_partner_id else self.env['res.partner']
if self.project_id:
if not self.partner_id and not self.email_from:
self.partner_id = self.project_id.partner_id.id
self.email_from = self.project_id.partner_id.email
self.stage_id = self.stage_find(self.project_id.id, [('fold', '=', False)])
else:
- self.partner_id = False
- self.email_from = False
+ self.partner_id = default_partner
+ self.email_from = default_partner.email
self.stage_id = False
@api.onchange('task_id')
diff --git a/addons/project_issue/views/project_issue_views.xml b/addons/project_issue/views/project_issue_views.xml
index afae340ff87..b35ba29dc73 100644
--- a/addons/project_issue/views/project_issue_views.xml
+++ b/addons/project_issue/views/project_issue_views.xml
@@ -282,6 +282,13 @@
</field>
</record>
+ <record id="project_issue_action_from_partner" model="ir.actions.act_window">
+ <field name="res_model">project.issue</field>
+ <field name="view_type">form</field>
+ <field name="name">Issues</field>
+ <field name="view_mode">kanban,tree,form</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>
diff --git a/addons/project_issue/views/res_partner_views.xml b/addons/project_issue/views/res_partner_views.xml
index 4f6e0a12039..b362da9b81d 100644
--- a/addons/project_issue/views/res_partner_views.xml
+++ b/addons/project_issue/views/res_partner_views.xml
@@ -9,9 +9,9 @@
<field name="groups_id" eval="[(4, ref('project.group_project_user'))]"/>
<field name="arch" type="xml">
<button name="toggle_active" position="before">
- <button class="oe_stat_button" type="action" name="%(action_view_issues)d"
+ <button class="oe_stat_button" type="action" name="%(project_issue_action_from_partner)d"
context="{'search_default_partner_id': commercial_partner_id, 'default_partner_id': active_id}"
- attrs="{'invisible': [('customer', '=', False)]}"
+ attrs="{'invisible': ['|', ('customer', '=', False), ('issue_count', '=', 0)]}"
icon="fa-bug">
<field name="issue_count" string="Issues" widget="statinfo"/>
</button>