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 b175e5ca5..78cb6a185 100644 --- a/addons_extensions/project_task_timesheet_extended/models/project_task.py +++ b/addons_extensions/project_task_timesheet_extended/models/project_task.py @@ -68,16 +68,16 @@ class projectTask(models.Model): return super(projectTask, self).write(vals) - - @api.constrains('name') - def _check_task_name(self): - pattern = r'^[A-Za-z0-9 ]+$' # only letters, numbers, space - - for rec in self: - if rec.name and not re.match(pattern, rec.name): - raise ValidationError( - "Task name can only contain letters, numbers, and spaces." - ) + # + # @api.constrains('name') + # def _check_task_name(self): + # pattern = r'^[A-Za-z0-9 ]+$' # only letters, numbers, space + # + # for rec in self: + # if rec.name and not re.match(pattern, rec.name): + # raise ValidationError( + # "Task name can only contain letters, numbers, and spaces." + # ) sequence_name = fields.Char("Sequence", copy=False) is_generic = fields.Boolean(string='Generic', default=True, tracking=True, @@ -1495,15 +1495,25 @@ class projectTaskTimelines(models.Model): "project.group_project_manager") or current_user == task.project_id.user_id or current_user == task.responsible_lead or current_user == task.project_id.project_lead: task.has_edit_access = True - @api.depends("project_id","task_id") + @api.depends("project_id", "task_id") def _compute_estimated_time_readonly(self): - for task in self: - task.estimated_time_readonly = True + for record in self: + record.estimated_time_readonly = True + + if not (record.project_id and record.task_id): + continue + current_user = self.env.user - if task.task_id and task.project_id: - is_first_stage = task.task_id.stage_id.sequence == min(task.task_id.project_id.type_ids.mapped('sequence')) - if is_first_stage or current_user == task.project_id.user_id: - task.estimated_time_readonly = False + task = record.task_id + project = record.project_id + stage_sequences = task.project_id.type_ids.mapped("sequence") + is_first_stage = stage_sequences and task.stage_id.sequence == min(stage_sequences) + + is_project_user = current_user == project.user_id + is_authorized_user = current_user in [project.user_id, project.project_lead, + record.assigned_to, record.responsible_lead] + can_edit = (is_first_stage or is_project_user) and is_authorized_user + record.estimated_time_readonly = not can_edit @api.depends('task_id','task_id.timesheet_ids', 'stage_id') def _compute_actual_time(self): 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 fceb2e099..6d956ab68 100644 --- a/addons_extensions/project_task_timesheet_extended/view/project_task.xml +++ b/addons_extensions/project_task_timesheet_extended/view/project_task.xml @@ -69,14 +69,14 @@