37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import api, fields, models
|
|
from odoo.fields import Domain
|
|
|
|
class ResUsers(models.Model):
|
|
_inherit = 'res.users'
|
|
|
|
@api.model
|
|
def _get_login_domain(self, login):
|
|
domain = super()._get_login_domain(login)
|
|
if login and not self.env.context.get('in_get_login_domain'):
|
|
# Normalize digits of the login string
|
|
digits = ''.join(c for c in login if c.isdigit())
|
|
if digits:
|
|
candidates = [digits]
|
|
if digits.startswith('62'):
|
|
candidates.append('0' + digits[2:])
|
|
candidates.append(digits[2:])
|
|
elif digits.startswith('0'):
|
|
candidates.append('62' + digits[1:])
|
|
candidates.append(digits[1:])
|
|
else:
|
|
candidates.append('0' + digits)
|
|
candidates.append('62' + digits)
|
|
|
|
# Check for res.partner with this phone number
|
|
partners = self.env['res.partner'].with_context(in_get_login_domain=True).sudo().search([
|
|
'|', ('phone', 'in', candidates), ('phone_sanitized', 'in', candidates)
|
|
])
|
|
if partners:
|
|
users = self.with_context(in_get_login_domain=True).sudo().search([
|
|
('partner_id', 'in', partners.ids)
|
|
])
|
|
if users:
|
|
return Domain('id', 'in', users.ids)
|
|
return domain
|