diff --git a/README.md b/README.md index e1f33daefa5..d1d18d9ff4f 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,6 @@ addon | version | maintainers | summary [partner_address_street3](partner_address_street3/) | 19.0.1.0.0 | | Add a third address line on partners [partner_affiliate](partner_affiliate/) | 19.0.1.0.0 | | Partner Affiliates [partner_auto_archive](partner_auto_archive/) | 19.0.1.0.0 | | Archive periodically all contacts marked as auto-archive. -[partner_category_description](partner_category_description/) | 19.0.1.0.1 | edlopen rafaelbn | Adds a description field to contact categories to improve organization and managment of customer relationships. [partner_company_default](partner_company_default/) | 19.0.1.0.0 | | Partner Company Default [partner_company_group](partner_company_group/) | 19.0.1.0.0 | luisg123v | Adds the possibility to add a company group to a company [partner_company_type](partner_company_type/) | 19.0.1.0.0 | | Adds a company type to partner that are companies diff --git a/partner_address_street3/models/res_partner.py b/partner_address_street3/models/res_partner.py index 1b3a2f33db1..078d4e55b9f 100644 --- a/partner_address_street3/models/res_partner.py +++ b/partner_address_street3/models/res_partner.py @@ -18,6 +18,18 @@ def _address_fields(self): res.append("street3") return res + @api.model + def default_get(self, default_fields): + values = super().default_get(default_fields) + parent_id = self.env.context.get("default_parent_id") or values.get("parent_id") + if parent_id: + parent = self.browse(parent_id) + for field in self._address_fields(): + if field in default_fields and not values.get(field): + val = parent[field] + values[field] = val.id if isinstance(val, models.BaseModel) else val + return values + def _display_address(self, without_company=False): """Remove empty lines which can happen when street3 field is empty.""" res = super()._display_address(without_company=without_company) diff --git a/partner_address_street3/tests/test_street_3.py b/partner_address_street3/tests/test_street_3.py index 93daad700d6..07854d63243 100644 --- a/partner_address_street3/tests/test_street_3.py +++ b/partner_address_street3/tests/test_street_3.py @@ -64,3 +64,55 @@ def test_uninstall(self): uninstall_hook(self.env) us_country = self.env.ref("base.us") self.assertTrue("%(street3)s" not in us_country.address_format) + + def test_default_get_copies_street3_from_default_parent_id(self): + """Replicate the "Add in Contacts & Addresses" inline form context. + + Odoo passes ``default_parent_id`` in the context when the inline + ``child_ids`` form is opened from a company contact, so ``default_get`` + must pre-fill the address fields (including ``street3``) from that + parent. + """ + parent = self.env["res.partner"].create( + { + "name": "Parent Company", + "street": "123 Main St", + "street2": "Floor 2", + "street3": "Suite 100", + "city": "Springfield", + "country_id": self.env.ref("base.us").id, + } + ) + values = ( + self.env["res.partner"] + .with_context(default_parent_id=parent.id, default_type="contact") + .default_get(["street", "street2", "street3", "city"]) + ) + self.assertEqual(values.get("street3"), "Suite 100") + self.assertEqual(values.get("street2"), "Floor 2") + self.assertEqual(values.get("street"), "123 Main St") + self.assertEqual(values.get("city"), "Springfield") + + def test_default_get_does_not_overwrite_explicit_value(self): + """An explicit default must win over the parent's value.""" + parent = self.env["res.partner"].create( + {"name": "Parent", "street3": "From parent"} + ) + values = ( + self.env["res.partner"] + .with_context( + default_parent_id=parent.id, + default_type="contact", + default_street3="Explicit", + ) + .default_get(["street3"]) + ) + self.assertEqual(values.get("street3"), "Explicit") + + def test_default_get_no_parent(self): + values = ( + self.env["res.partner"] + .with_context(default_type="contact") + .default_get(["street3"]) + ) + self.assertNotIn("street3", values) diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index e033e0cbeb0..b40456428bb 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -12,7 +12,6 @@ dependencies = [ "odoo-addon-partner_address_street3==19.0.*", "odoo-addon-partner_affiliate==19.0.*", "odoo-addon-partner_auto_archive==19.0.*", - "odoo-addon-partner_category_description==19.0.*", "odoo-addon-partner_company_default==19.0.*", "odoo-addon-partner_company_group==19.0.*", "odoo-addon-partner_company_type==19.0.*", @@ -57,7 +56,6 @@ dependencies = [ "odoo-addon-partner_title_contacts==19.0.*", "odoo-addon-partner_type_base==19.0.*", "odoo-addon-partner_tz==19.0.*", - "odoo-addon-partner_uom_mapping==19.0.*", "odoo-addon-partner_utm_source==19.0.*", "odoo-addon-partner_vat_unique==19.0.*", "odoo-addon-sale_partner_company_group==19.0.*",