diff --git a/addons_extensions/project_task_timesheet_extended/models/project_task.py b/addons_extensions/project_task_timesheet_extended/models/project_task.py index 78cb6a185..acff3037b 100644 --- a/addons_extensions/project_task_timesheet_extended/models/project_task.py +++ b/addons_extensions/project_task_timesheet_extended/models/project_task.py @@ -459,17 +459,45 @@ class projectTask(models.Model): self.env.user.name, task.suggested_deadline.strftime('%Y-%m-%d %H:%M') if task.suggested_deadline else _('Not available') )) - - @api.depends("project_id") + + @api.depends("project_id", "stage_id") def _compute_has_supervisor_access(self): - for task in self: - current_user = self.env.user - task.has_supervisor_access = False - administrative_users = self.env['project.role'].search([('role_level', '=', 'administrative')]) - first_stage = self.project_id.type_ids.sorted(key=lambda r: r.sequence)[0] - create_access_users = first_stage.team_id.team_lead + first_stage.involved_user_ids + administrative_users.user_ids + administrative_users = self.env['project.role'].search([ + ('role_level', '=', 'administrative') + ]).user_ids - if current_user.has_group("project.group_project_manager") or current_user == task.project_id.user_id or current_user == task.project_id.project_lead or (current_user.id in list(set(create_access_users.ids)) and task.stage_id.id == first_stage.id): + current_user = self.env.user + + for task in self: + task.has_supervisor_access = False + + project = task.project_id + + if not project: + continue + + stages = project.type_ids.sorted("sequence") + + if not stages: + continue + + first_stage = stages[0] + + create_access_users = ( + first_stage.team_id.team_lead + + first_stage.involved_user_ids + + administrative_users + ) + + if ( + current_user.has_group("project.group_project_manager") + or current_user == project.user_id + or current_user == project.project_lead + or ( + current_user in create_access_users + and task.stage_id == first_stage + ) + ): task.has_supervisor_access = True @api.depends('assignees_timelines.estimated_time', 'show_approval_flow')