66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
# models/models.py
|
|
from odoo import models, fields, api, tools, _
|
|
from collections import defaultdict
|
|
|
|
class MenuControlUnits(models.Model):
|
|
_name = 'menu.control.units'
|
|
_rec_name = 'unit_name'
|
|
|
|
_sql_constraints = [
|
|
('unique_unit_name', 'UNIQUE(unit_name)', "'Unit Name' already defined. Please don't confuse me 😤.")
|
|
]
|
|
|
|
unit_name = fields.Char(string='Unit Name',required=True)
|
|
department_ids = fields.Many2many('hr.department')
|
|
|
|
user_ids = fields.Many2many('res.users')
|
|
|
|
def generate_department_user_ids(self):
|
|
for rec in self:
|
|
user_ids = self.env['hr.employee'].sudo().search([('department_id','in',rec.department_ids.ids)]).user_id.ids
|
|
self.write({
|
|
'user_ids': [(6, 0, user_ids)]
|
|
})
|
|
|
|
class MenuAccessControl(models.Model):
|
|
_name = 'menu.access.control'
|
|
_description = 'Menu Access Control'
|
|
_rec_name = 'control_unit'
|
|
|
|
_sql_constraints = [
|
|
('unique_control_unit', 'UNIQUE(control_unit)', "Only one service can exist with a specific control_unit. Please don't confuse me 🤪.")
|
|
]
|
|
|
|
control_unit = fields.Many2one('menu.control.units',required=True)
|
|
user_ids = fields.Many2many('res.users', string="Users", related='control_unit.user_ids')
|
|
|
|
|
|
access_menu_line_ids = fields.One2many(
|
|
'menu.access.line', 'access_control_id',
|
|
string="Accessible Menus"
|
|
)
|
|
|
|
def action_generate_menus(self):
|
|
"""Button to fetch active top-level menus and populate access lines."""
|
|
menu_lines = []
|
|
active_menus = self.env['ir.ui.menu'].search([
|
|
('parent_id', '=', False), # top-level menus
|
|
('active', '=', True)
|
|
])
|
|
for menu in active_menus:
|
|
menu_lines.append((0, 0, {
|
|
'menu_id': menu.id,
|
|
'is_main_menu': True
|
|
}))
|
|
self.access_menu_line_ids = menu_lines
|
|
|
|
|
|
class MenuAccessLine(models.Model):
|
|
_name = 'menu.access.line'
|
|
_description = 'Menu Access Line'
|
|
_rec_name = 'menu_id'
|
|
|
|
access_control_id = fields.Many2one('menu.access.control', ondelete='cascade')
|
|
menu_id = fields.Many2one('ir.ui.menu', string="Menu")
|
|
is_main_menu = fields.Boolean(string="Is Main Menu", default=True)
|