From 2d108c414b1211d69e819b691e520b6247a4f4af Mon Sep 17 00:00:00 2001 From: Laetitia Da Costa Date: Wed, 22 Apr 2026 15:43:29 +0200 Subject: [PATCH] [DEL]partner_skills:disabled skill level for now --- partner_skills/i18n/fr.po | 10 +-- partner_skills/models/partner_skill_line.py | 75 +++++++++++++------ partner_skills/models/partner_skill_type.py | 2 +- partner_skills/models/res_partner.py | 2 +- .../views/partner_skill_type_views.xml | 30 ++++++-- partner_skills/views/res_partner_views.xml | 4 +- 6 files changed, 85 insertions(+), 38 deletions(-) diff --git a/partner_skills/i18n/fr.po b/partner_skills/i18n/fr.po index 2f86b74..8550d67 100644 --- a/partner_skills/i18n/fr.po +++ b/partner_skills/i18n/fr.po @@ -165,7 +165,7 @@ msgstr "Niveaux" #. module: partner_skills #: model:ir.model,name:partner_skills.model_partner_skill_type msgid "Partner Skill Type" -msgstr "Type" +msgstr "Domaine" #. module: partner_skills #: model:ir.ui.menu,name:partner_skills.menu_partner_skills @@ -227,13 +227,13 @@ msgstr "Niveau" #: model:ir.model.fields,field_description:partner_skills.field_partner_skill_line__skill_type_id #: model_terms:ir.ui.view,arch_db:partner_skills.partner_skill_view_search msgid "Skill Type" -msgstr "Type" +msgstr "Domaine" #. module: partner_skills #: model:ir.actions.act_window,name:partner_skills.partner_skill_type_action #: model:ir.ui.menu,name:partner_skills.menu_action_res_bank_form msgid "Skill Types" -msgstr "Types" +msgstr "Domaines" #. module: partner_skills #: model:ir.model,name:partner_skills.model_partner_skill_line @@ -256,7 +256,7 @@ msgstr "Compétences" #: code:addons/partner_skills/models/partner_skill_line.py:0 msgid "The skill %(name)s and skill type %(type)s doesn't match" msgstr "" -"La compétence %(name)s et le type de compétences %(type)s ne correspondent " +"La compétence %(name)s et le domaine de compétences %(type)s ne correspondent " "pas" #. module: partner_skills @@ -264,7 +264,7 @@ msgstr "" #: code:addons/partner_skills/models/partner_skill_line.py:0 msgid "The skill level %(level)s is not valid for skill type: %(type)s" msgstr "" -"Le niveau de compétence %(level)s n'est pas valide pour le type de " +"Le niveau de compétence %(level)s n'est pas valide pour le domaine de " "compétences : %(type)s" #. module: partner_skills diff --git a/partner_skills/models/partner_skill_line.py b/partner_skills/models/partner_skill_line.py index e862465..c5ba56d 100644 --- a/partner_skills/models/partner_skill_line.py +++ b/partner_skills/models/partner_skill_line.py @@ -1,5 +1,5 @@ from odoo import api, fields, models, _ -from odoo.exceptions import ValidationError +from odoo.exceptions import UserError, ValidationError class PartnerSkillLine(models.Model): @@ -13,10 +13,15 @@ class PartnerSkillLine(models.Model): 'partner.skill', compute='_compute_skill_id', store=True, domain="[('skill_type_id', '=', skill_type_id)]", readonly=False, required=True, ondelete='cascade') + # Skill levels are hidden from the UI for now (client request). The field is + # kept so existing data is preserved and the feature can be re-enabled later. skill_level_id = fields.Many2one( - 'partner.skill.level', compute='_compute_skill_level_id', + 'partner.skill.level', + # compute='_compute_skill_level_id', # re-enable with the method below domain="[('skill_type_id', '=', skill_type_id)]", - store=True, readonly=False, required=True, ondelete='cascade') + store=True, readonly=False, + # required=True, # re-enable when skill levels come back + ondelete='cascade') skill_type_id = fields.Many2one( 'partner.skill.type', default=lambda self: self.env['partner.skill.type'].search([], limit=1), @@ -39,15 +44,17 @@ class PartnerSkillLine(models.Model): type=record.skill_type_id.name, )) - @api.constrains('skill_type_id', 'skill_level_id') - def _check_skill_level(self): - for record in self: - if record.skill_level_id not in record.skill_type_id.skill_level_ids: - raise ValidationError(_( - "The skill level %(level)s is not valid for skill type: %(type)s", - level=record.skill_level_id.name, - type=record.skill_type_id.name, - )) + # Temporarily disabled: references skill_type_id.skill_level_ids which is + # commented out on partner.skill.type while levels are hidden. + # @api.constrains('skill_type_id', 'skill_level_id') + # def _check_skill_level(self): + # for record in self: + # if record.skill_level_id not in record.skill_type_id.skill_level_ids: + # raise ValidationError(_( + # "The skill level %(level)s is not valid for skill type: %(type)s", + # level=record.skill_level_id.name, + # type=record.skill_type_id.name, + # )) @api.depends('skill_type_id') def _compute_skill_id(self): @@ -57,16 +64,42 @@ class PartnerSkillLine(models.Model): else: record.skill_id = False - @api.depends('skill_id') - def _compute_skill_level_id(self): - for record in self: - if not record.skill_id: - record.skill_level_id = False - else: - skill_levels = record.skill_type_id.skill_level_ids - record.skill_level_id = skill_levels.filtered('default_level') or skill_levels[0] if skill_levels else False + # Temporarily disabled: references skill_type_id.skill_level_ids which is + # commented out on partner.skill.type while levels are hidden. + # @api.depends('skill_id') + # def _compute_skill_level_id(self): + # for record in self: + # if not record.skill_id: + # record.skill_level_id = False + # else: + # skill_levels = record.skill_type_id.skill_level_ids + # record.skill_level_id = skill_levels.filtered('default_level') or skill_levels[0] if skill_levels else False + + def action_add_all_skills_of_type(self): + self.ensure_one() + if not self.skill_type_id: + raise UserError(_("Please select a skill type first.")) + if not isinstance(self.partner_id.id, int): + raise UserError(_("Please save the contact before adding skills in bulk.")) + existing_skills = self.partner_id.partner_skill_ids.filtered( + lambda l: l.skill_type_id == self.skill_type_id + ).skill_id + skills_to_add = self.skill_type_id.skill_ids - existing_skills + if skills_to_add: + self.create([{ + 'partner_id': self.partner_id.id, + 'skill_type_id': self.skill_type_id.id, + 'skill_id': skill.id, + } for skill in skills_to_add]) + return { + 'type': 'ir.actions.client', + 'tag': 'soft_reload', + } @api.depends('skill_id', 'skill_level_id') def _compute_display_name(self): for record in self: - record.display_name = f"{record.skill_id.name}: {record.skill_level_id.name}" + if record.skill_level_id: + record.display_name = f"{record.skill_id.name}: {record.skill_level_id.name}" + else: + record.display_name = record.skill_id.name or "" diff --git a/partner_skills/models/partner_skill_type.py b/partner_skills/models/partner_skill_type.py index 39252bb..965e1c2 100644 --- a/partner_skills/models/partner_skill_type.py +++ b/partner_skills/models/partner_skill_type.py @@ -13,7 +13,7 @@ class PartnerSkillType(models.Model): active = fields.Boolean('Active', default=True) name = fields.Char(required=True, translate=True) skill_ids = fields.One2many('partner.skill', 'skill_type_id', string="Skills") - skill_level_ids = fields.One2many('partner.skill.level', 'skill_type_id', string="Levels", copy=True) + #skill_level_ids = fields.One2many('partner.skill.level', 'skill_type_id', string="Levels", copy=True) color = fields.Integer('Color', default=_get_default_color) def copy_data(self, default=None): diff --git a/partner_skills/models/res_partner.py b/partner_skills/models/res_partner.py index a0e4a8e..275a514 100644 --- a/partner_skills/models/res_partner.py +++ b/partner_skills/models/res_partner.py @@ -13,4 +13,4 @@ class ResPartner(models.Model): @api.depends('partner_skill_ids.skill_id') def _compute_skill_ids(self): for partner in self: - partner.skill_ids = partner.partner_skill_ids.skill_id + partner.skill_ids = partner.partner_skill_ids.skill_id or None diff --git a/partner_skills/views/partner_skill_type_views.xml b/partner_skills/views/partner_skill_type_views.xml index 9deec3a..6338315 100644 --- a/partner_skills/views/partner_skill_type_views.xml +++ b/partner_skills/views/partner_skill_type_views.xml @@ -2,7 +2,7 @@ - + - + @@ -68,7 +68,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -134,6 +134,8 @@ + partner.skill.line.view.form partner.skill.line @@ -146,10 +148,17 @@ +
+
+
+
+
diff --git a/partner_skills/views/res_partner_views.xml b/partner_skills/views/res_partner_views.xml index 2498138..d3b63c1 100644 --- a/partner_skills/views/res_partner_views.xml +++ b/partner_skills/views/res_partner_views.xml @@ -12,8 +12,8 @@ - - + +