[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
This commit is contained in:
Haresh Shyara
2016-12-06 15:39:06 +01:00
committed by Jérome Maes
parent 4b877547ef
commit bc3d55550c
7 changed files with 29 additions and 9 deletions
+4 -2
View File
@@ -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')
+3 -1
View File
@@ -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)
+7
View File
@@ -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>
+2 -2
View File
@@ -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>
+4 -2
View File
@@ -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')
@@ -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>
@@ -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>