From 5e18b5bcdca4a362d99775b0e16491a720dc90dd Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Fri, 19 Dec 2025 02:08:54 +0000 Subject: [PATCH 1/6] [ADD] report_partner_address Co-authored-by: Yoshi Tashiro --- report_partner_address/README.rst | 106 +++++ report_partner_address/__init__.py | 1 + report_partner_address/__manifest__.py | 18 + report_partner_address/i18n/ja.po | 37 ++ report_partner_address/models/__init__.py | 1 + report_partner_address/models/res_partner.py | 56 +++ report_partner_address/readme/CONTRIBUTORS.md | 3 + report_partner_address/readme/DESCRIPTION.md | 4 + report_partner_address/readme/USAGE.md | 6 + .../static/description/index.html | 444 ++++++++++++++++++ report_partner_address/tests/__init__.py | 1 + .../tests/test_report_partner_address.py | 81 ++++ .../views/ir_qweb_widget_templates.xml | 9 + .../views/res_partner_views.xml | 15 + 14 files changed, 782 insertions(+) create mode 100644 report_partner_address/README.rst create mode 100644 report_partner_address/__init__.py create mode 100644 report_partner_address/__manifest__.py create mode 100644 report_partner_address/i18n/ja.po create mode 100644 report_partner_address/models/__init__.py create mode 100644 report_partner_address/models/res_partner.py create mode 100644 report_partner_address/readme/CONTRIBUTORS.md create mode 100644 report_partner_address/readme/DESCRIPTION.md create mode 100644 report_partner_address/readme/USAGE.md create mode 100644 report_partner_address/static/description/index.html create mode 100644 report_partner_address/tests/__init__.py create mode 100644 report_partner_address/tests/test_report_partner_address.py create mode 100644 report_partner_address/views/ir_qweb_widget_templates.xml create mode 100644 report_partner_address/views/res_partner_views.xml diff --git a/report_partner_address/README.rst b/report_partner_address/README.rst new file mode 100644 index 0000000000..77c9786515 --- /dev/null +++ b/report_partner_address/README.rst @@ -0,0 +1,106 @@ +====================== +Report Partner Address +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:dae526d0b818dd891f1b023ae95c58d1b08f8443a443b054d55e73141a9df743 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github + :target: https://github.com/OCA/reporting-engine/tree/16.0/report_partner_address + :alt: OCA/reporting-engine +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-report_partner_address + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Adds a translatable Address Details field on partners for use in reports +and portal. + +Odoo prints documents in the partner's language but lacks a standard way +to display addresses in multiple languages. This module fills that gap. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +- Go to the partner record. +- Fill in Address Details, including translations for the active + languages. + +The address in reports and portal pages will use the value from Address +Details. + +If Address Details is left blank, the standard address format is used. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Quartile + +Contributors +------------ + +- Quartile + + - Yoshi Tashiro + - Aung Ko Ko Lin + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-yostashiro| image:: https://github.com/yostashiro.png?size=40px + :target: https://github.com/yostashiro + :alt: yostashiro +.. |maintainer-aungkokolin1997| image:: https://github.com/aungkokolin1997.png?size=40px + :target: https://github.com/aungkokolin1997 + :alt: aungkokolin1997 + +Current `maintainers `__: + +|maintainer-yostashiro| |maintainer-aungkokolin1997| + +This module is part of the `OCA/reporting-engine `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/report_partner_address/__init__.py b/report_partner_address/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/report_partner_address/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/report_partner_address/__manifest__.py b/report_partner_address/__manifest__.py new file mode 100644 index 0000000000..ea2a25881f --- /dev/null +++ b/report_partner_address/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2025 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Report Partner Address", + "summary": "Translatable partner address details for reports and portal", + "version": "16.0.1.0.0", + "author": "Quartile, Odoo Community Association (OCA)", + "category": "Reporting", + "website": "https://github.com/OCA/reporting-engine", + "license": "AGPL-3", + "depends": ["web"], + "data": [ + "views/ir_qweb_widget_templates.xml", + "views/res_partner_views.xml", + ], + "maintainers": ["yostashiro", "aungkokolin1997"], + "installable": True, +} diff --git a/report_partner_address/i18n/ja.po b/report_partner_address/i18n/ja.po new file mode 100644 index 0000000000..567abb9472 --- /dev/null +++ b/report_partner_address/i18n/ja.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_partner_address +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-21 08:50+0000\n" +"PO-Revision-Date: 2025-12-21 08:50+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: report_partner_address +#: model:ir.model.fields,field_description:report_partner_address.field_res_partner__address_details +#: model:ir.model.fields,field_description:report_partner_address.field_res_users__address_details +msgid "Address Details" +msgstr "アドレス詳細" + +#. module: report_partner_address +#: model:ir.model,name:report_partner_address.model_res_partner +msgid "Contact" +msgstr "連絡先" + +#. module: report_partner_address +#: model:ir.model.fields,help:report_partner_address.field_res_partner__address_details +#: model:ir.model.fields,help:report_partner_address.field_res_users__address_details +msgid "" +"Custom address format used in reports and portal pages. When set, this " +"replaces the standard address format for external display." +msgstr "" +"レポートやポータルページに適用されるアドレスフォーマット。設定されている場合、" +"対外表示用に標準のアドレスフォーマットがその内容で置き換えられます。" diff --git a/report_partner_address/models/__init__.py b/report_partner_address/models/__init__.py new file mode 100644 index 0000000000..91fed54d40 --- /dev/null +++ b/report_partner_address/models/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/report_partner_address/models/res_partner.py b/report_partner_address/models/res_partner.py new file mode 100644 index 0000000000..a073452fb5 --- /dev/null +++ b/report_partner_address/models/res_partner.py @@ -0,0 +1,56 @@ +# Copyright 2025 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + address_details = fields.Text( + compute="_compute_address_details", + store=True, + readonly=False, + translate=True, + help="Custom address format used in reports and portal pages. " + "When set, this replaces the standard address format for external display.", + ) + + @api.depends("parent_id.address_details", "type") + def _compute_address_details(self): + for partner in self: + if partner.parent_id and partner.type == "contact": + partner.address_details = partner.parent_id.address_details + # No translation sync here to avoid unnecessary DB operations + + @api.model + def _address_fields(self): + """For address_details to be synced from parent.""" + return super()._address_fields() + ["address_details"] + + def _fields_sync(self, values): + """Copy address_details translations from parent for contacts.""" + result = super()._fields_sync(values) + parent = self.parent_id + if parent and self.type == "contact" and parent.address_details: + # Copy JSONB translations directly to avoid recursion + self.env.cr.execute( + """ + UPDATE res_partner + SET address_details = p.address_details + FROM res_partner p + WHERE res_partner.id = %(partner_id)s + AND p.id = %(parent_id)s + """, + {"partner_id": self.id, "parent_id": parent.id}, + ) + return result + + def _prepare_display_address(self, without_company=False): + self.ensure_one() + address_format, args = super()._prepare_display_address( + without_company=without_company + ) + if self.address_details: + address_format = self.address_details + return address_format, args diff --git a/report_partner_address/readme/CONTRIBUTORS.md b/report_partner_address/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..2794613f37 --- /dev/null +++ b/report_partner_address/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- Quartile \<\> + - Yoshi Tashiro + - Aung Ko Ko Lin diff --git a/report_partner_address/readme/DESCRIPTION.md b/report_partner_address/readme/DESCRIPTION.md new file mode 100644 index 0000000000..61e62efa74 --- /dev/null +++ b/report_partner_address/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +Adds a translatable Address Details field on partners for use in reports and portal. + +Odoo prints documents in the partner's language but lacks a standard way to display +addresses in multiple languages. This module fills that gap. diff --git a/report_partner_address/readme/USAGE.md b/report_partner_address/readme/USAGE.md new file mode 100644 index 0000000000..7b4f8211fd --- /dev/null +++ b/report_partner_address/readme/USAGE.md @@ -0,0 +1,6 @@ +- Go to the partner record. +- Fill in Address Details, including translations for the active languages. + +The address in reports and portal pages will use the value from Address Details. + +If Address Details is left blank, the standard address format is used. diff --git a/report_partner_address/static/description/index.html b/report_partner_address/static/description/index.html new file mode 100644 index 0000000000..cb5131d277 --- /dev/null +++ b/report_partner_address/static/description/index.html @@ -0,0 +1,444 @@ + + + + + +Report Partner Address + + + +
+

Report Partner Address

+ + +

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

+

Adds a translatable Address Details field on partners for use in reports +and portal.

+

Odoo prints documents in the partner’s language but lacks a standard way +to display addresses in multiple languages. This module fills that gap.

+

Table of contents

+ +
+

Usage

+
    +
  • Go to the partner record.
  • +
  • Fill in Address Details, including translations for the active +languages.
  • +
+

The address in reports and portal pages will use the value from Address +Details.

+

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

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Quartile
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainers:

+

yostashiro aungkokolin1997

+

This module is part of the OCA/reporting-engine project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/report_partner_address/tests/__init__.py b/report_partner_address/tests/__init__.py new file mode 100644 index 0000000000..7ad72d135d --- /dev/null +++ b/report_partner_address/tests/__init__.py @@ -0,0 +1 @@ +from . import test_report_partner_address diff --git a/report_partner_address/tests/test_report_partner_address.py b/report_partner_address/tests/test_report_partner_address.py new file mode 100644 index 0000000000..da977e1b55 --- /dev/null +++ b/report_partner_address/tests/test_report_partner_address.py @@ -0,0 +1,81 @@ +# Copyright 2025 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase, tagged + + +@tagged("post_install", "-at_install") +class TestReportPartnerAddress(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + ja = ( + cls.env["res.lang"] + .with_context(active_test=False) + .search([("code", "=", "ja_JP")]) + ) + cls.env["base.language.install"].create({"lang_ids": [ja.id]}).lang_install() + cls.partner = cls.env["res.partner"].create( + { + "name": "Test Company", + "street": "1-2-3 Jingumae", + "city": "Shibuya-ku, Tokyo", + "zip": "150-0001", + "country_id": cls.env.ref("base.jp").id, + } + ) + # Japanese address format (native) + cls.partner.with_context(lang="ja_JP").write( + {"address_details": "〒150-0001\n東京都渋谷区神宮前1-2-3\nテスト株式会社"} + ) + # English transliteration for international use + cls.partner.address_details = ( + "Test Company\n1-2-3 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan" + ) + + def test_address_details_always_used(self): + res = self.partner.with_context(lang="en_US")._display_address() + self.assertEqual( + res, "Test Company\n1-2-3 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan" + ) + res = self.partner.with_context(lang="ja_JP")._display_address() + self.assertEqual(res, "〒150-0001\n東京都渋谷区神宮前1-2-3\nテスト株式会社") + + def test_address_details_empty_uses_standard_format(self): + partner = self.env["res.partner"].create( + { + "name": "No Details Partner", + "street": "123 Main St", + "city": "Springfield", + "zip": "12345", + "country_id": self.env.ref("base.us").id, + } + ) + res = partner._display_address() + self.assertIn("123 Main St", res) + self.assertIn("Springfield", res) + + def test_contact_inherits_address_details_from_parent(self): + contact = self.env["res.partner"].create( + {"name": "Contact Person", "type": "contact", "parent_id": self.partner.id} + ) + self.assertEqual( + contact.address_details, + "Test Company\n1-2-3 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan", + ) + self.assertEqual( + contact.with_context(lang="ja_JP").address_details, + "〒150-0001\n東京都渋谷区神宮前1-2-3\nテスト株式会社", + ) + + def test_non_contact_does_not_inherit_address_details(self): + delivery_address = self.env["res.partner"].create( + { + "name": "Delivery Address", + "type": "delivery", + "parent_id": self.partner.id, + "street": "456 Delivery St", + } + ) + # Non-contact address should NOT inherit parent's address_details + self.assertFalse(delivery_address.address_details) diff --git a/report_partner_address/views/ir_qweb_widget_templates.xml b/report_partner_address/views/ir_qweb_widget_templates.xml new file mode 100644 index 0000000000..cda0b2f466 --- /dev/null +++ b/report_partner_address/views/ir_qweb_widget_templates.xml @@ -0,0 +1,9 @@ + + + diff --git a/report_partner_address/views/res_partner_views.xml b/report_partner_address/views/res_partner_views.xml new file mode 100644 index 0000000000..8c1dada41d --- /dev/null +++ b/report_partner_address/views/res_partner_views.xml @@ -0,0 +1,15 @@ + + + res.partner.form + res.partner + + + + + + + + From 9d91a562fa59a73f5f60546349e830ac802be15d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 22 Dec 2025 20:35:45 +0000 Subject: [PATCH 2/6] [UPD] Update report_partner_address.pot --- report_partner_address/i18n/ja.po | 5 +-- .../i18n/report_partner_address.pot | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 report_partner_address/i18n/report_partner_address.pot diff --git a/report_partner_address/i18n/ja.po b/report_partner_address/i18n/ja.po index 567abb9472..8540d01e86 100644 --- a/report_partner_address/i18n/ja.po +++ b/report_partner_address/i18n/ja.po @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2025-12-21 08:50+0000\n" "Last-Translator: \n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -33,5 +34,5 @@ msgid "" "Custom address format used in reports and portal pages. When set, this " "replaces the standard address format for external display." msgstr "" -"レポートやポータルページに適用されるアドレスフォーマット。設定されている場合、" -"対外表示用に標準のアドレスフォーマットがその内容で置き換えられます。" +"レポートやポータルページに適用されるアドレスフォーマット。設定されている場" +"合、対外表示用に標準のアドレスフォーマットがその内容で置き換えられます。" diff --git a/report_partner_address/i18n/report_partner_address.pot b/report_partner_address/i18n/report_partner_address.pot new file mode 100644 index 0000000000..be4a3fd574 --- /dev/null +++ b/report_partner_address/i18n/report_partner_address.pot @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_partner_address +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: report_partner_address +#: model:ir.model.fields,field_description:report_partner_address.field_res_partner__address_details +#: model:ir.model.fields,field_description:report_partner_address.field_res_users__address_details +msgid "Address Details" +msgstr "" + +#. module: report_partner_address +#: model:ir.model,name:report_partner_address.model_res_partner +msgid "Contact" +msgstr "" + +#. module: report_partner_address +#: model:ir.model.fields,help:report_partner_address.field_res_partner__address_details +#: model:ir.model.fields,help:report_partner_address.field_res_users__address_details +msgid "" +"Custom address format used in reports and portal pages. When set, this " +"replaces the standard address format for external display." +msgstr "" From 6098f8d9779f13e0cfabbf14d657c81add48c332 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 22 Dec 2025 20:39:44 +0000 Subject: [PATCH 3/6] [BOT] post-merge updates --- report_partner_address/README.rst | 20 ++++++++----- .../static/description/icon.png | Bin 0 -> 10254 bytes .../static/description/index.html | 28 +++++++++++------- 3 files changed, 29 insertions(+), 19 deletions(-) create mode 100644 report_partner_address/static/description/icon.png diff --git a/report_partner_address/README.rst b/report_partner_address/README.rst index 77c9786515..37b4b3af8b 100644 --- a/report_partner_address/README.rst +++ b/report_partner_address/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ====================== Report Partner Address ====================== @@ -7,13 +11,13 @@ Report Partner Address !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:dae526d0b818dd891f1b023ae95c58d1b08f8443a443b054d55e73141a9df743 + !! source digest: sha256:7c019dbfd9524b0b0daaaafa5fbbc77df627c40d3bb1e1b6bf9bea2f5a224972 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github @@ -42,9 +46,9 @@ to display addresses in multiple languages. This module fills that gap. Usage ===== -- Go to the partner record. -- Fill in Address Details, including translations for the active - languages. +- Go to the partner record. +- Fill in Address Details, including translations for the active + languages. The address in reports and portal pages will use the value from Address Details. @@ -72,10 +76,10 @@ Authors Contributors ------------ -- Quartile +- Quartile - - Yoshi Tashiro - - Aung Ko Ko Lin + - Yoshi Tashiro + - Aung Ko Ko Lin Maintainers ----------- diff --git a/report_partner_address/static/description/icon.png b/report_partner_address/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 -Report Partner Address +README.rst -
-

Report Partner Address

+
+ + +Odoo Community Association + +
+

Report Partner Address

-

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

Adds a translatable Address Details field on partners for use in reports and portal.

Odoo prints documents in the partner’s language but lacks a standard way @@ -388,7 +393,7 @@

Report Partner Address

-

Usage

+

Usage

  • Go to the partner record.
  • Fill in Address Details, including translations for the active @@ -399,7 +404,7 @@

    Usage

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

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -407,15 +412,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Quartile
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -440,5 +445,6 @@

Maintainers

+
From ab56b986a6c0af383127fce148f7a280d4459091 Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Tue, 23 Dec 2025 03:19:57 +0000 Subject: [PATCH 4/6] [IMP] report_partner_address: pre-commit auto fixes --- report_partner_address/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 report_partner_address/pyproject.toml diff --git a/report_partner_address/pyproject.toml b/report_partner_address/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/report_partner_address/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" From eb32d6da5fb413e55575fe68bcae6743e351bc29 Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Tue, 23 Dec 2025 03:33:17 +0000 Subject: [PATCH 5/6] [MIG] report_partner_address: Migration to 18.0 --- report_partner_address/README.rst | 28 ++++++++--------- report_partner_address/__manifest__.py | 2 +- report_partner_address/models/res_partner.py | 1 + .../static/description/index.html | 30 ++++++++----------- .../views/res_partner_views.xml | 4 +-- 5 files changed, 28 insertions(+), 37 deletions(-) diff --git a/report_partner_address/README.rst b/report_partner_address/README.rst index 37b4b3af8b..85b9fb3508 100644 --- a/report_partner_address/README.rst +++ b/report_partner_address/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ====================== Report Partner Address ====================== @@ -17,17 +13,17 @@ Report Partner Address .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github - :target: https://github.com/OCA/reporting-engine/tree/16.0/report_partner_address + :target: https://github.com/OCA/reporting-engine/tree/18.0/report_partner_address :alt: OCA/reporting-engine .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-report_partner_address + :target: https://translation.odoo-community.org/projects/reporting-engine-18-0/reporting-engine-18-0-report_partner_address :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -46,9 +42,9 @@ to display addresses in multiple languages. This module fills that gap. Usage ===== -- Go to the partner record. -- Fill in Address Details, including translations for the active - languages. +- Go to the partner record. +- Fill in Address Details, including translations for the active + languages. The address in reports and portal pages will use the value from Address Details. @@ -61,7 +57,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,10 +72,10 @@ Authors Contributors ------------ -- Quartile +- Quartile - - Yoshi Tashiro - - Aung Ko Ko Lin + - Yoshi Tashiro + - Aung Ko Ko Lin Maintainers ----------- @@ -105,6 +101,6 @@ Current `maintainers `__: |maintainer-yostashiro| |maintainer-aungkokolin1997| -This module is part of the `OCA/reporting-engine `_ project on GitHub. +This module is part of the `OCA/reporting-engine `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/report_partner_address/__manifest__.py b/report_partner_address/__manifest__.py index ea2a25881f..0a8548df78 100644 --- a/report_partner_address/__manifest__.py +++ b/report_partner_address/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Report Partner Address", "summary": "Translatable partner address details for reports and portal", - "version": "16.0.1.0.0", + "version": "18.0.1.0.0", "author": "Quartile, Odoo Community Association (OCA)", "category": "Reporting", "website": "https://github.com/OCA/reporting-engine", diff --git a/report_partner_address/models/res_partner.py b/report_partner_address/models/res_partner.py index a073452fb5..4c83aec3a1 100644 --- a/report_partner_address/models/res_partner.py +++ b/report_partner_address/models/res_partner.py @@ -12,6 +12,7 @@ class ResPartner(models.Model): store=True, readonly=False, translate=True, + recursive=True, help="Custom address format used in reports and portal pages. " "When set, this replaces the standard address format for external display.", ) diff --git a/report_partner_address/static/description/index.html b/report_partner_address/static/description/index.html index 8d1ae22a87..477e730859 100644 --- a/report_partner_address/static/description/index.html +++ b/report_partner_address/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Report Partner Address -
+
+

Report Partner Address

- - -Odoo Community Association - -
-

Report Partner Address

-

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

Adds a translatable Address Details field on partners for use in reports and portal.

Odoo prints documents in the partner’s language but lacks a standard way @@ -393,7 +388,7 @@

Report Partner Address

-

Usage

+

Usage

  • Go to the partner record.
  • Fill in Address Details, including translations for the active @@ -404,23 +399,23 @@

    Usage

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

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Quartile
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -440,11 +435,10 @@

Maintainers

promote its widespread use.

Current maintainers:

yostashiro aungkokolin1997

-

This module is part of the OCA/reporting-engine project on GitHub.

+

This module is part of the OCA/reporting-engine project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

-
diff --git a/report_partner_address/views/res_partner_views.xml b/report_partner_address/views/res_partner_views.xml index 8c1dada41d..c9fc7ddebb 100644 --- a/report_partner_address/views/res_partner_views.xml +++ b/report_partner_address/views/res_partner_views.xml @@ -4,10 +4,10 @@ res.partner - + From c8b90673fae23c76605cf13db9963372c654182f Mon Sep 17 00:00:00 2001 From: Aungkokolin1997 Date: Tue, 23 Dec 2025 08:37:47 +0000 Subject: [PATCH 6/6] [IMP] report_partner_address: remove sync address_details from parent --- report_partner_address/README.rst | 3 ++ report_partner_address/models/res_partner.py | 36 +------------------ report_partner_address/readme/USAGE.md | 2 ++ .../static/description/index.html | 2 ++ .../tests/test_report_partner_address.py | 25 ------------- .../views/res_partner_views.xml | 5 +-- 6 files changed, 9 insertions(+), 64 deletions(-) diff --git a/report_partner_address/README.rst b/report_partner_address/README.rst index 85b9fb3508..00ddf4f39e 100644 --- a/report_partner_address/README.rst +++ b/report_partner_address/README.rst @@ -51,6 +51,9 @@ Details. If Address Details is left blank, the standard address format is used. +Note: Unlike standard address fields, Address Details is not inherited +by child contacts. + Bug Tracker =========== diff --git a/report_partner_address/models/res_partner.py b/report_partner_address/models/res_partner.py index 4c83aec3a1..89c58cd47e 100644 --- a/report_partner_address/models/res_partner.py +++ b/report_partner_address/models/res_partner.py @@ -1,52 +1,18 @@ # Copyright 2025 Quartile (https://www.quartile.co) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import api, fields, models +from odoo import fields, models class ResPartner(models.Model): _inherit = "res.partner" address_details = fields.Text( - compute="_compute_address_details", - store=True, - readonly=False, translate=True, - recursive=True, help="Custom address format used in reports and portal pages. " "When set, this replaces the standard address format for external display.", ) - @api.depends("parent_id.address_details", "type") - def _compute_address_details(self): - for partner in self: - if partner.parent_id and partner.type == "contact": - partner.address_details = partner.parent_id.address_details - # No translation sync here to avoid unnecessary DB operations - - @api.model - def _address_fields(self): - """For address_details to be synced from parent.""" - return super()._address_fields() + ["address_details"] - - def _fields_sync(self, values): - """Copy address_details translations from parent for contacts.""" - result = super()._fields_sync(values) - parent = self.parent_id - if parent and self.type == "contact" and parent.address_details: - # Copy JSONB translations directly to avoid recursion - self.env.cr.execute( - """ - UPDATE res_partner - SET address_details = p.address_details - FROM res_partner p - WHERE res_partner.id = %(partner_id)s - AND p.id = %(parent_id)s - """, - {"partner_id": self.id, "parent_id": parent.id}, - ) - return result - def _prepare_display_address(self, without_company=False): self.ensure_one() address_format, args = super()._prepare_display_address( diff --git a/report_partner_address/readme/USAGE.md b/report_partner_address/readme/USAGE.md index 7b4f8211fd..b794bf0afd 100644 --- a/report_partner_address/readme/USAGE.md +++ b/report_partner_address/readme/USAGE.md @@ -4,3 +4,5 @@ The address in reports and portal pages will use the value from Address Details. If Address Details is left blank, the standard address format is used. + +Note: Unlike standard address fields, Address Details is not inherited by child contacts. diff --git a/report_partner_address/static/description/index.html b/report_partner_address/static/description/index.html index 477e730859..21f3d799b4 100644 --- a/report_partner_address/static/description/index.html +++ b/report_partner_address/static/description/index.html @@ -397,6 +397,8 @@

Usage

The address in reports and portal pages will use the value from Address Details.

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

+

Note: Unlike standard address fields, Address Details is not inherited +by child contacts.

Bug Tracker

diff --git a/report_partner_address/tests/test_report_partner_address.py b/report_partner_address/tests/test_report_partner_address.py index da977e1b55..5a5cb03f73 100644 --- a/report_partner_address/tests/test_report_partner_address.py +++ b/report_partner_address/tests/test_report_partner_address.py @@ -54,28 +54,3 @@ def test_address_details_empty_uses_standard_format(self): res = partner._display_address() self.assertIn("123 Main St", res) self.assertIn("Springfield", res) - - def test_contact_inherits_address_details_from_parent(self): - contact = self.env["res.partner"].create( - {"name": "Contact Person", "type": "contact", "parent_id": self.partner.id} - ) - self.assertEqual( - contact.address_details, - "Test Company\n1-2-3 Jingumae, Shibuya-ku\nTokyo 150-0001\nJapan", - ) - self.assertEqual( - contact.with_context(lang="ja_JP").address_details, - "〒150-0001\n東京都渋谷区神宮前1-2-3\nテスト株式会社", - ) - - def test_non_contact_does_not_inherit_address_details(self): - delivery_address = self.env["res.partner"].create( - { - "name": "Delivery Address", - "type": "delivery", - "parent_id": self.partner.id, - "street": "456 Delivery St", - } - ) - # Non-contact address should NOT inherit parent's address_details - self.assertFalse(delivery_address.address_details) diff --git a/report_partner_address/views/res_partner_views.xml b/report_partner_address/views/res_partner_views.xml index c9fc7ddebb..ef3a2b1407 100644 --- a/report_partner_address/views/res_partner_views.xml +++ b/report_partner_address/views/res_partner_views.xml @@ -5,10 +5,7 @@ - +