enhancements of Reuqesttimelines
This commit is contained in:
parent
923f2beab4
commit
d7dadb5974
|
|
@ -506,6 +506,7 @@ class projectTask(models.Model):
|
|||
self.env.user.name,
|
||||
task.suggested_deadline.strftime('%Y-%m-%d %H:%M') if task.suggested_deadline else _('Not available')
|
||||
))
|
||||
task._sync_involved_assignees_from_timelines()
|
||||
|
||||
@api.depends("project_id", "stage_id")
|
||||
def _compute_has_supervisor_access(self):
|
||||
|
|
@ -541,13 +542,14 @@ class projectTask(models.Model):
|
|||
task.has_supervisor_access = True
|
||||
|
||||
|
||||
@api.depends("project_id", "project_id.user_id", "project_id.project_lead")
|
||||
@api.depends("project_id", "project_id.user_id", "project_id.project_lead", "timelines_requested")
|
||||
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 task.timelines_requested
|
||||
and (
|
||||
is_admin
|
||||
or current_user == task.project_id.user_id
|
||||
|
|
@ -1196,7 +1198,7 @@ class projectTask(models.Model):
|
|||
else:
|
||||
if update_assignees:
|
||||
self.sudo().write({'user_ids': [(6, 0, selected_users.ids)]})
|
||||
self.sudo().write({'involved_user_ids': [(6, 0, selected_users.ids)]})
|
||||
self._sync_involved_assignees_from_timelines()
|
||||
action = _("Re-assigned") if reassignment else _("Timeline users selected")
|
||||
note = _("%s: %s") % (action, "; ".join(notes))
|
||||
if reason:
|
||||
|
|
@ -1325,8 +1327,7 @@ class projectTask(models.Model):
|
|||
+ task.assignees_timelines.assigned_to.ids
|
||||
+ task.assignees_timelines.team_id.team_lead.ids
|
||||
)
|
||||
existing_user_ids = set(task.involved_user_ids.ids)
|
||||
involved_users = list((existing_user_ids | timeline_user_ids) - set(task.user_ids.ids))
|
||||
involved_users = list(timeline_user_ids - set(task.user_ids.ids))
|
||||
task.involved_user_ids = [(6, 0, involved_users)]
|
||||
|
||||
@api.model
|
||||
|
|
|
|||
|
|
@ -16,7 +16,11 @@ class TaskStages(models.Model):
|
|||
related='team_id.team_lead',
|
||||
readonly=True,
|
||||
)
|
||||
team_related_user_ids = fields.Many2many(related='team_id.all_members_ids', string='Team Users')
|
||||
team_related_user_ids = fields.Many2many(
|
||||
'res.users',
|
||||
string='Team Users',
|
||||
compute='_compute_team_related_user_ids',
|
||||
)
|
||||
is_workflow_template = fields.Boolean(
|
||||
string='Workflow Template Stage',
|
||||
default=False,
|
||||
|
|
@ -27,11 +31,17 @@ class TaskStages(models.Model):
|
|||
@api.onchange('team_id')
|
||||
def onchange_team_id(self):
|
||||
for rec in self:
|
||||
if rec.team_id and rec.team_id.all_members_ids:
|
||||
rec.involved_user_ids = [(6,0,rec.team_id.all_members_ids.ids)]
|
||||
if rec.team_id and (rec.team_id.all_members_ids or rec.team_id.team_lead):
|
||||
users = rec.team_id.all_members_ids | rec.team_id.team_lead
|
||||
rec.involved_user_ids = [(6, 0, users.ids)]
|
||||
else:
|
||||
rec.involved_user_ids = [(5, 0, 0)]
|
||||
|
||||
@api.depends('team_id', 'team_id.all_members_ids', 'team_id.team_lead')
|
||||
def _compute_team_related_user_ids(self):
|
||||
for rec in self:
|
||||
rec.team_related_user_ids = rec.team_id.all_members_ids | rec.team_id.team_lead
|
||||
|
||||
def _is_project_owned_stage(self, project):
|
||||
self.ensure_one()
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -119,32 +119,17 @@ class TaskRequestTimelinesWizardLine(models.TransientModel):
|
|||
|
||||
def _get_project_involved_users(self):
|
||||
self.ensure_one()
|
||||
users = self.env["res.users"]
|
||||
task = self.task_id
|
||||
project = task.project_id
|
||||
if project:
|
||||
users |= project.members_ids | project.user_id | project.project_lead | project.project_sponsor
|
||||
if self.stage_id:
|
||||
users |= self.stage_id.involved_user_ids
|
||||
if self.stage_id.team_id:
|
||||
users |= self.stage_id.team_id.team_lead | self.stage_id.team_id.all_members_ids
|
||||
if task:
|
||||
users |= task.user_ids | task.involved_user_ids
|
||||
users = self.stage_id.involved_user_ids if self.stage_id else self.env["res.users"]
|
||||
if self.stage_id and self.stage_id.team_id:
|
||||
users |= self.stage_id.team_id.all_members_ids | self.stage_id.team_id.team_lead
|
||||
return users.filtered(lambda user: user.active and not user.share)
|
||||
|
||||
@api.depends(
|
||||
"stage_id",
|
||||
"stage_id.involved_user_ids",
|
||||
"stage_id.team_id",
|
||||
"stage_id.team_id.team_lead",
|
||||
"stage_id.team_id.all_members_ids",
|
||||
"task_id",
|
||||
"task_id.user_ids",
|
||||
"task_id.involved_user_ids",
|
||||
"task_id.project_id.members_ids",
|
||||
"task_id.project_id.user_id",
|
||||
"task_id.project_id.project_lead",
|
||||
"task_id.project_id.project_sponsor",
|
||||
"stage_id.team_id.team_lead",
|
||||
)
|
||||
def _compute_available_user_ids(self):
|
||||
for line in self:
|
||||
|
|
@ -172,7 +157,7 @@ class TaskReassignAssigneesWizard(models.TransientModel):
|
|||
values["line_ids"] = [
|
||||
(0, 0, {
|
||||
"stage_id": stage.id,
|
||||
"user_id": task.assignees_timelines.filtered(lambda line: line.stage_id == stage)[:1].assigned_to.id,
|
||||
"responsible_user_id": task._get_stage_responsible_user(stage).id,
|
||||
})
|
||||
for stage in default_stage
|
||||
]
|
||||
|
|
@ -195,11 +180,6 @@ class TaskReassignAssigneesWizard(models.TransientModel):
|
|||
users |= wizard.task_id.project_id.members_ids | wizard.task_id.project_id.user_id | wizard.task_id.project_id.project_lead | wizard.task_id.project_id.project_sponsor
|
||||
wizard.available_user_ids = [(6, 0, users.filtered(lambda u: u.active and not u.share).ids)]
|
||||
|
||||
def _get_default_user_for_stage(self, stage):
|
||||
self.ensure_one()
|
||||
timeline = self.task_id.assignees_timelines.filtered(lambda line: line.stage_id == stage)[:1]
|
||||
return timeline.assigned_to.id if timeline else False
|
||||
|
||||
def _preferred_existing_line(self, stage):
|
||||
self.ensure_one()
|
||||
lines = self.line_ids.filtered(lambda line: line.stage_id == stage)
|
||||
|
|
@ -217,7 +197,7 @@ class TaskReassignAssigneesWizard(models.TransientModel):
|
|||
else:
|
||||
lines |= Line.new({
|
||||
"stage_id": stage.id,
|
||||
"user_id": wizard._get_default_user_for_stage(stage),
|
||||
"responsible_user_id": wizard.task_id._get_stage_responsible_user(stage).id,
|
||||
})
|
||||
wizard.line_ids = lines
|
||||
|
||||
|
|
@ -239,38 +219,24 @@ class TaskReassignAssigneesWizardLine(models.TransientModel):
|
|||
wizard_id = fields.Many2one("task.reassign.assignees.wizard", required=True, ondelete="cascade")
|
||||
task_id = fields.Many2one(related="wizard_id.task_id", store=False)
|
||||
stage_id = fields.Many2one("project.task.type", string="Stage")
|
||||
responsible_user_id = fields.Many2one("res.users", string="Responsible User")
|
||||
user_id = fields.Many2one("res.users", string="New Assignee")
|
||||
reason = fields.Text(string="Reason")
|
||||
available_user_ids = fields.Many2many("res.users", compute="_compute_available_user_ids")
|
||||
|
||||
def _get_project_involved_users(self):
|
||||
self.ensure_one()
|
||||
users = self.env["res.users"]
|
||||
task = self.task_id
|
||||
project = task.project_id
|
||||
if project:
|
||||
users |= project.members_ids | project.user_id | project.project_lead | project.project_sponsor
|
||||
if self.stage_id:
|
||||
users |= self.stage_id.involved_user_ids
|
||||
if self.stage_id.team_id:
|
||||
users |= self.stage_id.team_id.team_lead | self.stage_id.team_id.all_members_ids
|
||||
if task:
|
||||
users |= task.user_ids | task.involved_user_ids
|
||||
users = self.stage_id.involved_user_ids if self.stage_id else self.env["res.users"]
|
||||
if self.stage_id and self.stage_id.team_id:
|
||||
users |= self.stage_id.team_id.all_members_ids | self.stage_id.team_id.team_lead
|
||||
return users.filtered(lambda user: user.active and not user.share)
|
||||
|
||||
@api.depends(
|
||||
"stage_id",
|
||||
"stage_id.involved_user_ids",
|
||||
"stage_id.team_id",
|
||||
"stage_id.team_id.team_lead",
|
||||
"stage_id.team_id.all_members_ids",
|
||||
"task_id",
|
||||
"task_id.user_ids",
|
||||
"task_id.involved_user_ids",
|
||||
"task_id.project_id.members_ids",
|
||||
"task_id.project_id.user_id",
|
||||
"task_id.project_id.project_lead",
|
||||
"task_id.project_id.project_sponsor",
|
||||
"stage_id.team_id.team_lead",
|
||||
)
|
||||
def _compute_available_user_ids(self):
|
||||
for line in self:
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
<field name="line_ids" nolabel="1">
|
||||
<list editable="bottom" create="0" delete="0">
|
||||
<field name="stage_id" readonly="1" force_save="1" options="{'no_open': True}"/>
|
||||
<field name="responsible_user_id" force_save="1" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="responsible_user_id" force_save="1" readonly="1" options="{'no_open': True}"/>
|
||||
<field name="available_user_ids" column_invisible="1"/>
|
||||
<field name="user_id" string="Assignee" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
||||
</list>
|
||||
|
|
@ -105,6 +105,7 @@
|
|||
<field name="line_ids" nolabel="1" invisible="not stage_ids">
|
||||
<list editable="bottom" create="0" delete="0">
|
||||
<field name="stage_id" readonly="1" force_save="1" options="{'no_open': True}"/>
|
||||
<field name="responsible_user_id" readonly="1" force_save="1" options="{'no_open': True}"/>
|
||||
<field name="available_user_ids" column_invisible="1"/>
|
||||
<field name="user_id" string="New Assignee" force_save="1" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="reason" required="1" force_save="1"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue