odoo18/addons_extensions/project_task_timesheet_exte.../models/teams.py

62 lines
2.5 KiB
Python

from odoo import api, fields, models
class InternalTeams(models.Model):
_name = "internal.teams"
team_name = fields.Text("Team Name", required=True)
team_lead = fields.Many2one("res.users", string="Team Lead")
members_ids = fields.Many2many('res.users', 'internal_team_user_rel', 'team_id',
'user_id', 'Team Members', help="""Team Members are the users who are working in this particular team."""
)
active = fields.Boolean(default=True, help="Set active to false to hide the Teams without removing it.")
parent_id = fields.Many2one('internal.teams', string="Parent Team",
domain="[('id', '!=', id)]")
child_ids = fields.One2many('internal.teams', 'parent_id', string="Child Teams")
complete_name = fields.Char(string='Full Path', compute='_compute_complete_name', recursive=True)
# Computed field to include members + child team members and leads
all_members_ids = fields.Many2many(
'res.users', compute='_compute_all_members', string="All Members", store=False
)
@api.depends('team_name', 'parent_id.complete_name')
def _compute_complete_name(self):
for rec in self:
rec.complete_name = rec._get_full_name()
def _get_full_name(self, level=6):
""" Return the full name of ``self`` (up to a certain level). """
if level <= 0:
return '...'
if self.parent_id:
return self.parent_id._get_full_name(level - 1) + " / " + (self.team_name or "")
else:
return self.team_name
def add_internal_team_members(self):
return {
'name': 'Add Team Members',
'type': 'ir.actions.act_window',
'res_model': 'internal.team.members.wizard',
'view_mode': 'form',
'target': 'new',
'context': {'default_user_ids': self.members_ids.ids}
}
@api.depends('members_ids', 'child_ids.members_ids', 'child_ids.team_lead')
def _compute_all_members(self):
for rec in self:
all_members = rec.members_ids
for child in rec.child_ids:
all_members |= child.members_ids | child.team_lead
rec.all_members_ids = all_members
def _compute_display_name(self):
""" Custom display_name in case a registration is nott linked to an attendee
"""
for registration in self:
registration.display_name = registration.team_name