Fully implement odoo user search
This commit is contained in:
parent
284d716571
commit
611172afdb
1 changed files with 34 additions and 21 deletions
|
@ -91,26 +91,40 @@ CLIENT = OdooClient()
|
||||||
def get_invoice_addresses(user):
|
def get_invoice_addresses(user):
|
||||||
"""Used during organization creation: retrieves all invoice
|
"""Used during organization creation: retrieves all invoice
|
||||||
addresses the user owns or is connected to from the Odoo API."""
|
addresses the user owns or is connected to from the Odoo API."""
|
||||||
or_conditions = [
|
# We’re building our conditions in order:
|
||||||
("email", "ilike", user.email),
|
# - in exceptions, users may be using a billing account’s email
|
||||||
("child_ids.email", "ilike", user.email),
|
# - if the user is associated with an odoo user, return all billing
|
||||||
]
|
# addresses / organizations created by the user
|
||||||
|
# - if the user is associated with an odoo contact, return all billing
|
||||||
|
# addresses with the same parent_id
|
||||||
|
or_conditions = [("email", "ilike", email)]
|
||||||
|
|
||||||
# Attempt to find the Odoo user ID and add condition for records created by this user
|
email = user if isinstance(user, str) else user.email
|
||||||
try:
|
odoo_users = CLIENT.search_read(
|
||||||
odoo_users = odoo_request(
|
model="res.users",
|
||||||
model="res.users",
|
domain=[("login", "=", email)],
|
||||||
method="search_read",
|
fields=["id"],
|
||||||
domain=[("login", "=", user.email)],
|
limit=1,
|
||||||
fields=["id"],
|
)
|
||||||
limit=1, # Expecting at most one user
|
if odoo_users and (uid := odoo_users[0].get("id")):
|
||||||
)
|
or_conditions.append(("create_uid", "=", uid))
|
||||||
if odoo_users and (uid := odoo_users[0].get("id")):
|
|
||||||
or_conditions.append(("create_uid", "=", uid))
|
odoo_contacts = CLIENT.search_read(
|
||||||
except Exception:
|
model="res.partner",
|
||||||
pass
|
domain=[
|
||||||
|
("company_type", "=", "person"),
|
||||||
|
("type", "=", "contact"),
|
||||||
|
("email", "ilike", email),
|
||||||
|
],
|
||||||
|
fields=["id", "parent_id"],
|
||||||
|
)
|
||||||
|
if odoo_contacts:
|
||||||
|
for contact in odoo_contacts:
|
||||||
|
or_conditions.append(("parent_id", "=", contact["parent_id"][0]))
|
||||||
|
|
||||||
|
if len(or_conditions) > 1:
|
||||||
|
or_conditions = ["|"] * (len(or_conditions) - 1) + or_conditions
|
||||||
|
|
||||||
user_conditions = ["|"] * (len(or_conditions) - 1) + or_conditions
|
|
||||||
# The domain requires the partner to be an invoice address, that is:
|
# The domain requires the partner to be an invoice address, that is:
|
||||||
# Of the company_type=person, and type=invoice.
|
# Of the company_type=person, and type=invoice.
|
||||||
# If we were searching for an existing organization, we would also have to
|
# If we were searching for an existing organization, we would also have to
|
||||||
|
@ -118,12 +132,11 @@ def get_invoice_addresses(user):
|
||||||
domain = [
|
domain = [
|
||||||
("company_type", "=", "person"),
|
("company_type", "=", "person"),
|
||||||
("type", "=", "invoice"),
|
("type", "=", "invoice"),
|
||||||
] + user_conditions
|
] + or_conditions
|
||||||
|
|
||||||
try:
|
try:
|
||||||
invoice_addresses = odoo_request(
|
invoice_addresses = CLIENT.search_read(
|
||||||
model="res.partner",
|
model="res.partner",
|
||||||
method="search_read",
|
|
||||||
domain=domain,
|
domain=domain,
|
||||||
fields=ADDRESS_FIELDS,
|
fields=ADDRESS_FIELDS,
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue