diff --git a/addons_extensions/project_task_timesheet_extended/models/__init__.py b/addons_extensions/project_task_timesheet_extended/models/__init__.py index 610eb5339..5aa20df30 100644 --- a/addons_extensions/project_task_timesheet_extended/models/__init__.py +++ b/addons_extensions/project_task_timesheet_extended/models/__init__.py @@ -17,3 +17,4 @@ from . import project_task from . import timesheets # from . import project_task_gantt from . import user_availability +from . import stage_visibility diff --git a/addons_extensions/project_task_timesheet_extended/models/stage_visibility.py b/addons_extensions/project_task_timesheet_extended/models/stage_visibility.py new file mode 100644 index 000000000..dc3e06b72 --- /dev/null +++ b/addons_extensions/project_task_timesheet_extended/models/stage_visibility.py @@ -0,0 +1,45 @@ +from odoo import api, fields, models + + +class ProjectProject(models.Model): + _inherit = 'project.project' + + is_initiation_user = fields.Boolean(compute='_compute_stage_access') + is_planning_user = fields.Boolean(compute='_compute_stage_access') + is_development_user = fields.Boolean(compute='_compute_stage_access') + is_testing_user = fields.Boolean(compute='_compute_stage_access') + is_deployment_user = fields.Boolean(compute='_compute_stage_access') + is_maintenance_user = fields.Boolean(compute='_compute_stage_access') + is_closure_user = fields.Boolean(compute='_compute_stage_access') + is_architecture_user = fields.Boolean(compute='_compute_stage_access') + is_project_editor = fields.Boolean(compute='_compute_stage_access') + + def _compute_stage_access(self): + user = self.env.user + + for project in self: + flows = self.env['project.stages.approval.flow'].search([ + ('project_id', '=', project.id) + ]) + + stages = flows.filtered( + lambda f: + f.assigned_to == user + or f.approval_by == user + or user in f.involved_users + or user.has_group('project.group_project_manager') + ).mapped('stage_id.name') + project_editor = False + if (project.user_id and user == project.user_id) or (project.project_sponsor and user == project.project_sponsor): + project_editor = True + + + project.is_initiation_user = 'Initiation' in stages + project.is_planning_user = 'Planning' in stages + project.is_development_user = 'Development' in stages + project.is_testing_user = 'Testing' in stages + project.is_deployment_user = 'Deployment' in stages + project.is_maintenance_user = 'Maintenance & Support' in stages + project.is_closure_user = 'Closer' in stages + project.is_architecture_user = 'Architecture & Design' in stages + project.is_project_editor = project_editor diff --git a/addons_extensions/project_task_timesheet_extended/security/project_stage_visibility.xml b/addons_extensions/project_task_timesheet_extended/security/project_stage_visibility.xml new file mode 100644 index 000000000..cb55fbd11 --- /dev/null +++ b/addons_extensions/project_task_timesheet_extended/security/project_stage_visibility.xml @@ -0,0 +1,32 @@ + + + + + + Project Stage Visibility - User + + + [ + '|', + ('assigned_to', '=', user.id), + '|', + ('approval_by', '=', user.id), + '|', + ('involved_users', 'in', user.id), + '|', + ('project_id.user_id', '=', user.id), + ('project_id.project_lead', '=', user.id) + ] + + + + + + + Project Stage Visibility - Manager + + [(1,'=',1)] + + + + diff --git a/addons_extensions/project_task_timesheet_extended/view/project.xml b/addons_extensions/project_task_timesheet_extended/view/project.xml index 757863e8e..78a9c0155 100644 --- a/addons_extensions/project_task_timesheet_extended/view/project.xml +++ b/addons_extensions/project_task_timesheet_extended/view/project.xml @@ -69,14 +69,17 @@ + [('id', 'in', showable_stage_ids)] - + + not is_project_editor + - + @@ -94,7 +97,7 @@ - + @@ -110,7 +113,7 @@ - +