Skip to content

Commit c8bfec9

Browse files
[IMP] report_partner_address: remove sync address_details from parent
1 parent eb32d6d commit c8bfec9

6 files changed

Lines changed: 24 additions & 57 deletions

File tree

report_partner_address/README.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ Details.
5151

5252
If Address Details is left blank, the standard address format is used.
5353

54+
Note: Address Details does not sync to child partners like Odoo’s
55+
standard address fields.
56+
5457
Bug Tracker
5558
===========
5659

report_partner_address/models/res_partner.py

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,18 @@
11
# Copyright 2025 Quartile (https://www.quartile.co)
22
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
33

4-
from odoo import api, fields, models
4+
from odoo import fields, models
55

66

77
class ResPartner(models.Model):
88
_inherit = "res.partner"
99

1010
address_details = fields.Text(
11-
compute="_compute_address_details",
12-
store=True,
13-
readonly=False,
1411
translate=True,
15-
recursive=True,
1612
help="Custom address format used in reports and portal pages. "
1713
"When set, this replaces the standard address format for external display.",
1814
)
1915

20-
@api.depends("parent_id.address_details", "type")
21-
def _compute_address_details(self):
22-
for partner in self:
23-
if partner.parent_id and partner.type == "contact":
24-
partner.address_details = partner.parent_id.address_details
25-
# No translation sync here to avoid unnecessary DB operations
26-
27-
@api.model
28-
def _address_fields(self):
29-
"""For address_details to be synced from parent."""
30-
return super()._address_fields() + ["address_details"]
31-
32-
def _fields_sync(self, values):
33-
"""Copy address_details translations from parent for contacts."""
34-
result = super()._fields_sync(values)
35-
parent = self.parent_id
36-
if parent and self.type == "contact" and parent.address_details:
37-
# Copy JSONB translations directly to avoid recursion
38-
self.env.cr.execute(
39-
"""
40-
UPDATE res_partner
41-
SET address_details = p.address_details
42-
FROM res_partner p
43-
WHERE res_partner.id = %(partner_id)s
44-
AND p.id = %(parent_id)s
45-
""",
46-
{"partner_id": self.id, "parent_id": parent.id},
47-
)
48-
return result
49-
5016
def _prepare_display_address(self, without_company=False):
5117
self.ensure_one()
5218
address_format, args = super()._prepare_display_address(

report_partner_address/readme/USAGE.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@
44
The address in reports and portal pages will use the value from Address Details.
55

66
If Address Details is left blank, the standard address format is used.
7+
8+
Note: Address Details does not sync to child partners like Odoo’s standard address fields.

report_partner_address/static/description/index.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,8 @@ <h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
397397
<p>The address in reports and portal pages will use the value from Address
398398
Details.</p>
399399
<p>If Address Details is left blank, the standard address format is used.</p>
400+
<p>Note: Address Details does not sync to child partners like Odoo’s
401+
standard address fields.</p>
400402
</div>
401403
<div class="section" id="bug-tracker">
402404
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>

report_partner_address/tests/test_report_partner_address.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,27 +55,24 @@ def test_address_details_empty_uses_standard_format(self):
5555
self.assertIn("123 Main St", res)
5656
self.assertIn("Springfield", res)
5757

58-
def test_contact_inherits_address_details_from_parent(self):
58+
def test_contact_does_not_inherit_address_details(self):
5959
contact = self.env["res.partner"].create(
6060
{"name": "Contact Person", "type": "contact", "parent_id": self.partner.id}
6161
)
62-
self.assertEqual(
63-
contact.address_details,
64-
"Test Company\n1-2-3 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan",
62+
res = contact.with_context(lang="ja_JP")._display_address()
63+
# Should use standard format of parent address since address_details is empty
64+
self.assertEqual(res, "150-0001\n Shibuya-ku, Tokyo\n1-2-3 Jingumae\n\n日本")
65+
# Contact address_details should be empty (do not inherit from the parent)
66+
self.assertFalse(contact.address_details)
67+
contact.with_context(lang="ja_JP").write(
68+
{"address_details": "〒150-0001\n東京都渋谷区神宮前1-2\nテスト株式会社"}
6569
)
66-
self.assertEqual(
67-
contact.with_context(lang="ja_JP").address_details,
68-
"〒150-0001\n東京都渋谷区神宮前1-2-3\nテスト株式会社",
70+
contact.address_details = (
71+
"Test Company\n1-2 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan"
6972
)
70-
71-
def test_non_contact_does_not_inherit_address_details(self):
72-
delivery_address = self.env["res.partner"].create(
73-
{
74-
"name": "Delivery Address",
75-
"type": "delivery",
76-
"parent_id": self.partner.id,
77-
"street": "456 Delivery St",
78-
}
73+
res = contact.with_context(lang="en_US")._display_address()
74+
self.assertEqual(
75+
res, "Test Company\n1-2 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan"
7976
)
80-
# Non-contact address should NOT inherit parent's address_details
81-
self.assertFalse(delivery_address.address_details)
77+
res = contact.with_context(lang="ja_JP")._display_address()
78+
self.assertEqual(res, "〒150-0001\n東京都渋谷区神宮前1-2\nテスト株式会社")

report_partner_address/views/res_partner_views.xml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
<field name="inherit_id" ref="base.view_partner_form" />
66
<field name="arch" type="xml">
77
<xpath expr="//div[hasclass('o_address_format')]" position="after">
8-
<field
9-
name="address_details"
10-
readonly="type =='contact' and parent_id != False"
11-
/>
8+
<field name="address_details" />
129
</xpath>
1310
</field>
1411
</record>

0 commit comments

Comments
 (0)