62 lines
2.5 KiB
Python
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 |