From b61569e7d15f25faad492336d913a8c4eb4a40d2 Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Wed, 10 Sep 2025 15:53:46 +0200 Subject: [PATCH 1/2] [FIX] partner_industry_secondary: Fix industry populate Fix industry populate to take to handle required name. --- .../models/res_partner_industry.py | 18 ++++++++++++++++++ .../readme/newsframents/+populate.feature.rst | 1 + 2 files changed, 19 insertions(+) create mode 100644 partner_industry_secondary/readme/newsframents/+populate.feature.rst diff --git a/partner_industry_secondary/models/res_partner_industry.py b/partner_industry_secondary/models/res_partner_industry.py index b191c0d4836..af1c8f9f5d0 100644 --- a/partner_industry_secondary/models/res_partner_industry.py +++ b/partner_industry_secondary/models/res_partner_industry.py @@ -4,9 +4,11 @@ # Copyright 2018 Eficent Business and IT Consulting Services, S.L. # Copyright 2019 Tecnativa - Cristina Martin R. # Copyright 2025 Moduon - Eduardo de Miguel +# Copyright 2025, 2026 XCG SAS # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo import _, api, exceptions, fields, models +from odoo.tools import populate class ResPartnerIndustry(models.Model): @@ -66,3 +68,19 @@ def copy(self, default=None): if "name" not in default or default["name"] == self.name: default["name"] = self.name + " 2" return super(ResPartnerIndustry, self).copy(default=default) + + def _populate_factories(self): + result = super()._populate_factories() + modified_result = [] + # search for name to replace it to avoid empty names + for field_name, populate_function in result: + if field_name == "name": + modified_result.append( + ( + field_name, + populate.cartesian(["Industry name {counter}"], [1.0]), + ) + ) + else: + modified_result.append((field_name, populate_function)) + return modified_result diff --git a/partner_industry_secondary/readme/newsframents/+populate.feature.rst b/partner_industry_secondary/readme/newsframents/+populate.feature.rst new file mode 100644 index 00000000000..4d9a20cad73 --- /dev/null +++ b/partner_industry_secondary/readme/newsframents/+populate.feature.rst @@ -0,0 +1 @@ +Fix industry populate to take to handle required name. From 014385234fcc21a43f665af2d6d7e2029fc22089 Mon Sep 17 00:00:00 2001 From: Vincent Hatakeyama Date: Wed, 10 Sep 2025 16:11:33 +0200 Subject: [PATCH 2/2] [FIX] partner_industry_secondary: fix contrains check that applied only to a single model --- .../models/res_partner_industry.py | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/partner_industry_secondary/models/res_partner_industry.py b/partner_industry_secondary/models/res_partner_industry.py index af1c8f9f5d0..ce6b3b8d500 100644 --- a/partner_industry_secondary/models/res_partner_industry.py +++ b/partner_industry_secondary/models/res_partner_industry.py @@ -53,15 +53,19 @@ def get_names(cat): @api.constrains("name", "parent_id") def _check_uniq_name(self): - if ( - self.search_count( - [("name", "=", self.name), ("parent_id", "=", self.parent_id.id)] - ) - > 1 - ): - raise exceptions.ValidationError( - _("Error! Industry with same name and parent already exists.") - ) + for industry in self: + if ( + self.search_count( + [ + ("name", "=", industry.name), + ("parent_id", "=", industry.parent_id.id), + ] + ) + > 1 + ): + raise exceptions.ValidationError( + _("Error! Industry with same name and parent already exists.") + ) def copy(self, default=None): default = default or {}