[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:
committed by
Jérome Maes
parent
4b877547ef
commit
bc3d55550c
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user