diff --git a/src/servala/core/odoo.py b/src/servala/core/odoo.py index f30d6db..baeff4c 100644 --- a/src/servala/core/odoo.py +++ b/src/servala/core/odoo.py @@ -192,6 +192,14 @@ def get_invoice_addresses(user): domain=domain, fields=ADDRESS_FIELDS, ) + if invoice_addresses: + invoice_addresses.sort( + key=lambda addr: ( + addr["parent_id"][1] if addr.get("parent_id") else "", + addr["name"], + addr["id"], + ) + ) return invoice_addresses or [] except Exception: return [] diff --git a/src/servala/frontend/forms/organization.py b/src/servala/frontend/forms/organization.py index 37a2a35..915ad7b 100644 --- a/src/servala/frontend/forms/organization.py +++ b/src/servala/frontend/forms/organization.py @@ -61,13 +61,23 @@ class OrganizationCreateForm(OrganizationForm): if self.odoo_addresses: address_choices = [("", _("---------"))] for addr in self.odoo_addresses: + parent_name = None + parent_info = addr.get("parent_id") + if ( + parent_info + and isinstance(parent_info, (list, tuple)) + and len(parent_info) > 1 + ): + parent_name = parent_info[1] + display_parts = [ + parent_name, addr.get("name"), addr.get("street"), addr.get("city"), addr.get("zip"), ] - display_name = ", ".join(filter(None, display_parts)) + display_name = ", ".join([part for part in display_parts if part]) address_choices.append((str(addr["id"]), display_name)) self.fields["existing_odoo_address_id"].choices = address_choices