Odoo18-Base/addons/website/wizard/portal_wizard.py
2025-01-06 10:57:38 +07:00

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