# -*- coding: utf-8 -*- import datetime import logging from odoo import SUPERUSER_ID, api, fields, models _logger = logging.getLogger(__name__) class ResUsersRoleLine(models.Model): _name = "res.users.role.line" _description = "Users associated to a role" active = fields.Boolean(related="user_id.active") role_id = fields.Many2one( comodel_name="res.users.role", required=True, string="Role", ondelete="cascade" ) user_id = fields.Many2one( comodel_name="res.users", required=True, string="User", domain=[("id", "!=", SUPERUSER_ID)], ondelete="cascade", ) date_from = fields.Date("From") date_to = fields.Date("To") is_enabled = fields.Boolean("Enabled", compute="_compute_is_enabled") _sql_constraints = [ ( "user_role_uniq", "unique (user_id,role_id)", "Roles can be assigned to a user only once at a time", ) ] @api.depends("date_from", "date_to") def _compute_is_enabled(self): today = datetime.date.today() for role_line in self: role_line.is_enabled = True if role_line.date_from: date_from = role_line.date_from if date_from > today: role_line.is_enabled = False if role_line.date_to: date_to = role_line.date_to if today > date_to: role_line.is_enabled = False def unlink(self): users = self.mapped("user_id") res = super(ResUsersRoleLine, self).unlink() users.set_groups_from_roles(force=True) return res