From bc3d55550cc8fee6e6f750f0e292fa4343cab403 Mon Sep 17 00:00:00 2001 From: Haresh Shyara Date: Wed, 26 Oct 2016 11:43:26 +0530 Subject: [PATCH] [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 --- addons/project/models/project.py | 6 ++++-- addons/project/models/res_partner.py | 4 +++- addons/project/views/project_views.xml | 7 +++++++ addons/project/views/res_partner_views.xml | 4 ++-- addons/project_issue/models/project_issue.py | 6 ++++-- addons/project_issue/views/project_issue_views.xml | 7 +++++++ addons/project_issue/views/res_partner_views.xml | 4 ++-- 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() + + Tasks + project.task + kanban,tree,form + + + Overpassed Tasks project.task 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 @@ 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 @@ + + project.issue + form + Issues + kanban,tree,form + + Issues project.issue 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 @@