64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
from odoo import models, fields, api
|
|
from odoo.tools.misc import clean_context
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ResUsers(models.Model):
|
|
_inherit = 'res.users'
|
|
|
|
create_employee = fields.Boolean(store=False, default=True, copy=False, string="Technical field, whether to create an employee")
|
|
create_employee_id = fields.Many2one('hr.employee', store=False, copy=False, string="Technical field, bind user to this employee on create")
|
|
|
|
|
|
@api.model_create_multi
|
|
def create(self, vals_list):
|
|
# logging vals (mask sensitive keys)
|
|
if isinstance(vals_list, dict):
|
|
safe_vals = dict(vals_list)
|
|
elif isinstance(vals_list, (list, tuple)):
|
|
first = vals_list[0] if vals_list else {}
|
|
try:
|
|
safe_vals = dict(first)
|
|
except Exception:
|
|
safe_vals = {}
|
|
else:
|
|
try:
|
|
safe_vals = dict(vals_list)
|
|
except Exception:
|
|
safe_vals = {}
|
|
for key in list(safe_vals.keys()):
|
|
if 'pass' in key.lower() or 'token' in key.lower():
|
|
safe_vals[key] = '***'
|
|
_logger.info("\n\n\n[hr_base] Creating user with login: %s\n\n\n", safe_vals.get('login', 'Login value not found'))
|
|
res = super().create(vals_list)
|
|
employee_create_vals = []
|
|
config = self.env['ir.config_parameter'].sudo()
|
|
login_option = config.get_param('hr_base.employee_login')
|
|
|
|
for user, vals in zip(res, vals_list):
|
|
if not vals.get('create_employee') and not vals.get('create_employee_id'):
|
|
continue
|
|
if vals.get('create_employee_id'):
|
|
self.env['hr.employee'].browse(vals.get('create_employee_id')).user_id = user
|
|
else:
|
|
employee_create_vals.append(dict(
|
|
name=user.name,
|
|
company_id=user.env.company.id,
|
|
**self.env['hr.employee']._sync_user(user)
|
|
))
|
|
if employee_create_vals:
|
|
self.env['hr.employee'].with_context(clean_context(self.env.context)).create(employee_create_vals)
|
|
employee_id = self.env['hr.employee'].browse(self.env.context.get('default_create_employee_id'))
|
|
|
|
if login_option == 'identity':
|
|
res.login = employee_id.saudi_number.saudi_id or employee_id.iqama_number.iqama_id or res.login
|
|
|
|
|
|
res.password = res.login
|
|
return res
|
|
|
|
|
|
|