55 lines
3.0 KiB
Python
55 lines
3.0 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import models
|
|
|
|
|
|
class PortalWizardUser(models.TransientModel):
|
|
_inherit = ['portal.wizard.user']
|
|
|
|
def _get_similar_users_domain(self, portal_users_with_email):
|
|
""" Returns the domain needed to find the users that have the same email
|
|
as portal users depending on their linked website characteristics.
|
|
:param portal_users_with_email: portal users that have an email address.
|
|
"""
|
|
similar_user_domain = super()._get_similar_users_domain(portal_users_with_email)
|
|
portal_user_website_ids = []
|
|
for portal_user in portal_users_with_email:
|
|
portal_user_website_id = portal_user.partner_id.website_id.id
|
|
if portal_user_website_id and portal_user_website_id not in portal_user_website_ids:
|
|
# If a portal user is linked to a website, search for the users
|
|
# that are linked to the same website.
|
|
portal_user_website_ids.append(portal_user_website_id)
|
|
elif not portal_user_website_id and False not in portal_user_website_ids:
|
|
# If a portal user is not linked to a website, search for the
|
|
# users that are not linked to a website and the users that are
|
|
# linked to the current website.
|
|
portal_user_website_ids.extend([False, self.env['website'].get_current_website().id])
|
|
similar_user_domain.append(('website_id', 'in', portal_user_website_ids))
|
|
return similar_user_domain
|
|
|
|
def _get_similar_users_fields(self):
|
|
""" Returns a list of field elements to extract from users.
|
|
"""
|
|
similar_user_fields = super()._get_similar_users_fields()
|
|
similar_user_fields.append('website_id')
|
|
return similar_user_fields
|
|
|
|
def _is_portal_similar_than_user(self, user, portal_user):
|
|
""" Checks if the credentials of a portal user and a user are the same
|
|
(users are distinct, their emails are similar and their linked websites
|
|
are incompatible).
|
|
"""
|
|
if super()._is_portal_similar_than_user(user, portal_user):
|
|
if portal_user.partner_id.website_id:
|
|
# If the partner is linked to a website, it is considered as
|
|
# 'already registered' if the user is linked to the same
|
|
# website.
|
|
return user['website_id'] and user['website_id'][0] == portal_user.partner_id.website_id.id
|
|
# If the partner is not linked to a website, it means it has access
|
|
# to all the websites; the partner is considered as 'already
|
|
# registered' if the user is not linked to a website or if the user
|
|
# is linked to the current website as the current partner will be
|
|
# redirected to the current website when it will create its account.
|
|
return not user['website_id'] or user['website_id'][0] == self.env['website'].get_current_website().id
|
|
return False
|