From 3092032feeee46b80b18d8431ba21291c994cae3 Mon Sep 17 00:00:00 2001 From: karuna Date: Fri, 5 Jun 2026 15:16:49 +0530 Subject: [PATCH] enhancements of PMT --- .../models/project_task.py | 31 +++++++++++++++++-- .../view/project_by_module.xml | 2 ++ .../view/project_task.xml | 8 +++-- 3 files changed, 36 insertions(+), 5 deletions(-) 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 20ab811fb..7a8a939f7 100644 --- a/addons_extensions/project_task_timesheet_extended/models/project_task.py +++ b/addons_extensions/project_task_timesheet_extended/models/project_task.py @@ -165,6 +165,7 @@ class projectTask(models.Model): has_supervisor_access = fields.Boolean(compute="_compute_has_supervisor_access") + show_reassign_button = fields.Boolean(compute="_compute_show_reassign_button") actual_hours = fields.Float( string="Actual Hours", compute="_compute_actual_hours", @@ -539,6 +540,20 @@ class projectTask(models.Model): 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): task.has_supervisor_access = True + + @api.depends("project_id", "project_id.user_id", "project_id.project_lead") + def _compute_show_reassign_button(self): + current_user = self.env.user + is_admin = current_user.has_group("base.group_system") or current_user.has_group("project.group_project_manager") + for task in self: + task.show_reassign_button = bool( + task.project_id + and ( + is_admin + or current_user == task.project_id.user_id + or current_user == task.project_id.project_lead + ) + ) @api.depends('assignees_timelines.estimated_time', 'show_approval_flow') def _compute_estimated_hours(self): for task in self: @@ -702,6 +717,12 @@ class projectTask(models.Model): key=lambda s: s.sequence)[:1] approval_not_required = False + can_skip_approval_stage = ( + user in task.involved_user_ids + or user in [project_manager, project_lead] + or user.has_group("project.group_project_manager") + or user.has_group("base.group_system") + ) # Compute buttons visibility if current_timeline: @@ -720,7 +741,7 @@ class projectTask(models.Model): if ( approval_not_required - and user in task.involved_user_ids + and can_skip_approval_stage and task.approval_status != "submitted" ): task.show_submission_button = True @@ -749,7 +770,7 @@ class projectTask(models.Model): else: approval_not_required = True - if user in task.involved_user_ids and task.approval_status != "submitted": + if can_skip_approval_stage and task.approval_status != "submitted": task.show_submission_button = True task.show_skip_approval_button = True @@ -1203,9 +1224,10 @@ class projectTask(models.Model): def _append_reassignment_history(self, stage, users, reason): self.ensure_one() formatted_datetime = self._get_current_datetime_formatted() - entry = "[%s] Stage: %s | Users: %s | Reason: %s" % ( + entry = "[%s] Stage: %s | Assigned By: %s | Assigned To: %s | Reason: %s" % ( formatted_datetime, stage.name, + self.env.user.name, ", ".join(users.mapped('name')), reason or "", ) @@ -1216,6 +1238,8 @@ class projectTask(models.Model): def action_open_reassign_wizard(self): self.ensure_one() + if not self.show_reassign_button: + raise UserError(_("Only the project manager, project lead, or administrator can re-assign assignees.")) return { "type": "ir.actions.act_window", "name": _("Re-Assign Assignees"), @@ -1903,3 +1927,4 @@ class projectTaskTimelines(models.Model): + diff --git a/addons_extensions/project_task_timesheet_extended/view/project_by_module.xml b/addons_extensions/project_task_timesheet_extended/view/project_by_module.xml index 44add9dcc..995411bb9 100644 --- a/addons_extensions/project_task_timesheet_extended/view/project_by_module.xml +++ b/addons_extensions/project_task_timesheet_extended/view/project_by_module.xml @@ -40,6 +40,7 @@ project.task.search.project.by.module project.task + @@ -82,3 +83,4 @@ + diff --git a/addons_extensions/project_task_timesheet_extended/view/project_task.xml b/addons_extensions/project_task_timesheet_extended/view/project_task.xml index d9af7df6e..929ee2850 100644 --- a/addons_extensions/project_task_timesheet_extended/view/project_task.xml +++ b/addons_extensions/project_task_timesheet_extended/view/project_task.xml @@ -29,7 +29,7 @@
-
@@ -120,6 +120,7 @@ + show_approval_flow or state in ['1_canceled','04_waiting_normal'] or record_paused @@ -213,7 +214,9 @@ -
+ + +
@@ -308,3 +311,4 @@ +