From afa0ed82e649d4a8dbdf03e828ca4e7bfbff208d Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Wed, 24 Apr 2024 14:07:23 +0200 Subject: [PATCH 01/14] [ADD] new module partner_multi_relation_function --- partner_multi_relation_function/README.rst | 104 ++++ partner_multi_relation_function/__init__.py | 2 + .../__manifest__.py | 24 + .../demo/res_partner_demo.xml | 15 + .../demo/res_partner_relation_demo.xml | 14 + .../demo/res_partner_relation_type_demo.xml | 10 + .../models/__init__.py | 5 + .../models/res_partner_relation.py | 21 + .../models/res_partner_relation_all.py | 43 ++ .../models/res_partner_relation_type.py | 12 + .../res_partner_relation_type_selection.py | 15 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 5 + .../readme/USAGE.rst | 10 + .../static/description/index.html | 446 ++++++++++++++++++ .../views/res_partner_relation_all_views.xml | 35 ++ .../views/res_partner_relation_type_views.xml | 30 ++ 17 files changed, 794 insertions(+) create mode 100644 partner_multi_relation_function/README.rst create mode 100644 partner_multi_relation_function/__init__.py create mode 100644 partner_multi_relation_function/__manifest__.py create mode 100644 partner_multi_relation_function/demo/res_partner_demo.xml create mode 100644 partner_multi_relation_function/demo/res_partner_relation_demo.xml create mode 100644 partner_multi_relation_function/demo/res_partner_relation_type_demo.xml create mode 100644 partner_multi_relation_function/models/__init__.py create mode 100644 partner_multi_relation_function/models/res_partner_relation.py create mode 100644 partner_multi_relation_function/models/res_partner_relation_all.py create mode 100644 partner_multi_relation_function/models/res_partner_relation_type.py create mode 100644 partner_multi_relation_function/models/res_partner_relation_type_selection.py create mode 100644 partner_multi_relation_function/readme/CONTRIBUTORS.rst create mode 100644 partner_multi_relation_function/readme/DESCRIPTION.rst create mode 100644 partner_multi_relation_function/readme/USAGE.rst create mode 100644 partner_multi_relation_function/static/description/index.html create mode 100644 partner_multi_relation_function/views/res_partner_relation_all_views.xml create mode 100644 partner_multi_relation_function/views/res_partner_relation_type_views.xml diff --git a/partner_multi_relation_function/README.rst b/partner_multi_relation_function/README.rst new file mode 100644 index 00000000000..4f75a760e5a --- /dev/null +++ b/partner_multi_relation_function/README.rst @@ -0,0 +1,104 @@ +========================== +Partner Relation Functions +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:437da65722676f8064241248c84cac44fe9bd353081054e25f62661200b8382e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fpartner--contact-lightgray.png?logo=github + :target: https://github.com/OCA/partner-contact/tree/16.0/partner_multi_relation_function + :alt: OCA/partner-contact +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/partner-contact-16-0/partner-contact-16-0-partner_multi_relation_function + :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/partner-contact&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module gives the posibility to have a relation between partners have a function. + +Of course there is a function field on partner, but this ignores the fact that +persons can have multiple functions depending on the relations they are in. For +instance a person can be a CEO in one company and a volunteer in another organisation. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Relation Type +~~~~~~~~~~~~~ + +You can specify that a relation type can have a function attached to it. + +Relation +~~~~~~~~ + +You can enter a function for relation types that allow this. The display name +for the relation will reflect the function entered, if any. + +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 +~~~~~~~ + +* Therp BV + +Contributors +~~~~~~~~~~~~ + +* `Therp BV `_: + + * Ronald Portier + +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-NL66278| image:: https://github.com/NL66278.png?size=40px + :target: https://github.com/NL66278 + :alt: NL66278 + +Current `maintainer `__: + +|maintainer-NL66278| + +This module is part of the `OCA/partner-contact `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_multi_relation_function/__init__.py b/partner_multi_relation_function/__init__.py new file mode 100644 index 00000000000..c32fd62b78d --- /dev/null +++ b/partner_multi_relation_function/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from . import models diff --git a/partner_multi_relation_function/__manifest__.py b/partner_multi_relation_function/__manifest__.py new file mode 100644 index 00000000000..f9c5cc20f6a --- /dev/null +++ b/partner_multi_relation_function/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2024 Therp BV . +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Partner Relation Functions", + "version": "16.0.1.0.0", + "author": "Therp BV,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/partner-contact", + "maintainers": ["NL66278"], + "complexity": "normal", + "category": "Customer Relationship Management", + "license": "AGPL-3", + "depends": ["partner_multi_relation"], + "demo": [ + "demo/res_partner_relation_type_demo.xml", + "demo/res_partner_demo.xml", + "demo/res_partner_relation_demo.xml", # Must be after type and partner + ], + "data": [ + "views/res_partner_relation_all_views.xml", + "views/res_partner_relation_type_views.xml", + ], + "auto_install": False, + "installable": True, +} diff --git a/partner_multi_relation_function/demo/res_partner_demo.xml b/partner_multi_relation_function/demo/res_partner_demo.xml new file mode 100644 index 00000000000..0cbfa29440c --- /dev/null +++ b/partner_multi_relation_function/demo/res_partner_demo.xml @@ -0,0 +1,15 @@ + + + + + Joe Bigguy + 0 + Hilversum + 1222 EE + + bigguy@yourcompany.example.com + +31 06 6461 0401 + Albert Einstein + + + diff --git a/partner_multi_relation_function/demo/res_partner_relation_demo.xml b/partner_multi_relation_function/demo/res_partner_relation_demo.xml new file mode 100644 index 00000000000..12797cdc82d --- /dev/null +++ b/partner_multi_relation_function/demo/res_partner_relation_demo.xml @@ -0,0 +1,14 @@ + + + + + + + + CEO + + + diff --git a/partner_multi_relation_function/demo/res_partner_relation_type_demo.xml b/partner_multi_relation_function/demo/res_partner_relation_type_demo.xml new file mode 100644 index 00000000000..f59ece06c42 --- /dev/null +++ b/partner_multi_relation_function/demo/res_partner_relation_type_demo.xml @@ -0,0 +1,10 @@ + + + + Has board member + Is board member of + c + p + True + + diff --git a/partner_multi_relation_function/models/__init__.py b/partner_multi_relation_function/models/__init__.py new file mode 100644 index 00000000000..8db14bdfb1e --- /dev/null +++ b/partner_multi_relation_function/models/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import res_partner_relation_type +from . import res_partner_relation_type_selection +from . import res_partner_relation +from . import res_partner_relation_all diff --git a/partner_multi_relation_function/models/res_partner_relation.py b/partner_multi_relation_function/models/res_partner_relation.py new file mode 100644 index 00000000000..3846204d4ba --- /dev/null +++ b/partner_multi_relation_function/models/res_partner_relation.py @@ -0,0 +1,21 @@ +# Copyright 2024 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class ResPartnerRelation(models.Model): + + _inherit = "res.partner.relation" + + function = fields.Char() + + @api.constrains("function") + def _check_function(self): + """Function should only be filled when allowed on type.""" + for record in self: + if record.function and not record.type_id.allow_function: + raise ValidationError( + _("You can not have a function on relations of type %(type)s."), + {"type": record.type_id.display_name}, + ) diff --git a/partner_multi_relation_function/models/res_partner_relation_all.py b/partner_multi_relation_function/models/res_partner_relation_all.py new file mode 100644 index 00000000000..1142032dace --- /dev/null +++ b/partner_multi_relation_function/models/res_partner_relation_all.py @@ -0,0 +1,43 @@ +# Copyright 2024 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, fields, models + + +class ResPartnerRelationAll(models.Model): + """Model to show each relation from two sides.""" + + _inherit = "res.partner.relation.all" + + # Override fully _rec_names_search. Not really nice, but for the moment + # the only option. Field should be turned to a property set by a method + # in partner_multi_relation, so would be easily extendable. + _rec_names_search = [ + "this_partner_id.name", + "type_selection_id.name", + "other_partner_id.name", + "function", + ] + + function = fields.Char() + allow_function = fields.Boolean(readonly=True) + + def _get_additional_relation_columns(self): + """Get additionnal columns from res_partner_relation.""" + return super()._get_additional_relation_columns() + ", rel.function" + + def _get_additional_view_fields(self): + """Allow inherit models to add fields to view.""" + return super()._get_additional_view_fields() + ", typ.allow_function" + + def name_get(self): + """Add function to name if present.""" + wf = _(" with function ") # Prevent repeated translation. + return [ + ( + this.id, + super(ResPartnerRelationAll, this).name_get()[0][1] + + (this.function and wf + this.function or ""), + ) + for this in self + ] diff --git a/partner_multi_relation_function/models/res_partner_relation_type.py b/partner_multi_relation_function/models/res_partner_relation_type.py new file mode 100644 index 00000000000..a6de32a6877 --- /dev/null +++ b/partner_multi_relation_function/models/res_partner_relation_type.py @@ -0,0 +1,12 @@ +# Copyright 2024 Therp BV . +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ResPartnerRelationType(models.Model): + + _inherit = "res.partner.relation.type" + + allow_function = fields.Boolean( + help="Is set, relations of this type can have a function specified", + ) diff --git a/partner_multi_relation_function/models/res_partner_relation_type_selection.py b/partner_multi_relation_function/models/res_partner_relation_type_selection.py new file mode 100644 index 00000000000..974eed75ff2 --- /dev/null +++ b/partner_multi_relation_function/models/res_partner_relation_type_selection.py @@ -0,0 +1,15 @@ +# Copyright 2024 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResPartnerRelationTypeSelection(models.Model): + + _inherit = "res.partner.relation.type.selection" + + allow_function = fields.Boolean() + + def _get_additional_view_fields(self): + """Add allow_function to fields.""" + return super()._get_additional_view_fields() + ", allow_function" diff --git a/partner_multi_relation_function/readme/CONTRIBUTORS.rst b/partner_multi_relation_function/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..f9370b5d9b1 --- /dev/null +++ b/partner_multi_relation_function/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Therp BV `_: + + * Ronald Portier diff --git a/partner_multi_relation_function/readme/DESCRIPTION.rst b/partner_multi_relation_function/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..0a926d35155 --- /dev/null +++ b/partner_multi_relation_function/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module gives the posibility to have a relation between partners have a function. + +Of course there is a function field on partner, but this ignores the fact that +persons can have multiple functions depending on the relations they are in. For +instance a person can be a CEO in one company and a volunteer in another organisation. diff --git a/partner_multi_relation_function/readme/USAGE.rst b/partner_multi_relation_function/readme/USAGE.rst new file mode 100644 index 00000000000..1ec248c17a0 --- /dev/null +++ b/partner_multi_relation_function/readme/USAGE.rst @@ -0,0 +1,10 @@ +Relation Type +~~~~~~~~~~~~~ + +You can specify that a relation type can have a function attached to it. + +Relation +~~~~~~~~ + +You can enter a function for relation types that allow this. The display name +for the relation will reflect the function entered, if any. diff --git a/partner_multi_relation_function/static/description/index.html b/partner_multi_relation_function/static/description/index.html new file mode 100644 index 00000000000..310535d28dc --- /dev/null +++ b/partner_multi_relation_function/static/description/index.html @@ -0,0 +1,446 @@ + + + + + + +Partner Relation Functions + + + +
+

Partner Relation Functions

+ + +

Beta License: AGPL-3 OCA/partner-contact Translate me on Weblate Try me on Runboat

+

This module gives the posibility to have a relation between partners have a function.

+

Of course there is a function field on partner, but this ignores the fact that +persons can have multiple functions depending on the relations they are in. For +instance a person can be a CEO in one company and a volunteer in another organisation.

+

Table of contents

+ +
+

Usage

+
+

Relation Type

+

You can specify that a relation type can have a function attached to it.

+
+
+

Relation

+

You can enter a function for relation types that allow this. The display name +for the relation will reflect the function entered, if any.

+
+
+
+

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

+
    +
  • Therp BV
  • +
+
+
+

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 maintainer:

+

NL66278

+

This module is part of the OCA/partner-contact project on GitHub.

+

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

+
+
+
+ + diff --git a/partner_multi_relation_function/views/res_partner_relation_all_views.xml b/partner_multi_relation_function/views/res_partner_relation_all_views.xml new file mode 100644 index 00000000000..612b1f46507 --- /dev/null +++ b/partner_multi_relation_function/views/res_partner_relation_all_views.xml @@ -0,0 +1,35 @@ + + + + + res.partner.relation.all + + + + + + + + + + + res.partner.relation.all + + + + + + + + + diff --git a/partner_multi_relation_function/views/res_partner_relation_type_views.xml b/partner_multi_relation_function/views/res_partner_relation_type_views.xml new file mode 100644 index 00000000000..197bc93675c --- /dev/null +++ b/partner_multi_relation_function/views/res_partner_relation_type_views.xml @@ -0,0 +1,30 @@ + + + + + res.partner.relation.type + + + + + + + + + + res.partner.relation.type + + + + + + + + + From 37501e604eb7bac031659951276706d7678fb650 Mon Sep 17 00:00:00 2001 From: ntsirintanis Date: Mon, 3 Feb 2025 14:37:56 +0100 Subject: [PATCH 02/14] [UPD] partner_multi_relation_function: search function --- .../__manifest__.py | 1 + .../models/__init__.py | 1 + .../models/res_partner.py | 48 +++++++++++++++++++ .../static/description/index.html | 12 +++-- .../views/res_partner_views.xml | 13 +++++ 5 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 partner_multi_relation_function/models/res_partner.py create mode 100644 partner_multi_relation_function/views/res_partner_views.xml diff --git a/partner_multi_relation_function/__manifest__.py b/partner_multi_relation_function/__manifest__.py index f9c5cc20f6a..ca9057bf063 100644 --- a/partner_multi_relation_function/__manifest__.py +++ b/partner_multi_relation_function/__manifest__.py @@ -16,6 +16,7 @@ "demo/res_partner_relation_demo.xml", # Must be after type and partner ], "data": [ + "views/res_partner_views.xml", "views/res_partner_relation_all_views.xml", "views/res_partner_relation_type_views.xml", ], diff --git a/partner_multi_relation_function/models/__init__.py b/partner_multi_relation_function/models/__init__.py index 8db14bdfb1e..46e589eaf34 100644 --- a/partner_multi_relation_function/models/__init__.py +++ b/partner_multi_relation_function/models/__init__.py @@ -1,4 +1,5 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import res_partner from . import res_partner_relation_type from . import res_partner_relation_type_selection from . import res_partner_relation diff --git a/partner_multi_relation_function/models/res_partner.py b/partner_multi_relation_function/models/res_partner.py new file mode 100644 index 00000000000..4d21be9c36b --- /dev/null +++ b/partner_multi_relation_function/models/res_partner.py @@ -0,0 +1,48 @@ +# Copyright 2025 Therp BV . +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, exceptions, fields, models +from odoo.osv.expression import FALSE_LEAF + + +class ResPartner(models.Model): + """Enable searching partner via function""" + + _inherit = "res.partner" + + search_relation_function = fields.Many2one( + comodel_name="res.partner.relation.all", + compute=lambda self: self.update({"search_relation_function": None}), + search="_search_relation_function", + string="Has relation function", + ) + + @api.model + def _search_relation_function(self, operator, value): + """Search partners based on their relation function.""" + SUPPORTED_OPERATORS = ( + "=", + "!=", + "like", + "not like", + "ilike", + "not ilike", + "in", + "not in", + ) + if operator not in SUPPORTED_OPERATORS: + raise exceptions.ValidationError( + _('Unsupported search operator "%s"') % operator + ) + relation_model = self.env["res.partner.relation.all"] + relation_function_selection = relation_model.search( + [ + ("function", operator, value), + ] + ) + if not relation_function_selection: + return [FALSE_LEAF] + # Collect both partners, user can apply + # additional type filter for separating contacts + # and companies + return [("relation_all_ids", "in", relation_function_selection.ids)] diff --git a/partner_multi_relation_function/static/description/index.html b/partner_multi_relation_function/static/description/index.html index 310535d28dc..176dd2a1966 100644 --- a/partner_multi_relation_function/static/description/index.html +++ b/partner_multi_relation_function/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -431,7 +431,9 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +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.

diff --git a/partner_multi_relation_function/views/res_partner_views.xml b/partner_multi_relation_function/views/res_partner_views.xml new file mode 100644 index 00000000000..7d83317af28 --- /dev/null +++ b/partner_multi_relation_function/views/res_partner_views.xml @@ -0,0 +1,13 @@ + + + + partner_multi_relation_function.view_partner_filter + + res.partner + + + + + + + From cffda8013c173aeb3c6cb29def091138015ed03b Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 15 Sep 2025 10:42:34 +0000 Subject: [PATCH 03/14] [UPD] Update partner_multi_relation_function.pot --- .../i18n/partner_multi_relation_function.pot | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 partner_multi_relation_function/i18n/partner_multi_relation_function.pot diff --git a/partner_multi_relation_function/i18n/partner_multi_relation_function.pot b/partner_multi_relation_function/i18n/partner_multi_relation_function.pot new file mode 100644 index 00000000000..09ee10e9d4b --- /dev/null +++ b/partner_multi_relation_function/i18n/partner_multi_relation_function.pot @@ -0,0 +1,76 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_multi_relation_function +# +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: partner_multi_relation_function +#. odoo-python +#: code:addons/partner_multi_relation_function/models/res_partner_relation_all.py:0 +#, python-format +msgid " with function " +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_all +msgid "All (non-inverse + inverse) relations between partners" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type_selection +msgid "All relation types" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__allow_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_type__allow_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_type_selection__allow_function +msgid "Allow Function" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation__function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__function +msgid "Function" +msgstr "" + +#. module: partner_multi_relation_function +#: model:res.partner.relation.type,name:partner_multi_relation_function.rel_type_board_member +msgid "Has board member" +msgstr "" + +#. module: partner_multi_relation_function +#: model:res.partner.relation.type,name_inverse:partner_multi_relation_function.rel_type_board_member +msgid "Is board member of" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model.fields,help:partner_multi_relation_function.field_res_partner_relation_type__allow_function +msgid "Is set, relations of this type can have a function specified" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type +msgid "Partner Relation Type" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation +msgid "Partner relation" +msgstr "" + +#. module: partner_multi_relation_function +#. odoo-python +#: code:addons/partner_multi_relation_function/models/res_partner_relation.py:0 +#, python-format +msgid "You can not have a function on relations of type %(type)s." +msgstr "" From dcde983861c08ed5c5136e1179555c9200166806 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 15 Sep 2025 10:47:11 +0000 Subject: [PATCH 04/14] [BOT] post-merge updates --- .../static/description/icon.png | Bin 0 -> 10254 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 partner_multi_relation_function/static/description/icon.png diff --git a/partner_multi_relation_function/static/description/icon.png b/partner_multi_relation_function/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 Date: Tue, 16 Sep 2025 13:07:49 +0000 Subject: [PATCH 05/14] Added translation using Weblate (Italian) --- partner_multi_relation_function/i18n/it.po | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 partner_multi_relation_function/i18n/it.po diff --git a/partner_multi_relation_function/i18n/it.po b/partner_multi_relation_function/i18n/it.po new file mode 100644 index 00000000000..3a535255a20 --- /dev/null +++ b/partner_multi_relation_function/i18n/it.po @@ -0,0 +1,77 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_multi_relation_function +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: partner_multi_relation_function +#. odoo-python +#: code:addons/partner_multi_relation_function/models/res_partner_relation_all.py:0 +#, python-format +msgid " with function " +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_all +msgid "All (non-inverse + inverse) relations between partners" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type_selection +msgid "All relation types" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__allow_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_type__allow_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_type_selection__allow_function +msgid "Allow Function" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation__function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__function +msgid "Function" +msgstr "" + +#. module: partner_multi_relation_function +#: model:res.partner.relation.type,name:partner_multi_relation_function.rel_type_board_member +msgid "Has board member" +msgstr "" + +#. module: partner_multi_relation_function +#: model:res.partner.relation.type,name_inverse:partner_multi_relation_function.rel_type_board_member +msgid "Is board member of" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model.fields,help:partner_multi_relation_function.field_res_partner_relation_type__allow_function +msgid "Is set, relations of this type can have a function specified" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type +msgid "Partner Relation Type" +msgstr "" + +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation +msgid "Partner relation" +msgstr "" + +#. module: partner_multi_relation_function +#. odoo-python +#: code:addons/partner_multi_relation_function/models/res_partner_relation.py:0 +#, python-format +msgid "You can not have a function on relations of type %(type)s." +msgstr "" From 478af571aa50a2c2451c64534af142bee85919cf Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 18 Sep 2025 14:57:56 +0000 Subject: [PATCH 06/14] Translated using Weblate (Italian) Currently translated at 100.0% (11 of 11 strings) Translation: partner-contact-16.0/partner-contact-16.0-partner_multi_relation_function Translate-URL: https://translation.odoo-community.org/projects/partner-contact-16-0/partner-contact-16-0-partner_multi_relation_function/it/ --- partner_multi_relation_function/i18n/it.po | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/partner_multi_relation_function/i18n/it.po b/partner_multi_relation_function/i18n/it.po index 3a535255a20..b9d28500645 100644 --- a/partner_multi_relation_function/i18n/it.po +++ b/partner_multi_relation_function/i18n/it.po @@ -6,72 +6,75 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2025-09-18 17:42+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" #. module: partner_multi_relation_function #. odoo-python #: code:addons/partner_multi_relation_function/models/res_partner_relation_all.py:0 #, python-format msgid " with function " -msgstr "" +msgstr " con funzione " #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_all msgid "All (non-inverse + inverse) relations between partners" -msgstr "" +msgstr "Tutte le relazioni tra partner (non-inverse e inverse)" #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type_selection msgid "All relation types" -msgstr "" +msgstr "Tutti i tipi di relazione" #. module: partner_multi_relation_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__allow_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_type__allow_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_type_selection__allow_function msgid "Allow Function" -msgstr "" +msgstr "Consente funzione" #. module: partner_multi_relation_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation__function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__function msgid "Function" -msgstr "" +msgstr "Funzione" #. module: partner_multi_relation_function #: model:res.partner.relation.type,name:partner_multi_relation_function.rel_type_board_member msgid "Has board member" -msgstr "" +msgstr "Ha membro del board" #. module: partner_multi_relation_function #: model:res.partner.relation.type,name_inverse:partner_multi_relation_function.rel_type_board_member msgid "Is board member of" -msgstr "" +msgstr "È membro del board di" #. module: partner_multi_relation_function #: model:ir.model.fields,help:partner_multi_relation_function.field_res_partner_relation_type__allow_function msgid "Is set, relations of this type can have a function specified" msgstr "" +"Se impostata, le relazioni di questo tipo possono avere una funzione indicata" #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type msgid "Partner Relation Type" -msgstr "" +msgstr "Tipo relazione partner" #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation msgid "Partner relation" -msgstr "" +msgstr "Relazione partner" #. module: partner_multi_relation_function #. odoo-python #: code:addons/partner_multi_relation_function/models/res_partner_relation.py:0 #, python-format msgid "You can not have a function on relations of type %(type)s." -msgstr "" +msgstr "Non si può avere una funzione in una relazione di tipo %(type)s." From 1bb618d8dcc172592d7d0ea0c974bd3107fe8e32 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Fri, 2 Jan 2026 07:54:17 +0100 Subject: [PATCH 07/14] [TST] pmr_function: add test for search --- .../static/description/index.html | 11 ++--- .../tests/__init__.py | 2 + .../tests/test_partner_search.py | 49 +++++++++++++++++++ 3 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 partner_multi_relation_function/tests/__init__.py create mode 100644 partner_multi_relation_function/tests/test_partner_search.py diff --git a/partner_multi_relation_function/static/description/index.html b/partner_multi_relation_function/static/description/index.html index 176dd2a1966..de17682984b 100644 --- a/partner_multi_relation_function/static/description/index.html +++ b/partner_multi_relation_function/static/description/index.html @@ -8,11 +8,10 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ +:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. -Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +274,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: gray; } /* line numbers */ +pre.code .ln { color: grey; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +300,7 @@ span.pre { white-space: pre } -span.problematic, pre.problematic { +span.problematic { color: red } span.section-subtitle { @@ -431,9 +430,7 @@

Contributors

Maintainers

This module is maintained by the OCA.

- -Odoo Community Association - +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.

diff --git a/partner_multi_relation_function/tests/__init__.py b/partner_multi_relation_function/tests/__init__.py new file mode 100644 index 00000000000..7a7e01ecc78 --- /dev/null +++ b/partner_multi_relation_function/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from . import test_partner_search diff --git a/partner_multi_relation_function/tests/test_partner_search.py b/partner_multi_relation_function/tests/test_partner_search.py new file mode 100644 index 00000000000..27aa1e3f274 --- /dev/null +++ b/partner_multi_relation_function/tests/test_partner_search.py @@ -0,0 +1,49 @@ +# Copyright 2026 Therp BV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo.exceptions import ValidationError +from odoo.tests import common + + +class TestPartnerSearch(common.TransactionCase): + def test_search_relation_function(self): + """Test searching for partners having a relation with a specific function.""" + Partner = self.env["res.partner"] + RelationType = self.env["res.partner.relation.type"] + Relation = self.env["res.partner.relation"] + partner_person = Partner.create( + {"name": "Test Participant", "is_company": False, "ref": "PR01"} + ) + partner_project = Partner.create( + {"name": "Test Project", "is_company": True, "ref": "PR02"} + ) + type_with_function = RelationType.create( + { + "name": "project has participant", + "name_inverse": "participates in project", + "contact_type_left": "c", + "contact_type_right": "p", + "allow_function": True, + } + ) + relation_with_function = Relation.create( + { + "left_partner_id": partner_project.id, + "type_id": type_with_function.id, + "function": "coordinator", + "right_partner_id": partner_person.id, + } + ) + self.assertTrue(relation_with_function) + domain = [("search_relation_function", "=", "coordinator")] + partners = Partner.search(domain) + self.assertEqual(len(partners), 2) + self.assertTrue(partner_project in partners) + self.assertTrue(partner_person in partners) + # Try search with invalid operator + domain = [("search_relation_function", "child_of", "coordinator")] + with self.assertRaises(ValidationError): + Partner.search(domain) + # Search for non existing function. + domain = [("search_relation_function", "=", "not an existing function")] + partners = Partner.search(domain) + self.assertEqual(len(partners), 0) From 86af5f438294d1cad55dfe1c02630bb2974ed22d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 2 Jan 2026 09:34:16 +0000 Subject: [PATCH 08/14] [UPD] Update partner_multi_relation_function.pot --- .../i18n/partner_multi_relation_function.pot | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/partner_multi_relation_function/i18n/partner_multi_relation_function.pot b/partner_multi_relation_function/i18n/partner_multi_relation_function.pot index 09ee10e9d4b..90570f8e136 100644 --- a/partner_multi_relation_function/i18n/partner_multi_relation_function.pot +++ b/partner_multi_relation_function/i18n/partner_multi_relation_function.pot @@ -37,6 +37,11 @@ msgstr "" msgid "Allow Function" msgstr "" +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner +msgid "Contact" +msgstr "" + #. module: partner_multi_relation_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation__function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__function @@ -48,6 +53,12 @@ msgstr "" msgid "Has board member" msgstr "" +#. module: partner_multi_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner__search_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_users__search_relation_function +msgid "Has relation function" +msgstr "" + #. module: partner_multi_relation_function #: model:res.partner.relation.type,name_inverse:partner_multi_relation_function.rel_type_board_member msgid "Is board member of" @@ -68,6 +79,13 @@ msgstr "" msgid "Partner relation" msgstr "" +#. module: partner_multi_relation_function +#. odoo-python +#: code:addons/partner_multi_relation_function/models/res_partner.py:0 +#, python-format +msgid "Unsupported search operator \"%s\"" +msgstr "" + #. module: partner_multi_relation_function #. odoo-python #: code:addons/partner_multi_relation_function/models/res_partner_relation.py:0 From 3c505ef774a81798f70bec5daf3d1aeb76021729 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 2 Jan 2026 09:39:07 +0000 Subject: [PATCH 09/14] [BOT] post-merge updates --- partner_multi_relation_function/README.rst | 8 +++- .../__manifest__.py | 2 +- .../static/description/index.html | 43 +++++++++++-------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/partner_multi_relation_function/README.rst b/partner_multi_relation_function/README.rst index 4f75a760e5a..ccc7f0789ff 100644 --- a/partner_multi_relation_function/README.rst +++ b/partner_multi_relation_function/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 + ========================== Partner Relation Functions ========================== @@ -7,13 +11,13 @@ Partner Relation Functions !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:437da65722676f8064241248c84cac44fe9bd353081054e25f62661200b8382e + !! source digest: sha256:f5bedfce28db3d0081c34e3c73d93c3be293d8248a5143c99f135b8537f54ad1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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%2Fpartner--contact-lightgray.png?logo=github diff --git a/partner_multi_relation_function/__manifest__.py b/partner_multi_relation_function/__manifest__.py index ca9057bf063..8ca4935dc17 100644 --- a/partner_multi_relation_function/__manifest__.py +++ b/partner_multi_relation_function/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Partner Relation Functions", - "version": "16.0.1.0.0", + "version": "16.0.1.1.0", "author": "Therp BV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/partner-contact", "maintainers": ["NL66278"], diff --git a/partner_multi_relation_function/static/description/index.html b/partner_multi_relation_function/static/description/index.html index de17682984b..758deecd967 100644 --- a/partner_multi_relation_function/static/description/index.html +++ b/partner_multi_relation_function/static/description/index.html @@ -3,15 +3,16 @@ -Partner Relation Functions +README.rst -
-

Partner Relation Functions

+
+ + +Odoo Community Association + +
+

Partner Relation Functions

-

Beta License: AGPL-3 OCA/partner-contact Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/partner-contact Translate me on Weblate Try me on Runboat

This module gives the posibility to have a relation between partners have a function.

Of course there is a function field on partner, but this ignores the fact that persons can have multiple functions depending on the relations they are in. For @@ -391,19 +397,19 @@

Partner Relation Functions

-

Usage

+

Usage

-

Relation Type

+

Relation Type

You can specify that a relation type can have a function attached to it.

-

Relation

+

Relation

You can enter a function for relation types that allow this. The display name for the relation will reflect the function entered, if any.

-

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 @@ -411,15 +417,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Therp BV
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +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.

@@ -441,5 +449,6 @@

Maintainers

+
From 7afa56c64b839838ca446df7a1a9b14bd4a83434 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 2 Jan 2026 09:39:47 +0000 Subject: [PATCH 10/14] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: partner-contact-16.0/partner-contact-16.0-partner_multi_relation_function Translate-URL: https://translation.odoo-community.org/projects/partner-contact-16-0/partner-contact-16-0-partner_multi_relation_function/ --- partner_multi_relation_function/i18n/it.po | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/partner_multi_relation_function/i18n/it.po b/partner_multi_relation_function/i18n/it.po index b9d28500645..9efb5ca9135 100644 --- a/partner_multi_relation_function/i18n/it.po +++ b/partner_multi_relation_function/i18n/it.po @@ -40,6 +40,11 @@ msgstr "Tutti i tipi di relazione" msgid "Allow Function" msgstr "Consente funzione" +#. module: partner_multi_relation_function +#: model:ir.model,name:partner_multi_relation_function.model_res_partner +msgid "Contact" +msgstr "" + #. module: partner_multi_relation_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation__function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation_all__function @@ -51,6 +56,12 @@ msgstr "Funzione" msgid "Has board member" msgstr "Ha membro del board" +#. module: partner_multi_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner__search_relation_function +#: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_users__search_relation_function +msgid "Has relation function" +msgstr "" + #. module: partner_multi_relation_function #: model:res.partner.relation.type,name_inverse:partner_multi_relation_function.rel_type_board_member msgid "Is board member of" @@ -72,6 +83,13 @@ msgstr "Tipo relazione partner" msgid "Partner relation" msgstr "Relazione partner" +#. module: partner_multi_relation_function +#. odoo-python +#: code:addons/partner_multi_relation_function/models/res_partner.py:0 +#, python-format +msgid "Unsupported search operator \"%s\"" +msgstr "" + #. module: partner_multi_relation_function #. odoo-python #: code:addons/partner_multi_relation_function/models/res_partner_relation.py:0 From 329df7423d75f14ba4f27e0cca1294430ad3d8f3 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 5 Jan 2026 17:43:10 +0000 Subject: [PATCH 11/14] Translated using Weblate (Italian) Currently translated at 100.0% (14 of 14 strings) Translation: partner-contact-16.0/partner-contact-16.0-partner_multi_relation_function Translate-URL: https://translation.odoo-community.org/projects/partner-contact-16-0/partner-contact-16-0-partner_multi_relation_function/it/ --- partner_multi_relation_function/i18n/it.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/partner_multi_relation_function/i18n/it.po b/partner_multi_relation_function/i18n/it.po index 9efb5ca9135..61713137ba5 100644 --- a/partner_multi_relation_function/i18n/it.po +++ b/partner_multi_relation_function/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-09-18 17:42+0000\n" +"PO-Revision-Date: 2026-01-05 20:43+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -43,7 +43,7 @@ msgstr "Consente funzione" #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner msgid "Contact" -msgstr "" +msgstr "Contatto" #. module: partner_multi_relation_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner_relation__function @@ -60,7 +60,7 @@ msgstr "Ha membro del board" #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_partner__search_relation_function #: model:ir.model.fields,field_description:partner_multi_relation_function.field_res_users__search_relation_function msgid "Has relation function" -msgstr "" +msgstr "Ha funzione relazione" #. module: partner_multi_relation_function #: model:res.partner.relation.type,name_inverse:partner_multi_relation_function.rel_type_board_member @@ -88,7 +88,7 @@ msgstr "Relazione partner" #: code:addons/partner_multi_relation_function/models/res_partner.py:0 #, python-format msgid "Unsupported search operator \"%s\"" -msgstr "" +msgstr "Operatore di ricerca non supportato \"%s\"" #. module: partner_multi_relation_function #. odoo-python From b21b2ca5949ac3884bf9d2bbc4b30b10a81e40b7 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 29 May 2026 10:58:51 +0000 Subject: [PATCH 12/14] Translated using Weblate (Italian) Currently translated at 100.0% (14 of 14 strings) Translation: partner-contact-16.0/partner-contact-16.0-partner_multi_relation_function Translate-URL: https://translation.odoo-community.org/projects/partner-contact-16-0/partner-contact-16-0-partner_multi_relation_function/it/ --- partner_multi_relation_function/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/partner_multi_relation_function/i18n/it.po b/partner_multi_relation_function/i18n/it.po index 61713137ba5..0d93de5aa1a 100644 --- a/partner_multi_relation_function/i18n/it.po +++ b/partner_multi_relation_function/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-01-05 20:43+0000\n" +"PO-Revision-Date: 2026-05-29 13:46+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.4\n" +"X-Generator: Weblate 5.15.2\n" #. module: partner_multi_relation_function #. odoo-python @@ -76,7 +76,7 @@ msgstr "" #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation_type msgid "Partner Relation Type" -msgstr "Tipo relazione partner" +msgstr "Tipo di relazione del partner" #. module: partner_multi_relation_function #: model:ir.model,name:partner_multi_relation_function.model_res_partner_relation From 01fb0d2fccc7530f1b3928f69d468ba4dd4044ec Mon Sep 17 00:00:00 2001 From: Nikos Tsirintanis Date: Thu, 4 Jun 2026 12:39:49 +0200 Subject: [PATCH 13/14] [IMP] partner_multi_relation_function: pre-commit auto fixes --- partner_multi_relation_function/README.rst | 44 ++++++++--------- .../demo/res_partner_demo.xml | 2 - .../demo/res_partner_relation_demo.xml | 2 - .../models/res_partner_relation.py | 1 - .../models/res_partner_relation_type.py | 1 - .../res_partner_relation_type_selection.py | 1 - .../pyproject.toml | 3 ++ .../readme/CONTRIBUTORS.md | 2 + .../readme/CONTRIBUTORS.rst | 3 -- .../readme/DESCRIPTION.md | 7 +++ .../readme/DESCRIPTION.rst | 5 -- .../readme/{USAGE.rst => USAGE.md} | 10 ++-- .../static/description/index.html | 48 +++++++++---------- .../views/res_partner_relation_all_views.xml | 2 - .../views/res_partner_relation_type_views.xml | 2 - 15 files changed, 59 insertions(+), 74 deletions(-) create mode 100644 partner_multi_relation_function/pyproject.toml create mode 100644 partner_multi_relation_function/readme/CONTRIBUTORS.md delete mode 100644 partner_multi_relation_function/readme/CONTRIBUTORS.rst create mode 100644 partner_multi_relation_function/readme/DESCRIPTION.md delete mode 100644 partner_multi_relation_function/readme/DESCRIPTION.rst rename partner_multi_relation_function/readme/{USAGE.rst => USAGE.md} (53%) diff --git a/partner_multi_relation_function/README.rst b/partner_multi_relation_function/README.rst index ccc7f0789ff..b3fe0952db8 100644 --- a/partner_multi_relation_function/README.rst +++ b/partner_multi_relation_function/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 - ========================== Partner Relation Functions ========================== @@ -17,26 +13,28 @@ Partner Relation Functions .. |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%2Fpartner--contact-lightgray.png?logo=github - :target: https://github.com/OCA/partner-contact/tree/16.0/partner_multi_relation_function + :target: https://github.com/OCA/partner-contact/tree/18.0/partner_multi_relation_function :alt: OCA/partner-contact .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/partner-contact-16-0/partner-contact-16-0-partner_multi_relation_function + :target: https://translation.odoo-community.org/projects/partner-contact-18-0/partner-contact-18-0-partner_multi_relation_function :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/partner-contact&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/partner-contact&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module gives the posibility to have a relation between partners have a function. +This module gives the posibility to have a relation between partners +have a function. -Of course there is a function field on partner, but this ignores the fact that -persons can have multiple functions depending on the relations they are in. For -instance a person can be a CEO in one company and a volunteer in another organisation. +Of course there is a function field on partner, but this ignores the +fact that persons can have multiple functions depending on the relations +they are in. For instance a person can be a CEO in one company and a +volunteer in another organisation. **Table of contents** @@ -47,15 +45,15 @@ Usage ===== Relation Type -~~~~~~~~~~~~~ +------------- You can specify that a relation type can have a function attached to it. Relation -~~~~~~~~ +-------- -You can enter a function for relation types that allow this. The display name -for the relation will reflect the function entered, if any. +You can enter a function for relation types that allow this. The display +name for the relation will reflect the function entered, if any. Bug Tracker =========== @@ -63,7 +61,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. @@ -71,19 +69,19 @@ Credits ======= Authors -~~~~~~~ +------- * Therp BV Contributors -~~~~~~~~~~~~ +------------ -* `Therp BV `_: +- `Therp BV `__: - * Ronald Portier + - Ronald Portier Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -103,6 +101,6 @@ Current `maintainer `__: |maintainer-NL66278| -This module is part of the `OCA/partner-contact `_ project on GitHub. +This module is part of the `OCA/partner-contact `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/partner_multi_relation_function/demo/res_partner_demo.xml b/partner_multi_relation_function/demo/res_partner_demo.xml index 0cbfa29440c..26dcd589cf7 100644 --- a/partner_multi_relation_function/demo/res_partner_demo.xml +++ b/partner_multi_relation_function/demo/res_partner_demo.xml @@ -1,6 +1,5 @@ - Joe Bigguy 0 @@ -11,5 +10,4 @@ +31 06 6461 0401 Albert Einstein - diff --git a/partner_multi_relation_function/demo/res_partner_relation_demo.xml b/partner_multi_relation_function/demo/res_partner_relation_demo.xml index 12797cdc82d..e47b3c93262 100644 --- a/partner_multi_relation_function/demo/res_partner_relation_demo.xml +++ b/partner_multi_relation_function/demo/res_partner_relation_demo.xml @@ -1,6 +1,5 @@ - CEO - diff --git a/partner_multi_relation_function/models/res_partner_relation.py b/partner_multi_relation_function/models/res_partner_relation.py index 3846204d4ba..a25a6b64ddf 100644 --- a/partner_multi_relation_function/models/res_partner_relation.py +++ b/partner_multi_relation_function/models/res_partner_relation.py @@ -5,7 +5,6 @@ class ResPartnerRelation(models.Model): - _inherit = "res.partner.relation" function = fields.Char() diff --git a/partner_multi_relation_function/models/res_partner_relation_type.py b/partner_multi_relation_function/models/res_partner_relation_type.py index a6de32a6877..61ef8371317 100644 --- a/partner_multi_relation_function/models/res_partner_relation_type.py +++ b/partner_multi_relation_function/models/res_partner_relation_type.py @@ -4,7 +4,6 @@ class ResPartnerRelationType(models.Model): - _inherit = "res.partner.relation.type" allow_function = fields.Boolean( diff --git a/partner_multi_relation_function/models/res_partner_relation_type_selection.py b/partner_multi_relation_function/models/res_partner_relation_type_selection.py index 974eed75ff2..13035eefff3 100644 --- a/partner_multi_relation_function/models/res_partner_relation_type_selection.py +++ b/partner_multi_relation_function/models/res_partner_relation_type_selection.py @@ -5,7 +5,6 @@ class ResPartnerRelationTypeSelection(models.Model): - _inherit = "res.partner.relation.type.selection" allow_function = fields.Boolean() diff --git a/partner_multi_relation_function/pyproject.toml b/partner_multi_relation_function/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/partner_multi_relation_function/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/partner_multi_relation_function/readme/CONTRIBUTORS.md b/partner_multi_relation_function/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..e5e552ab271 --- /dev/null +++ b/partner_multi_relation_function/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Therp BV](https://therp.nl): + - Ronald Portier \<\> diff --git a/partner_multi_relation_function/readme/CONTRIBUTORS.rst b/partner_multi_relation_function/readme/CONTRIBUTORS.rst deleted file mode 100644 index f9370b5d9b1..00000000000 --- a/partner_multi_relation_function/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* `Therp BV `_: - - * Ronald Portier diff --git a/partner_multi_relation_function/readme/DESCRIPTION.md b/partner_multi_relation_function/readme/DESCRIPTION.md new file mode 100644 index 00000000000..e6e06b4f45c --- /dev/null +++ b/partner_multi_relation_function/readme/DESCRIPTION.md @@ -0,0 +1,7 @@ +This module gives the posibility to have a relation between partners +have a function. + +Of course there is a function field on partner, but this ignores the +fact that persons can have multiple functions depending on the relations +they are in. For instance a person can be a CEO in one company and a +volunteer in another organisation. diff --git a/partner_multi_relation_function/readme/DESCRIPTION.rst b/partner_multi_relation_function/readme/DESCRIPTION.rst deleted file mode 100644 index 0a926d35155..00000000000 --- a/partner_multi_relation_function/readme/DESCRIPTION.rst +++ /dev/null @@ -1,5 +0,0 @@ -This module gives the posibility to have a relation between partners have a function. - -Of course there is a function field on partner, but this ignores the fact that -persons can have multiple functions depending on the relations they are in. For -instance a person can be a CEO in one company and a volunteer in another organisation. diff --git a/partner_multi_relation_function/readme/USAGE.rst b/partner_multi_relation_function/readme/USAGE.md similarity index 53% rename from partner_multi_relation_function/readme/USAGE.rst rename to partner_multi_relation_function/readme/USAGE.md index 1ec248c17a0..bf388f321ce 100644 --- a/partner_multi_relation_function/readme/USAGE.rst +++ b/partner_multi_relation_function/readme/USAGE.md @@ -1,10 +1,8 @@ -Relation Type -~~~~~~~~~~~~~ +## Relation Type You can specify that a relation type can have a function attached to it. -Relation -~~~~~~~~ +## Relation -You can enter a function for relation types that allow this. The display name -for the relation will reflect the function entered, if any. +You can enter a function for relation types that allow this. The display +name for the relation will reflect the function entered, if any. diff --git a/partner_multi_relation_function/static/description/index.html b/partner_multi_relation_function/static/description/index.html index 758deecd967..361a3edb697 100644 --- a/partner_multi_relation_function/static/description/index.html +++ b/partner_multi_relation_function/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Partner Relation Functions -
+
+

Partner Relation Functions

- - -Odoo Community Association - -
-

Partner Relation Functions

-

Beta License: AGPL-3 OCA/partner-contact Translate me on Weblate Try me on Runboat

-

This module gives the posibility to have a relation between partners have a function.

-

Of course there is a function field on partner, but this ignores the fact that -persons can have multiple functions depending on the relations they are in. For -instance a person can be a CEO in one company and a volunteer in another organisation.

+

Beta License: AGPL-3 OCA/partner-contact Translate me on Weblate Try me on Runboat

+

This module gives the posibility to have a relation between partners +have a function.

+

Of course there is a function field on partner, but this ignores the +fact that persons can have multiple functions depending on the relations +they are in. For instance a person can be a CEO in one company and a +volunteer in another organisation.

Table of contents

    @@ -397,35 +394,35 @@

    Partner Relation Functions

-

Usage

+

Usage

-

Relation Type

+

Relation Type

You can specify that a relation type can have a function attached to it.

-

Relation

-

You can enter a function for relation types that allow this. The display name -for the relation will reflect the function entered, if any.

+

Relation

+

You can enter a function for relation types that allow this. The display +name for the relation will reflect the function entered, if any.

-

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

  • Therp BV
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -444,11 +441,10 @@

Maintainers

promote its widespread use.

Current maintainer:

NL66278

-

This module is part of the OCA/partner-contact project on GitHub.

+

This module is part of the OCA/partner-contact project on GitHub.

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

-
diff --git a/partner_multi_relation_function/views/res_partner_relation_all_views.xml b/partner_multi_relation_function/views/res_partner_relation_all_views.xml index 612b1f46507..ba8885a7ab3 100644 --- a/partner_multi_relation_function/views/res_partner_relation_all_views.xml +++ b/partner_multi_relation_function/views/res_partner_relation_all_views.xml @@ -1,6 +1,5 @@ - res.partner.relation.all - diff --git a/partner_multi_relation_function/views/res_partner_relation_type_views.xml b/partner_multi_relation_function/views/res_partner_relation_type_views.xml index 197bc93675c..75ec298690e 100644 --- a/partner_multi_relation_function/views/res_partner_relation_type_views.xml +++ b/partner_multi_relation_function/views/res_partner_relation_type_views.xml @@ -1,6 +1,5 @@ - res.partner.relation.type - From a850e247029b8d33f20bfab27653a50ca1d42096 Mon Sep 17 00:00:00 2001 From: Nikos Tsirintanis Date: Thu, 4 Jun 2026 13:46:05 +0200 Subject: [PATCH 14/14] [IMP] partner_multi_relation_function: Migration to 18.0 --- partner_multi_relation_function/__manifest__.py | 2 +- .../demo/res_partner_demo.xml | 1 - .../models/res_partner_relation_all.py | 17 +++++++---------- .../tests/test_partner_search.py | 11 +++++++++++ .../views/res_partner_relation_all_views.xml | 8 ++------ .../views/res_partner_relation_type_views.xml | 2 +- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/partner_multi_relation_function/__manifest__.py b/partner_multi_relation_function/__manifest__.py index 8ca4935dc17..3fd4d20910d 100644 --- a/partner_multi_relation_function/__manifest__.py +++ b/partner_multi_relation_function/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Partner Relation Functions", - "version": "16.0.1.1.0", + "version": "18.0.1.0.0", "author": "Therp BV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/partner-contact", "maintainers": ["NL66278"], diff --git a/partner_multi_relation_function/demo/res_partner_demo.xml b/partner_multi_relation_function/demo/res_partner_demo.xml index 26dcd589cf7..dc35e1ceab3 100644 --- a/partner_multi_relation_function/demo/res_partner_demo.xml +++ b/partner_multi_relation_function/demo/res_partner_demo.xml @@ -5,7 +5,6 @@ 0 Hilversum 1222 EE - bigguy@yourcompany.example.com +31 06 6461 0401 Albert Einstein diff --git a/partner_multi_relation_function/models/res_partner_relation_all.py b/partner_multi_relation_function/models/res_partner_relation_all.py index 1142032dace..9ee68ef013e 100644 --- a/partner_multi_relation_function/models/res_partner_relation_all.py +++ b/partner_multi_relation_function/models/res_partner_relation_all.py @@ -1,7 +1,7 @@ # Copyright 2024 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, fields, models +from odoo import _, api, fields, models class ResPartnerRelationAll(models.Model): @@ -30,14 +30,11 @@ def _get_additional_view_fields(self): """Allow inherit models to add fields to view.""" return super()._get_additional_view_fields() + ", typ.allow_function" - def name_get(self): + @api.depends("function") + def _compute_display_name(self): """Add function to name if present.""" + res = super()._compute_display_name() wf = _(" with function ") # Prevent repeated translation. - return [ - ( - this.id, - super(ResPartnerRelationAll, this).name_get()[0][1] - + (this.function and wf + this.function or ""), - ) - for this in self - ] + for this in self.filtered("function"): + this.display_name = (this.display_name or "") + wf + this.function + return res diff --git a/partner_multi_relation_function/tests/test_partner_search.py b/partner_multi_relation_function/tests/test_partner_search.py index 27aa1e3f274..078fe85119c 100644 --- a/partner_multi_relation_function/tests/test_partner_search.py +++ b/partner_multi_relation_function/tests/test_partner_search.py @@ -34,6 +34,17 @@ def test_search_relation_function(self): } ) self.assertTrue(relation_with_function) + # Test display_name includes function on relation.all + relation_all = self.env["res.partner.relation.all"].search( + [ + ("this_partner_id", "=", partner_project.id), + ("function", "=", "coordinator"), + ], + limit=1, + ) + self.assertTrue(relation_all) + self.assertIn("coordinator", relation_all.display_name) + self.assertIn("with function", relation_all.display_name) domain = [("search_relation_function", "=", "coordinator")] partners = Partner.search(domain) self.assertEqual(len(partners), 2) diff --git a/partner_multi_relation_function/views/res_partner_relation_all_views.xml b/partner_multi_relation_function/views/res_partner_relation_all_views.xml index ba8885a7ab3..f18b09bbea4 100644 --- a/partner_multi_relation_function/views/res_partner_relation_all_views.xml +++ b/partner_multi_relation_function/views/res_partner_relation_all_views.xml @@ -8,12 +8,8 @@ /> - - + + diff --git a/partner_multi_relation_function/views/res_partner_relation_type_views.xml b/partner_multi_relation_function/views/res_partner_relation_type_views.xml index 75ec298690e..436dcbaefcb 100644 --- a/partner_multi_relation_function/views/res_partner_relation_type_views.xml +++ b/partner_multi_relation_function/views/res_partner_relation_type_views.xml @@ -7,7 +7,7 @@ ref="partner_multi_relation.tree_res_partner_relation_type" /> - +