From 6a05c7597d3208a4145d34af5aff647f442d668e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 8 Nov 2025 09:53:01 +0100 Subject: [PATCH] Remove party name from address name for shipping services If the party name of the address starts with the name of the party, we do not need to repeat it as the shipping services have also a field to store the party name. Closes #14352 --- modules/stock_package_shipping/stock.py | 16 ++++++++++++++++ modules/stock_package_shipping_dpd/stock.py | 9 ++++++--- modules/stock_package_shipping_mygls/stock.py | 7 +++++-- .../stock_package_shipping_sendcloud/stock.py | 9 +++++---- modules/stock_package_shipping_ups/stock.py | 7 +++++-- modules/web_shop_shopify/party.py | 2 +- 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/modules/stock_package_shipping/stock.py b/modules/stock_package_shipping/stock.py index accd66b1e7..f9bc1a4e64 100644 --- a/modules/stock_package_shipping/stock.py +++ b/modules/stock_package_shipping/stock.py @@ -418,3 +418,19 @@ class PrintShippingLabel(Wizard): package_ids.append(package.id) labels.add(package.shipping_label) return action, {'ids': package_ids} + + +def address_name(address, party=None): + "Returns the party name of the address with party name removed" + if party is None: + party = address.party + name = address.party_full_name + for prefix in sorted([ + f'{party.full_name} / ', + f'{party.name} / ', + party.full_name, + party.name, + ], key=len, reverse=True): + if name.startswith(prefix) and name != prefix: + return name[len(prefix):] + return name diff --git a/modules/stock_package_shipping_dpd/stock.py b/modules/stock_package_shipping_dpd/stock.py index f7032ea38a..d7e4c432e0 100644 --- a/modules/stock_package_shipping_dpd/stock.py +++ b/modules/stock_package_shipping_dpd/stock.py @@ -16,6 +16,7 @@ from trytond.model import fields from trytond.model.exceptions import AccessError from trytond.modules.stock_package_shipping.exceptions import ( PackingValidationError) +from trytond.modules.stock_package_shipping.stock import address_name from trytond.pool import Pool, PoolMeta from trytond.transaction import Transaction from trytond.wizard import StateAction, StateTransition, Wizard @@ -213,15 +214,17 @@ class CreateDPDShipping(Wizard): else: street = address.street_name or '' house_no = address.numbers + name = address_name(address, party) + contact = party.full_name if party.full_name != name else '' shipping_party = { - 'name1': address.party_full_name[:50], - 'name2': '', + 'name1': name[:50], + 'name2': name[50:85], 'street': street[:50], 'houseNo': house_no[:8], 'country': address.country.code if address.country else '', 'zipCode': address.postal_code[:9], 'city': address.city[:50], - 'contact': party.full_name[:35], + 'contact': contact[:35], } phone = address.contact_mechanism_get({'phone', 'mobile'}, usage=usage) diff --git a/modules/stock_package_shipping_mygls/stock.py b/modules/stock_package_shipping_mygls/stock.py index f78aec3527..5b55325f5e 100644 --- a/modules/stock_package_shipping_mygls/stock.py +++ b/modules/stock_package_shipping_mygls/stock.py @@ -10,6 +10,7 @@ from trytond.model import fields from trytond.model.exceptions import AccessError from trytond.modules.stock_package_shipping.exceptions import ( PackingValidationError) +from trytond.modules.stock_package_shipping.stock import address_name from trytond.pool import Pool, PoolMeta from trytond.transaction import Transaction from trytond.wizard import StateAction, StateTransition, Wizard @@ -232,15 +233,17 @@ class ShipmentCreateShippingMyGLS(Wizard): house_number_info = address.building_name or '' phone = address.contact_mechanism_get({'phone', 'mobile'}, usage=usage) email = address.contact_mechanism_get('email', usage=usage) + name = address_name(address, party) + contact_name = party.full_name if party.full_name != name else None return { - 'Name': address.party_full_name, + 'Name': name, 'Street': street_name, 'HouseNumber': house_number, 'HouseNumberInfo': house_number_info, 'City': address.city, 'ZipCode': address.postal_code, 'CountryIsoCode': address.country.code, - 'ContactName': party.full_name, + 'ContactName': contact_name, 'ContactPhone': phone.value if phone else None, 'ContactEmail': email.value if email else None, } diff --git a/modules/stock_package_shipping_sendcloud/stock.py b/modules/stock_package_shipping_sendcloud/stock.py index fe604d0afc..f5a579beaa 100644 --- a/modules/stock_package_shipping_sendcloud/stock.py +++ b/modules/stock_package_shipping_sendcloud/stock.py @@ -8,6 +8,7 @@ from math import ceil from trytond.i18n import gettext from trytond.model import fields from trytond.model.exceptions import AccessError +from trytond.modules.stock_package_shipping.stock import address_name from trytond.pool import Pool, PoolMeta from trytond.transaction import Transaction from trytond.wizard import StateAction, StateTransition, Wizard @@ -154,11 +155,11 @@ class CreateShippingSendcloud(Wizard): {'phone', 'mobile'}, usage=usage) email = address.contact_mechanism_get('email', usage=usage) street_lines = (address.street or '').splitlines() + name = address_name(address, party) + company_name = party.full_name if party.full_name != name else None parcel = { - 'name': address.party_full_name, - 'company_name': ( - party.full_name if party.full_name != address.party_full_name - else None), + 'name': name, + 'company_name': company_name, 'address': street_lines[0] if street_lines else '', 'address_2': ( ' '.join(street_lines[1:]) if len(street_lines) > 1 else ''), diff --git a/modules/stock_package_shipping_ups/stock.py b/modules/stock_package_shipping_ups/stock.py index 95c94d6217..61a5d8a9a4 100644 --- a/modules/stock_package_shipping_ups/stock.py +++ b/modules/stock_package_shipping_ups/stock.py @@ -17,6 +17,7 @@ from trytond.model import fields from trytond.model.exceptions import AccessError from trytond.modules.stock_package_shipping.exceptions import ( PackingValidationError) +from trytond.modules.stock_package_shipping.stock import address_name from trytond.pool import Pool, PoolMeta from trytond.transaction import Transaction from trytond.wizard import StateAction, StateTransition, Wizard @@ -234,9 +235,11 @@ class CreateShippingUPS(Wizard): } def get_shipping_party(self, party, address, usage=None): + name = address_name(address, party) + attention_name = party.full_name shipping_party = { - 'Name': address.party_full_name[:35], - 'AttentionName': party.full_name[:35], + 'Name': name[:35], + 'AttentionName': attention_name[:35], 'Address': { 'AddressLine': [l[:35] for l in (address.street or '').splitlines()[:3]], diff --git a/modules/web_shop_shopify/party.py b/modules/web_shop_shopify/party.py index 7f61be5e21..966537182b 100644 --- a/modules/web_shop_shopify/party.py +++ b/modules/web_shop_shopify/party.py @@ -97,7 +97,7 @@ class Address(metaclass=PoolMeta): values['party_name'] = remove_forbidden_chars(address.name or '') if address.company: values['party_name'] += ( - f'({remove_forbidden_chars(address.company)})') + f'/ {remove_forbidden_chars(address.company)}') values['street'] = '\n'.join(filter(None, [ address.address1, address.address2])) values['city'] = remove_forbidden_chars(address.city or '')