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 +