diff --git a/addons/project/models/project.py b/addons/project/models/project.py
index ff476912391..d1fc2292d97 100644
--- a/addons/project/models/project.py
+++ b/addons/project/models/project.py
@@ -1012,6 +1012,7 @@ class Task(models.Model):
dependent_ids = fields.Many2many('project.task', relation="task_dependencies_rel", column1="depends_on_id",
column2="task_id", string="Block",
domain="[('allow_task_dependencies', '=', True), ('id', '!=', id)]")
+ dependent_tasks_count = fields.Integer(string="Dependent Tasks", compute='_compute_dependent_tasks_count')
# recurrence fields
allow_recurring_tasks = fields.Boolean(related='project_id.allow_recurring_tasks')
@@ -1267,6 +1268,21 @@ class Task(models.Model):
for task in recurring_tasks:
task.recurring_count = tasks_count.get(task.recurrence_id.id, 0)
+ @api.depends('dependent_ids')
+ def _compute_dependent_tasks_count(self):
+ tasks_with_dependency = self.filtered('allow_task_dependencies')
+ (self - tasks_with_dependency).dependent_tasks_count = 0
+ if tasks_with_dependency:
+ group_dependent = self.env['project.task'].read_group([
+ ('depend_on_ids', 'in', tasks_with_dependency.ids),
+ ], ['depend_on_ids'], ['depend_on_ids'])
+ dependent_tasks_count_dict = {
+ group['depend_on_ids'][0]: group['depend_on_ids_count']
+ for group in group_dependent
+ }
+ for task in tasks_with_dependency:
+ task.dependent_tasks_count = dependent_tasks_count_dict.get(task.id, 0)
+
@api.depends('partner_id.email')
def _compute_partner_email(self):
for task in self:
@@ -2001,6 +2017,22 @@ class Task(models.Model):
'context': self._context
}
+ def action_dependent_tasks(self):
+ self.ensure_one()
+ action = {
+ 'res_model': 'project.task',
+ 'type': 'ir.actions.act_window',
+ 'context': {**self._context, 'default_depend_on_ids': [Command.link(self.id)]},
+ }
+ if self.dependent_tasks_count == 1:
+ action['view_mode'] = 'form'
+ action['res_id'] = self.dependent_ids.id
+ else:
+ action['name'] = _('Dependent Tasks')
+ action['view_mode'] = 'tree,form,kanban,calendar,pivot,graph,gantt,activity,map'
+ action['domain'] = [('depend_on_ids', '=', self.id)]
+ return action
+
def action_recurring_tasks(self):
return {
'name': 'Tasks in Recurrence',
diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml
index c383ab81aba..f2ce34e3133 100644
--- a/addons/project/views/project_views.xml
+++ b/addons/project/views/project_views.xml
@@ -807,6 +807,15 @@
in Recurrence
+