details: https://code.tryton.org/tryton/commit/21569807a4b3
branch: default
user: Cédric Krier <[email protected]>
date: Fri Feb 27 12:55:11 2026 +0100
description:
Add attn to address
Closes #14633
diffstat:
modules/party/CHANGELOG | 1 +
modules/party/address.py | 3 +++
modules/party/party.py | 5 +++--
modules/party/view/address_form.xml | 3 +++
modules/party/view/address_form_simple.xml | 3 +++
modules/party/view/address_tree.xml | 1 +
modules/party/view/address_tree_sequence.xml | 1 +
modules/stock/delivery_note.fodt | 1 -
modules/stock/shipment.py | 2 +-
modules/stock_package_shipping/stock.py | 16 ----------------
modules/stock_package_shipping_dpd/stock.py | 5 ++---
modules/stock_package_shipping_mygls/stock.py | 5 ++---
modules/stock_package_shipping_sendcloud/stock.py | 10 ++++------
modules/stock_package_shipping_ups/stock.py | 5 ++---
modules/web_shop_shopify/party.py | 7 +++++--
15 files changed, 31 insertions(+), 37 deletions(-)
diffs (267 lines):
diff -r 3715120393fa -r 21569807a4b3 modules/party/CHANGELOG
--- a/modules/party/CHANGELOG Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/party/CHANGELOG Fri Feb 27 12:55:11 2026 +0100
@@ -1,3 +1,4 @@
+* Add attn to address
* Add support for Python 3.14
* Remove support for Python 3.9
* Add a menu entry for party identifiers
diff -r 3715120393fa -r 21569807a4b3 modules/party/address.py
--- a/modules/party/address.py Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/party/address.py Fri Feb 27 12:55:11 2026 +0100
@@ -34,6 +34,7 @@
party_name = fields.Char(
"Party Name",
help="If filled, replace the name of the party for address formatting")
+ attn = fields.Char("Attn")
street = fields.Function(fields.Text(
"Street",
@@ -263,6 +264,8 @@
if context.get('address_attention_party', False):
substitutions['attn'] = (
context['address_attention_party'].full_name)
+ else:
+ substitutions['attn'] = getattr(self, 'attn', None) or ''
for key, value in list(substitutions.items()):
substitutions[key.upper()] = value.upper()
substitutions.update(self._get_street_substitutions())
diff -r 3715120393fa -r 21569807a4b3 modules/party/party.py
--- a/modules/party/party.py Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/party/party.py Fri Feb 27 12:55:11 2026 +0100
@@ -1285,11 +1285,12 @@
['type', 'code'],
[None, '****']),
(Address, [('party', '=', party_id)], True,
- ['street_unstructured', 'street_name', 'building_name',
+ ['party_name', 'attn',
+ 'street_unstructured', 'street_name', 'building_name',
'building_number', 'unit_number', 'floor_number',
'room_number', 'post_box', 'private_bag', 'post_office',
'postal_code', 'city', 'country', 'subdivision'],
- [None] * 14),
+ [None] * 16),
(ContactMechanism, [('party', '=', party_id)], True,
['type', 'value', 'name', 'comment'],
['other', '****', None, None]),
diff -r 3715120393fa -r 21569807a4b3 modules/party/view/address_form.xml
--- a/modules/party/view/address_form.xml Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/party/view/address_form.xml Fri Feb 27 12:55:11 2026 +0100
@@ -4,8 +4,11 @@
<form col="6">
<label name="party"/>
<field name="party" colspan="5"/>
+
<label name="party_name"/>
<field name="party_name"/>
+ <label name="attn"/>
+ <field name="attn"/>
<group colspan="2" col="-1" id="checkboxes">
<label name="active"/>
<field name="active"
diff -r 3715120393fa -r 21569807a4b3 modules/party/view/address_form_simple.xml
--- a/modules/party/view/address_form_simple.xml Wed Mar 25 08:20:17
2026 +0100
+++ b/modules/party/view/address_form_simple.xml Fri Feb 27 12:55:11
2026 +0100
@@ -4,8 +4,11 @@
<form col="6">
<label name="party"/>
<field name="party" colspan="5"/>
+
<label name="party_name"/>
<field name="party_name"/>
+ <label name="attn"/>
+ <field name="attn"/>
<group colspan="2" col="-1" id="checkboxes">
<label name="active"/>
<field name="active"
diff -r 3715120393fa -r 21569807a4b3 modules/party/view/address_tree.xml
--- a/modules/party/view/address_tree.xml Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/party/view/address_tree.xml Fri Feb 27 12:55:11 2026 +0100
@@ -4,6 +4,7 @@
<tree>
<field name="party" expand="1"/>
<field name="party_name" optional="0"/>
+ <field name="attn" optional="1"/>
<field name="street_single_line" expand="2"/>
<field name="postal_code"/>
<field name="city"/>
diff -r 3715120393fa -r 21569807a4b3
modules/party/view/address_tree_sequence.xml
--- a/modules/party/view/address_tree_sequence.xml Wed Mar 25 08:20:17
2026 +0100
+++ b/modules/party/view/address_tree_sequence.xml Fri Feb 27 12:55:11
2026 +0100
@@ -4,6 +4,7 @@
<tree sequence="sequence">
<field name="party" expand="1"/>
<field name="party_name" optional="0"/>
+ <field name="attn" optional="1"/>
<field name="street_single_line" expand="2"/>
<field name="postal_code"/>
<field name="city"/>
diff -r 3715120393fa -r 21569807a4b3 modules/stock/delivery_note.fodt
--- a/modules/stock/delivery_note.fodt Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/stock/delivery_note.fodt Fri Feb 27 12:55:11 2026 +0100
@@ -538,7 +538,6 @@
<text:p text:style-name="P23"/>
<text:p text:style-name="P21"><text:placeholder
text:placeholder-type="text"><replace
text:p="set_lang(shipment.delivery_address.party.lang)"></text:placeholder></text:p>
<text:p text:style-name="P21"><text:placeholder
text:placeholder-type="text"><replace
text:p="shipment.set_lang(shipment.delivery_address.party.lang)"></text:placeholder></text:p>
- <text:p text:style-name="P21"><text:placeholder
text:placeholder-type="text"><shipment.customer.full_name></text:placeholder></text:p>
<text:p text:style-name="P21"><text:placeholder
text:placeholder-type="text"><for each="line in
shipment.delivery_address.full_address.split('\n')"></text:placeholder></text:p>
<text:p text:style-name="P19"><text:placeholder
text:placeholder-type="text"><line></text:placeholder></text:p>
<text:p text:style-name="P19"><text:placeholder
text:placeholder-type="text"></for></text:placeholder></text:p>
diff -r 3715120393fa -r 21569807a4b3 modules/stock/shipment.py
--- a/modules/stock/shipment.py Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/stock/shipment.py Fri Feb 27 12:55:11 2026 +0100
@@ -3101,7 +3101,7 @@
@classmethod
def execute(cls, ids, data):
- with Transaction().set_context(address_with_party=False):
+ with Transaction().set_context(address_with_party=True):
return super().execute(ids, data)
@classmethod
diff -r 3715120393fa -r 21569807a4b3 modules/stock_package_shipping/stock.py
--- a/modules/stock_package_shipping/stock.py Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/stock_package_shipping/stock.py Fri Feb 27 12:55:11 2026 +0100
@@ -419,19 +419,3 @@
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 3715120393fa -r 21569807a4b3 modules/stock_package_shipping_dpd/stock.py
--- a/modules/stock_package_shipping_dpd/stock.py Wed Mar 25 08:20:17
2026 +0100
+++ b/modules/stock_package_shipping_dpd/stock.py Fri Feb 27 12:55:11
2026 +0100
@@ -16,7 +16,6 @@
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
@@ -214,8 +213,8 @@
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 ''
+ name = address.party_full_name
+ contact = address.attn or ''
if with_contact and not contact:
contact = party.full_name
shipping_party = {
diff -r 3715120393fa -r 21569807a4b3
modules/stock_package_shipping_mygls/stock.py
--- a/modules/stock_package_shipping_mygls/stock.py Wed Mar 25 08:20:17
2026 +0100
+++ b/modules/stock_package_shipping_mygls/stock.py Fri Feb 27 12:55:11
2026 +0100
@@ -10,7 +10,6 @@
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
@@ -233,8 +232,8 @@
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
+ name = address.party_full_name
+ contact_name = address.attn or ''
return {
'Name': name,
'Street': street_name,
diff -r 3715120393fa -r 21569807a4b3
modules/stock_package_shipping_sendcloud/stock.py
--- a/modules/stock_package_shipping_sendcloud/stock.py Wed Mar 25 08:20:17
2026 +0100
+++ b/modules/stock_package_shipping_sendcloud/stock.py Fri Feb 27 12:55:11
2026 +0100
@@ -8,7 +8,6 @@
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
@@ -149,17 +148,16 @@
cm = UoM(ModelData.get_id('product', 'uom_centimeter'))
kg = UoM(ModelData.get_id('product', 'uom_kilogram'))
- party = shipment.shipping_to
address = shipment.shipping_to_address
phone = address.contact_mechanism_get(
{'phone', 'mobile'}, usage=usage)
email = address.contact_mechanism_get('email', usage=usage)
street_lines = (address.street or '').splitlines()
- name = address_name(address, party)
- if party.full_name != name:
- company_name = name
- name = party.full_name
+ if address.attn:
+ name = address.attn
+ company_name = address.party_full_name
else:
+ name = address.party_full_name
company_name = None
parcel = {
'name': name,
diff -r 3715120393fa -r 21569807a4b3 modules/stock_package_shipping_ups/stock.py
--- a/modules/stock_package_shipping_ups/stock.py Wed Mar 25 08:20:17
2026 +0100
+++ b/modules/stock_package_shipping_ups/stock.py Fri Feb 27 12:55:11
2026 +0100
@@ -17,7 +17,6 @@
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
@@ -235,8 +234,8 @@
}
def get_shipping_party(self, party, address, usage=None):
- name = address_name(address, party)
- attention_name = party.full_name
+ name = address.party_full_name
+ attention_name = address.attn or name
shipping_party = {
'Name': name[:35],
'AttentionName': attention_name[:35],
diff -r 3715120393fa -r 21569807a4b3 modules/web_shop_shopify/party.py
--- a/modules/web_shop_shopify/party.py Wed Mar 25 08:20:17 2026 +0100
+++ b/modules/web_shop_shopify/party.py Fri Feb 27 12:55:11 2026 +0100
@@ -137,8 +137,10 @@
values = {}
values['party_name'] = remove_forbidden_chars(address['name'] or '')
if address['company']:
- values['party_name'] += (
- f"({remove_forbidden_chars(address['company'])})")
+ values['attn'] = values['party_name']
+ values['party_name'] = remove_forbidden_chars(address['company'])
+ else:
+ values['attn'] = ''
values['street'] = '\n'.join(filter(None, [
address['address1'], address['address2']]))
values['city'] = remove_forbidden_chars(address['city'] or '')
@@ -167,6 +169,7 @@
def shopify_values(self):
values = {}
values['party_name'] = self.party_name or ''
+ values['attn'] = self.attn or ''
values['street'] = self.street or ''
values['city'] = self.city or ''
values['postal_code'] = self.postal_code or ''