From 1901658d395442fb1f66e0b71ba38f48cd3f4854 Mon Sep 17 00:00:00 2001 From: Laetitia Da Costa Date: Mon, 11 May 2026 19:08:52 +0200 Subject: [PATCH] [WIP]partner_skills:replace radio button by dropdown and allow to check many skills at once --- partner_skills/i18n/fr.po | 4 +-- partner_skills/models/partner_skill_line.py | 35 +++++++++++++++---- .../views/partner_skill_type_views.xml | 25 +++++++------ 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/partner_skills/i18n/fr.po b/partner_skills/i18n/fr.po index e9e6a67..738debc 100644 --- a/partner_skills/i18n/fr.po +++ b/partner_skills/i18n/fr.po @@ -34,8 +34,8 @@ msgstr "" #. module: partner_skills #: model_terms:ir.ui.view,arch_db:partner_skills.partner_skill_line_view_form -msgid "Add all skills of this type" -msgstr "Ajouter toutes les compétences du domaine" +msgid "Check all boxes" +msgstr "Cocher toutes les cases" #. module: partner_skills #: model_terms:ir.ui.view,arch_db:partner_skills.partner_skill_type_view_form diff --git a/partner_skills/models/partner_skill_line.py b/partner_skills/models/partner_skill_line.py index c5ba56d..8da81a6 100644 --- a/partner_skills/models/partner_skill_line.py +++ b/partner_skills/models/partner_skill_line.py @@ -26,6 +26,14 @@ class PartnerSkillLine(models.Model): 'partner.skill.type', default=lambda self: self.env['partner.skill.type'].search([], limit=1), required=True, ondelete='cascade') + # Form helper to allow multi-selection of skills in the "Select Skills" + # dialog. Each picked skill ends up as its own partner.skill.line via + # action_save_skill_selection. + skill_ids = fields.Many2many( + 'partner.skill', + string="Skills", + domain="[('skill_type_id', '=', skill_type_id)]", + ) level_progress = fields.Integer(related='skill_level_id.level_progress') color = fields.Integer(related='skill_type_id.color') @@ -56,14 +64,21 @@ class PartnerSkillLine(models.Model): # type=record.skill_type_id.name, # )) - @api.depends('skill_type_id') + @api.depends('skill_type_id', 'skill_ids') def _compute_skill_id(self): for record in self: - if record.skill_type_id: + if record.skill_ids: + record.skill_id = record.skill_ids[0] + elif record.skill_type_id: record.skill_id = record.skill_type_id.skill_ids[0] if record.skill_type_id.skill_ids else False else: record.skill_id = False + @api.onchange('skill_type_id') + def _onchange_skill_type_id_reset_skill_ids(self): + for record in self: + record.skill_ids = 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') @@ -75,18 +90,20 @@ class PartnerSkillLine(models.Model): # 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): + def action_save_skill_selection(self): self.ensure_one() if not self.skill_type_id: raise UserError(_("Please select a skill type first.")) + if not self.skill_ids: + raise UserError(_("Please select at least one skill.")) if not isinstance(self.partner_id.id, int): - raise UserError(_("Please save the contact before adding skills in bulk.")) + raise UserError(_("Please save the contact before adding skills.")) 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 + skills_to_add = self.skill_ids - existing_skills if skills_to_add: - self.create([{ + self.env['partner.skill.line'].create([{ 'partner_id': self.partner_id.id, 'skill_type_id': self.skill_type_id.id, 'skill_id': skill.id, @@ -96,6 +113,12 @@ class PartnerSkillLine(models.Model): 'tag': 'soft_reload', } + def action_check_all_skills(self): + self.ensure_one() + if not self.skill_type_id: + raise UserError(_("Please select a skill type first.")) + self.skill_ids = self.skill_type_id.skill_ids + @api.depends('skill_id', 'skill_level_id') def _compute_display_name(self): for record in self: diff --git a/partner_skills/views/partner_skill_type_views.xml b/partner_skills/views/partner_skill_type_views.xml index 6338315..304c743 100644 --- a/partner_skills/views/partner_skill_type_views.xml +++ b/partner_skills/views/partner_skill_type_views.xml @@ -145,19 +145,20 @@ - + -
-
- + +
+