mirror of
https://github.com/OCA/server-backend.git
synced 2025-02-18 09:52:42 +02:00
[IMP]base_user_role: Groups-roles navigation
This commit is contained in:
82
base_user_role/models/group.py
Normal file
82
base_user_role/models/group.py
Normal file
@@ -0,0 +1,82 @@
|
||||
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
|
||||
Reference in New Issue
Block a user