From 92543295d611d3a29a0eee856747c51fc9e4d140 Mon Sep 17 00:00:00 2001 From: karuna Date: Mon, 15 Dec 2025 18:07:11 +0530 Subject: [PATCH] adding page visibility based on stages --- .../models/__init__.py | 1 + .../models/stage_visibility.py | 45 ++++++++++++++++ .../security/project_stage_visibility.xml | 32 +++++++++++ .../view/project.xml | 28 ++++++---- .../view/stage_visibility_view.xml | 53 +++++++++++++++++++ 5 files changed, 148 insertions(+), 11 deletions(-) create mode 100644 addons_extensions/project_task_timesheet_extended/models/stage_visibility.py create mode 100644 addons_extensions/project_task_timesheet_extended/security/project_stage_visibility.xml create mode 100644 addons_extensions/project_task_timesheet_extended/view/stage_visibility_view.xml 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 @@ - +