details: https://code.tryton.org/tryton/commit/b2767eab48e5
branch: default
user: Cédric Krier <[email protected]>
date: Sat Nov 08 09:53:01 2025 +0100
description:
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
diffstat:
modules/stock_package_shipping/stock.py | 16 ++++++++++++++++
modules/stock_package_shipping_dpd/stock.py | 9 ++++++---
modules/stock_package_shipping_mygls/stock.py | 7 +++++--
modules/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(-)
diffs (150 lines):
diff -r d9169aaeb05d -r b2767eab48e5 modules/stock_package_shipping/stock.py
--- a/modules/stock_package_shipping/stock.py Thu Nov 20 22:07:43 2025 +0100
+++ b/modules/stock_package_shipping/stock.py Sat Nov 08 09:53:01 2025 +0100
@@ -418,3 +418,19 @@
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 -r d9169aaeb05d -r b2767eab48e5 modules/stock_package_shipping_dpd/stock.py
--- a/modules/stock_package_shipping_dpd/stock.py Thu Nov 20 22:07:43
2025 +0100
+++ b/modules/stock_package_shipping_dpd/stock.py Sat Nov 08 09:53:01
2025 +0100
@@ -16,6 +16,7 @@
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 @@
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 -r d9169aaeb05d -r b2767eab48e5
modules/stock_package_shipping_mygls/stock.py
--- a/modules/stock_package_shipping_mygls/stock.py Thu Nov 20 22:07:43
2025 +0100
+++ b/modules/stock_package_shipping_mygls/stock.py Sat Nov 08 09:53:01
2025 +0100
@@ -10,6 +10,7 @@
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 @@
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 -r d9169aaeb05d -r b2767eab48e5
modules/stock_package_shipping_sendcloud/stock.py
--- a/modules/stock_package_shipping_sendcloud/stock.py Thu Nov 20 22:07:43
2025 +0100
+++ b/modules/stock_package_shipping_sendcloud/stock.py Sat Nov 08 09:53:01
2025 +0100
@@ -8,6 +8,7 @@
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 @@
{'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 -r d9169aaeb05d -r b2767eab48e5 modules/stock_package_shipping_ups/stock.py
--- a/modules/stock_package_shipping_ups/stock.py Thu Nov 20 22:07:43
2025 +0100
+++ b/modules/stock_package_shipping_ups/stock.py Sat Nov 08 09:53:01
2025 +0100
@@ -17,6 +17,7 @@
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 @@
}
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 -r d9169aaeb05d -r b2767eab48e5 modules/web_shop_shopify/party.py
--- a/modules/web_shop_shopify/party.py Thu Nov 20 22:07:43 2025 +0100
+++ b/modules/web_shop_shopify/party.py Sat Nov 08 09:53:01 2025 +0100
@@ -97,7 +97,7 @@
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 '')