Files
server-backend/base_user_role_history/models/res_users.py

76 lines
2.4 KiB
Python

# Copyright 2019 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models, _
class ResUsers(models.Model):
_inherit = 'res.users'
last_role_line_modification = fields.Datetime(
string="Last roles modification",
readonly=True,
)
@api.model
def _prepare_role_line_history_dict(self, role_line):
return {
'user_id': role_line.user_id.id,
'role_id': role_line.role_id.id,
'date_from': role_line.date_from,
'date_to': role_line.date_to,
'is_enabled': role_line.is_enabled,
}
@api.multi
def _get_role_line_values_by_user(self):
role_line_values_by_user = {}
for rec in self:
role_line_values_by_user.setdefault(rec, {})
for role_line in rec.role_line_ids:
role_line_values_by_user[rec][role_line.id] = \
self._prepare_role_line_history_dict(role_line)
return role_line_values_by_user
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
for vals in vals_list:
if 'role_line_ids' not in vals:
return res
new_role_line_values_by_user = res._get_role_line_values_by_user()
self.env['base.user.role.line.history'].create_from_vals(
{},
new_role_line_values_by_user
)
res.last_role_line_modification = fields.Datetime.now()
return res
@api.multi
def write(self, vals):
if 'role_line_ids' not in vals:
return super().write(vals)
old_role_line_values_by_user = self._get_role_line_values_by_user()
res = super().write(vals)
new_role_line_values_by_user = self._get_role_line_values_by_user()
self.env['base.user.role.line.history'].create_from_vals(
old_role_line_values_by_user,
new_role_line_values_by_user
)
self.write({
'last_role_line_modification': fields.Datetime.now()
})
return res
@api.multi
def show_role_lines_history(self): # pragma: no cover
self.ensure_one()
domain = [('user_id', '=', self.id)]
return {
'name': _("Roles history"),
'type': 'ir.actions.act_window',
'view_mode': 'tree,form',
'res_model': 'base.user.role.line.history',
'domain': domain,
}