You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

82 lines
2.7 KiB

from odoo import api, fields, models
class ResGroups(models.Model):
_inherit = "res.groups"
# The inverse field of the field group_id on the res.users.role model
# This field should be used a One2one relation as a role can only be
# represented by one group. It's declared as a One2many field as the
# inverse field on the res.users.role it's declared as a Many2one
role_id = fields.One2many(
comodel_name="res.users.role",
inverse_name="group_id",
help="Relation for the groups that represents a role",
)
role_ids = fields.Many2many(
comodel_name="res.users.role",
relation="res_groups_implied_roles_rel",
string="Roles",
compute="_compute_role_ids",
help="Roles in which the group is involved",
)
parent_ids = fields.Many2many(
"res.groups",
"res_groups_implied_rel",
"hid",
"gid",
string="Parents",
help="Inverse relation for the Inherits field. "
"The groups from which this group is inheriting",
)
trans_parent_ids = fields.Many2many(
comodel_name="res.groups",
string="Parent Groups",
compute="_compute_trans_parent_ids",
)
role_count = fields.Integer("# Roles", compute="_compute_role_count")
def _compute_role_count(self):
for group in self:
group.role_count = len(group.role_ids)
@api.depends("parent_ids.trans_parent_ids")
def _compute_trans_parent_ids(self):
for group in self:
group.trans_parent_ids = (
group.parent_ids | group.parent_ids.trans_parent_ids
)
def _compute_role_ids(self):
for group in self:
if group.trans_parent_ids:
group.role_ids = group.trans_parent_ids.role_id
else:
group.role_ids = group.role_id
def action_view_roles(self):
self.ensure_one()
action = self.env["ir.actions.act_window"]._for_xml_id(
"base_user_role.action_res_users_role_tree"
)
action["context"] = {}
if len(self.role_ids) > 1:
action["domain"] = [("id", "in", self.role_ids.ids)]
elif self.role_ids:
form_view = [
(self.env.ref("base_user_role.view_res_users_role_form").id, "form")
]
if "views" in action:
action["views"] = form_view + [
(state, view) for state, view in action["views"] if view != "form"
]
else:
action["views"] = form_view
action["res_id"] = self.role_ids.id
else:
action = {"type": "ir.actions.act_window_close"}
return action