diff options
| author | Haresh Shyara <hsh@odoo.com> | 2016-10-26 11:43:26 +0530 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2016-12-06 15:39:06 +0100 |
| commit | bc3d55550cc8fee6e6f750f0e292fa4343cab403 (patch) | |
| tree | e6f7f21d1d23d22d571c6c9216bd86c1765ff983 | |
| parent | 4b877547ef6267f9710a4b8138b4eb71e8dec5ab (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.py | 6 | ||||
| -rw-r--r-- | addons/project/models/res_partner.py | 4 | ||||
| -rw-r--r-- | addons/project/views/project_views.xml | 7 | ||||
| -rw-r--r-- | addons/project/views/res_partner_views.xml | 4 | ||||
| -rw-r--r-- | addons/project_issue/models/project_issue.py | 6 | ||||
| -rw-r--r-- | addons/project_issue/views/project_issue_views.xml | 7 | ||||
| -rw-r--r-- | 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() <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> |
