From 43036af8fa1aa93bc02a87ca4bbf7ab38527741d Mon Sep 17 00:00:00 2001 From: Alfredo Date: Thu, 12 Mar 2026 11:20:34 +0100 Subject: [PATCH] [18.0][ADD] sale_contact_subtype_followers: Always return the same partner for any type of address. --- sale_contact_subtype_followers/README.rst | 34 +++++++++++++++++++ sale_contact_subtype_followers/__init__.py | 1 + .../__manifest__.py | 12 +++++++ .../models/__init__.py | 1 + .../models/res_partner.py | 34 +++++++++++++++++++ sale_contact_subtype_followers/pyproject.toml | 3 ++ 6 files changed, 85 insertions(+) create mode 100644 sale_contact_subtype_followers/README.rst create mode 100644 sale_contact_subtype_followers/__init__.py create mode 100644 sale_contact_subtype_followers/__manifest__.py create mode 100644 sale_contact_subtype_followers/models/__init__.py create mode 100644 sale_contact_subtype_followers/models/res_partner.py create mode 100644 sale_contact_subtype_followers/pyproject.toml diff --git a/sale_contact_subtype_followers/README.rst b/sale_contact_subtype_followers/README.rst new file mode 100644 index 000000000..ed1c121d6 --- /dev/null +++ b/sale_contact_subtype_followers/README.rst @@ -0,0 +1,34 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +============================== +Sale Contact Subtype Followers +============================== + +* This module removes the functionality of the system that assigns different + child contacts depending on their type. In this way, the contact type is only + used for informational purposes and the shipping address is not automatically + assigned, for example, in pickings on delivery address. +* To allow this functionality to work anywhere in the system, this code replaces + the values ​​generated by the "address_get" method with the same selected base + contact. + +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 smash it by providing detailed and welcomed feedback. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Contributors +------------ + +* Ana Juaristi +* Alfredo de la Fuente diff --git a/sale_contact_subtype_followers/__init__.py b/sale_contact_subtype_followers/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/sale_contact_subtype_followers/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_contact_subtype_followers/__manifest__.py b/sale_contact_subtype_followers/__manifest__.py new file mode 100644 index 000000000..7fa5c663d --- /dev/null +++ b/sale_contact_subtype_followers/__manifest__.py @@ -0,0 +1,12 @@ +# Copyright 2026 Alfredo de la fuente - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Sale Contact Subtype Followers", + "version": "18.0.1.0.0", + "category": "Sales", + "license": "AGPL-3", + "author": "AvanzOSC", + "website": "https://github.com/avanzosc/sale-addons", + "depends": ["base"], + "installable": True, +} diff --git a/sale_contact_subtype_followers/models/__init__.py b/sale_contact_subtype_followers/models/__init__.py new file mode 100644 index 000000000..91fed54d4 --- /dev/null +++ b/sale_contact_subtype_followers/models/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/sale_contact_subtype_followers/models/res_partner.py b/sale_contact_subtype_followers/models/res_partner.py new file mode 100644 index 000000000..8c5d2f51d --- /dev/null +++ b/sale_contact_subtype_followers/models/res_partner.py @@ -0,0 +1,34 @@ +# Copyright 2026 Alfredo de la fuente - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo import models + +from odoo.addons.base.models.res_partner import Partner as BaseResPartner + + +class ResPartner(models.Model): + _inherit = "res.partner" + + def address_get_override_no_assign_subtype_contact(self, adr_pref=None): + """ + Reemplaza el funcionamiento de base del método "address_get" de forma + que siempre se retorne el mismo contacto original. + + :param adr_pref: Listado de direcciones a buscar, defaults to None + :type adr_pref: set[str], optional + :returns dict[int] Diccionario con el conjunto de direcciones y su + correspondiente dirección (en este caso, siempre `self.id`). + """ + result = dict() + adr_pref = set(adr_pref or []) + + if "contact" not in adr_pref: + adr_pref.add("contact") + + for address_type in adr_pref: + result[address_type] = self.id + + return result + + +# XXX: Override del método para respetar herencias. +BaseResPartner.address_get = ResPartner.address_get_override_no_assign_subtype_contact diff --git a/sale_contact_subtype_followers/pyproject.toml b/sale_contact_subtype_followers/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/sale_contact_subtype_followers/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi"