small enhancements
This commit is contained in:
parent
923304f759
commit
90211776a1
|
|
@ -198,7 +198,7 @@ class projectTask(models.Model):
|
||||||
all_internal_users = Users.search([('share', '=', False)])
|
all_internal_users = Users.search([('share', '=', False)])
|
||||||
|
|
||||||
for task in self:
|
for task in self:
|
||||||
# no project → all internal
|
# no project → all internal
|
||||||
if not task.project_id:
|
if not task.project_id:
|
||||||
task.assignee_domain_ids = all_internal_users
|
task.assignee_domain_ids = all_internal_users
|
||||||
continue
|
continue
|
||||||
|
|
@ -841,7 +841,7 @@ class projectTask(models.Model):
|
||||||
task.stage_id = n_stage
|
task.stage_id = n_stage
|
||||||
task.approval_status = "approved"
|
task.approval_status = "approved"
|
||||||
|
|
||||||
activity_log = "%s: ✅ approved by %s and moved to %s" % (
|
activity_log = "%s: ✅ approved by %s and moved to %s" % (
|
||||||
current_stage.name,
|
current_stage.name,
|
||||||
self.env.user.employee_id.name,
|
self.env.user.employee_id.name,
|
||||||
n_stage.name)
|
n_stage.name)
|
||||||
|
|
@ -849,7 +849,7 @@ class projectTask(models.Model):
|
||||||
# Use the helper method to add activity log
|
# Use the helper method to add activity log
|
||||||
task._add_activity_log(activity_log)
|
task._add_activity_log(activity_log)
|
||||||
|
|
||||||
user_notes = "%s: ✅ moved to %s and awaiting your completion" % (
|
user_notes = "%s: ✅ moved to %s and awaiting your completion" % (
|
||||||
task.sequence_name,
|
task.sequence_name,
|
||||||
n_stage.name
|
n_stage.name
|
||||||
)
|
)
|
||||||
|
|
@ -882,9 +882,9 @@ class projectTask(models.Model):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
task.approval_status = "approved"
|
task.approval_status = "approved"
|
||||||
notes = "%s: ✅ Task approved and completed by %s" % (task.sequence_name, self.env.user.employee_id.name)
|
notes = "%s: ✅ Task approved and completed by %s" % (task.sequence_name, self.env.user.employee_id.name)
|
||||||
|
|
||||||
activity_log = "%s: ✅ approved by %s" % (
|
activity_log = "%s: ✅ approved by %s" % (
|
||||||
current_stage.name,
|
current_stage.name,
|
||||||
self.env.user.employee_id.name)
|
self.env.user.employee_id.name)
|
||||||
|
|
||||||
|
|
@ -920,9 +920,9 @@ class projectTask(models.Model):
|
||||||
# Optional: find previous stage if you want to send back
|
# Optional: find previous stage if you want to send back
|
||||||
stage = task.assignees_timelines.filtered(lambda s: s.stage_id == task.stage_id)
|
stage = task.assignees_timelines.filtered(lambda s: s.stage_id == task.stage_id)
|
||||||
|
|
||||||
notes = "%s: âÂÂÂÅ’ %s rejected by %s" % (task.sequence_name, current_stage.name, self.env.user.employee_id.name)
|
notes = "%s: âÂÂÂÂÅ’ %s rejected by %s" % (task.sequence_name, current_stage.name, self.env.user.employee_id.name)
|
||||||
|
|
||||||
activity_log = "%s: âÂÂÂÅ’ rejected by %s: %s" % (
|
activity_log = "%s: âÂÂÂÂÅ’ rejected by %s: %s" % (
|
||||||
current_stage.name,
|
current_stage.name,
|
||||||
self.env.user.employee_id.name,
|
self.env.user.employee_id.name,
|
||||||
reason)
|
reason)
|
||||||
|
|
@ -1053,7 +1053,7 @@ class projectTask(models.Model):
|
||||||
if reassignment:
|
if reassignment:
|
||||||
self._append_reassignment_history(stage, users, reason)
|
self._append_reassignment_history(stage, users, reason)
|
||||||
|
|
||||||
def _apply_task_stage_user_lines(self, lines, reason=False, reassignment=False):
|
def _apply_task_stage_user_lines(self, lines, reason=False, reassignment=False, update_assignees=True):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
self._ensure_task_timeline_rows()
|
self._ensure_task_timeline_rows()
|
||||||
selected_users = self.env['res.users']
|
selected_users = self.env['res.users']
|
||||||
|
|
@ -1061,6 +1061,7 @@ class projectTask(models.Model):
|
||||||
for wizard_line in lines:
|
for wizard_line in lines:
|
||||||
stage = wizard_line.stage_id
|
stage = wizard_line.stage_id
|
||||||
users = wizard_line.user_ids
|
users = wizard_line.user_ids
|
||||||
|
responsible_user = getattr(wizard_line, 'responsible_user_id', False)
|
||||||
if not stage or not users:
|
if not stage or not users:
|
||||||
continue
|
continue
|
||||||
selected_users |= users
|
selected_users |= users
|
||||||
|
|
@ -1069,7 +1070,7 @@ class projectTask(models.Model):
|
||||||
if timeline:
|
if timeline:
|
||||||
timeline.sudo().write({
|
timeline.sudo().write({
|
||||||
'assigned_to': primary_user.id,
|
'assigned_to': primary_user.id,
|
||||||
'responsible_lead': timeline.responsible_lead.id or primary_user.id,
|
'responsible_lead': responsible_user.id if responsible_user else timeline.responsible_lead.id or primary_user.id,
|
||||||
'team_id': stage.team_id.id if stage.team_id else timeline.team_id.id,
|
'team_id': stage.team_id.id if stage.team_id else timeline.team_id.id,
|
||||||
})
|
})
|
||||||
notes.append(_("%s: %s") % (stage.name, ", ".join(users.mapped('name'))))
|
notes.append(_("%s: %s") % (stage.name, ", ".join(users.mapped('name'))))
|
||||||
|
|
@ -1080,7 +1081,8 @@ class projectTask(models.Model):
|
||||||
if not selected_users:
|
if not selected_users:
|
||||||
raise UserError(_("Please select at least one user."))
|
raise UserError(_("Please select at least one user."))
|
||||||
|
|
||||||
self.sudo().write({'user_ids': [(6, 0, selected_users.ids)]})
|
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.sudo().write({'involved_user_ids': [(6, 0, selected_users.ids)]})
|
||||||
action = _("Re-assigned") if reassignment else _("Timeline users selected")
|
action = _("Re-assigned") if reassignment else _("Timeline users selected")
|
||||||
note = _("%s: %s") % (action, "; ".join(notes))
|
note = _("%s: %s") % (action, "; ".join(notes))
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ class TaskRequestTimelinesWizard(models.TransientModel):
|
||||||
values["line_ids"] = [
|
values["line_ids"] = [
|
||||||
(0, 0, {
|
(0, 0, {
|
||||||
"stage_id": line.stage_id.id,
|
"stage_id": line.stage_id.id,
|
||||||
|
"responsible_user_id": line.responsible_lead.id,
|
||||||
"user_ids": [(6, 0, line.assigned_to.ids)],
|
"user_ids": [(6, 0, line.assigned_to.ids)],
|
||||||
})
|
})
|
||||||
for line in task.assignees_timelines.sorted(lambda l: l.stage_sequence)
|
for line in task.assignees_timelines.sorted(lambda l: l.stage_sequence)
|
||||||
|
|
@ -97,7 +98,7 @@ class TaskRequestTimelinesWizard(models.TransientModel):
|
||||||
if not selected_lines:
|
if not selected_lines:
|
||||||
raise UserError(_("Please select users for at least one stage."))
|
raise UserError(_("Please select users for at least one stage."))
|
||||||
self.task_id.sudo().timelines_requested = True
|
self.task_id.sudo().timelines_requested = True
|
||||||
self.task_id._apply_task_stage_user_lines(selected_lines, reassignment=False)
|
self.task_id._apply_task_stage_user_lines(selected_lines, reassignment=False, update_assignees=False)
|
||||||
return {"type": "ir.actions.act_window_close"}
|
return {"type": "ir.actions.act_window_close"}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -107,8 +108,9 @@ class TaskRequestTimelinesWizardLine(models.TransientModel):
|
||||||
|
|
||||||
wizard_id = fields.Many2one("task.request.timelines.wizard", required=True, ondelete="cascade")
|
wizard_id = fields.Many2one("task.request.timelines.wizard", required=True, ondelete="cascade")
|
||||||
task_id = fields.Many2one(related="wizard_id.task_id", store=False)
|
task_id = fields.Many2one(related="wizard_id.task_id", store=False)
|
||||||
stage_id = fields.Many2one("project.task.type", string="Stage", required=True)
|
stage_id = fields.Many2one("project.task.type", string="Stage")
|
||||||
user_ids = fields.Many2many("res.users", string="Assigned To")
|
responsible_user_id = fields.Many2one("res.users", string="Responsible User")
|
||||||
|
user_ids = fields.Many2many("res.users", string="Assignees")
|
||||||
available_user_ids = fields.Many2many("res.users", compute="_compute_available_user_ids")
|
available_user_ids = fields.Many2many("res.users", compute="_compute_available_user_ids")
|
||||||
|
|
||||||
@api.depends("stage_id", "task_id")
|
@api.depends("stage_id", "task_id")
|
||||||
|
|
@ -201,7 +203,7 @@ class TaskReassignAssigneesWizardLine(models.TransientModel):
|
||||||
|
|
||||||
wizard_id = fields.Many2one("task.reassign.assignees.wizard", required=True, ondelete="cascade")
|
wizard_id = fields.Many2one("task.reassign.assignees.wizard", required=True, ondelete="cascade")
|
||||||
task_id = fields.Many2one(related="wizard_id.task_id", store=False)
|
task_id = fields.Many2one(related="wizard_id.task_id", store=False)
|
||||||
stage_id = fields.Many2one("project.task.type", string="Stage", required=True)
|
stage_id = fields.Many2one("project.task.type", string="Stage")
|
||||||
user_ids = fields.Many2many("res.users", string="New Assignees")
|
user_ids = fields.Many2many("res.users", string="New Assignees")
|
||||||
available_user_ids = fields.Many2many("res.users", compute="_compute_available_user_ids")
|
available_user_ids = fields.Many2many("res.users", compute="_compute_available_user_ids")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,9 +77,10 @@
|
||||||
</group>
|
</group>
|
||||||
<field name="line_ids" nolabel="1">
|
<field name="line_ids" nolabel="1">
|
||||||
<list editable="bottom" create="0" delete="0">
|
<list editable="bottom" create="0" delete="0">
|
||||||
<field name="stage_id" readonly="1" options="{'no_open': True}"/>
|
<field name="stage_id" readonly="1" force_save="1" options="{'no_open': True}"/>
|
||||||
|
<field name="responsible_user_id" force_save="1" options="{'no_create': True, 'no_open': True}"/>
|
||||||
<field name="available_user_ids" column_invisible="1"/>
|
<field name="available_user_ids" column_invisible="1"/>
|
||||||
<field name="user_ids" widget="many2many_tags" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
<field name="user_ids" string="Assignees" widget="many2many_tags" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
||||||
</list>
|
</list>
|
||||||
</field>
|
</field>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
@ -105,7 +106,7 @@
|
||||||
</group>
|
</group>
|
||||||
<field name="line_ids" nolabel="1" invisible="not stage_ids">
|
<field name="line_ids" nolabel="1" invisible="not stage_ids">
|
||||||
<list editable="bottom" create="0" delete="0">
|
<list editable="bottom" create="0" delete="0">
|
||||||
<field name="stage_id" readonly="1" options="{'no_open': True}"/>
|
<field name="stage_id" readonly="1" force_save="1" options="{'no_open': True}"/>
|
||||||
<field name="available_user_ids" column_invisible="1"/>
|
<field name="available_user_ids" column_invisible="1"/>
|
||||||
<field name="user_ids" widget="many2many_tags" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
<field name="user_ids" widget="many2many_tags" domain="[('id', 'in', available_user_ids)]" options="{'no_create': True, 'no_open': True}"/>
|
||||||
</list>
|
</list>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue