From 164f71737270a23c8fc15bb11a945d254da1626f Mon Sep 17 00:00:00 2001 From: "Anh Thao Pham (pta)" Date: Fri, 16 Feb 2024 15:28:17 +0100 Subject: [PATCH] [FIX] base_address_extended: sync city_id with children contacts Steps to reproduce: - Install contacts and base_address_extended - Install a module adding "res.city" records (e.g. l10n_co_edi) - Go to Contacts and create a new one: * Name: [any] * Country: Colombia * City (city_id): [any] - Create a "child" contact of "Contact" type - Save the contact Issue: "city_id" field of the child contact is False. It is not possible to set the address of a contact-type contact manually. Some address fields ('street', 'street2', 'zip', 'city', 'state_id', 'country_id') are synchronized with the parent contact. "city_id" is not and is not settable at all for contact-type contact. It could be an issue for Colombian or Mexican localizations if a child contact is used for an invoice as some data have to be retrieved from "city_id" field to generate the electronic invoice. Solution: Add "city_id" in the list of address fields to sync. opw-3747296 closes odoo/odoo#158686 X-original-commit: ec059dfd0a3f57754bd481f0a651b01c92b10dea Signed-off-by: Habib Ayob (ayh) --- .../models/res_partner.py | 4 ++++ .../tests/test_street_fields.py | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/addons/base_address_extended/models/res_partner.py b/addons/base_address_extended/models/res_partner.py index 5bb0f006eeb..2503e6f085a 100644 --- a/addons/base_address_extended/models/res_partner.py +++ b/addons/base_address_extended/models/res_partner.py @@ -16,6 +16,10 @@ class Partner(models.Model): city_id = fields.Many2one(comodel_name='res.city', string='City ID') country_enforce_cities = fields.Boolean(related='country_id.enforce_cities') + @api.model + def _address_fields(self): + return super()._address_fields() + ['city_id'] + def _inverse_street_data(self): """ update self.street based on street_name, street_number and street_number2 """ for partner in self: diff --git a/addons/base_address_extended/tests/test_street_fields.py b/addons/base_address_extended/tests/test_street_fields.py index 6558c047f71..a540d8dd7c3 100644 --- a/addons/base_address_extended/tests/test_street_fields.py +++ b/addons/base_address_extended/tests/test_street_fields.py @@ -36,3 +36,26 @@ class TestStreetFields(TransactionCase): partner.street_number = number partner.street_name = name self.assertEqual(partner.street, street.strip(), 'Wrongly formatted street: expected %s, received %s' % (street, partner.street)) + + def test_child_sync(self): + """ Test that city_id is propagated to (contact-type) children contacts. """ + usa = self.env.ref('base.us') + new_york_city = self.env['res.city'].create({ + 'name': 'New York', + 'country_id': usa.id, + }) + parent = self.env['res.partner'].create({ + 'name': 'Parent Company', + 'country_id': usa.id, + 'city_id': new_york_city.id, + }) + child = self.env['res.partner'].create({ + 'name': 'Child Contact', + 'type': 'contact', + 'parent_id': parent.id, + }) + self.assertRecordValues(child, [{ + 'name': 'Child Contact', + 'country_id': usa.id, + 'city_id': new_york_city.id, + }])