From d3257c857b02667ca4090de921c90fd2b147464c Mon Sep 17 00:00:00 2001 From: clementthomas Date: Mon, 28 Oct 2024 10:34:52 +0100 Subject: [PATCH] [NEW] partner_skills --- partner_skills/__init__.py | 1 + partner_skills/__manifest__.py | 20 +++ partner_skills/i18n/fr.po | 143 ++++++++++++++++++ partner_skills/models/__init__.py | 2 + partner_skills/models/res_partner.py | 10 ++ partner_skills/models/res_partner_skill.py | 50 ++++++ partner_skills/security/ir.model.access.csv | 3 + .../views/res_partner_skill_views.xml | 63 ++++++++ partner_skills/views/res_partner_views.xml | 50 ++++++ 9 files changed, 342 insertions(+) create mode 100644 partner_skills/__init__.py create mode 100644 partner_skills/__manifest__.py create mode 100644 partner_skills/i18n/fr.po create mode 100644 partner_skills/models/__init__.py create mode 100644 partner_skills/models/res_partner.py create mode 100644 partner_skills/models/res_partner_skill.py create mode 100644 partner_skills/security/ir.model.access.csv create mode 100644 partner_skills/views/res_partner_skill_views.xml create mode 100644 partner_skills/views/res_partner_views.xml diff --git a/partner_skills/__init__.py b/partner_skills/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/partner_skills/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/partner_skills/__manifest__.py b/partner_skills/__manifest__.py new file mode 100644 index 0000000..f244f7b --- /dev/null +++ b/partner_skills/__manifest__.py @@ -0,0 +1,20 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Partner Skills', + 'summary': "Add skill managment on partners", + 'version': "16.0.1.0.0", + 'author': "Clément Thomas", + 'license': "AGPL-3", + 'maintainer': 'Elabore', + 'category': 'Partner Tools', + 'website': 'https://odoo-community.org/', + 'depends': ['contacts'], + 'data': [ + 'security/ir.model.access.csv', + 'views/res_partner_skill_views.xml', + 'views/res_partner_views.xml', + ], + 'auto_install': False, + 'installable': True, +} diff --git a/partner_skills/i18n/fr.po b/partner_skills/i18n/fr.po new file mode 100644 index 0000000..0a6a0b4 --- /dev/null +++ b/partner_skills/i18n/fr.po @@ -0,0 +1,143 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * partner_skills +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-28 08:49+0000\n" +"PO-Revision-Date: 2024-10-28 08:49+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__active +msgid "Active" +msgstr "Actif" + +#. module: partner_skills +#: model_terms:ir.ui.view,arch_db:partner_skills.res_partner_skill_view_search +msgid "Archived" +msgstr "Archivé" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__child_ids +msgid "Child Skills" +msgstr "Sous-Compétences" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__color +msgid "Color" +msgstr "Couleur" + +#. module: partner_skills +#: model:ir.model,name:partner_skills.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: partner_skills +#: model_terms:ir.actions.act_window,help:partner_skills.action_partner_skill_form +msgid "Create a Skill" +msgstr "Créer une compétence" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__create_uid +msgid "Created by" +msgstr "Créée par" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__create_date +msgid "Created on" +msgstr "Crée le" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__display_name +msgid "Display Name" +msgstr "Nom" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__id +msgid "ID" +msgstr "ID" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__parent_path +msgid "Parent Path" +msgstr "Chemin parent" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__parent_id +msgid "Parent Skill" +msgstr "Compétence parente" + +#. module: partner_skills +#: model:ir.model,name:partner_skills.model_res_partner_skill +msgid "Partner skill" +msgstr "Compétence des partenaires" + +#. module: partner_skills +#: model_terms:ir.ui.view,arch_db:partner_skills.res_partner_skill_view_search +msgid "Search Partner Skills" +msgstr "Recherche Compétences des partenaires" + +#. module: partner_skills +#: model_terms:ir.ui.view,arch_db:partner_skills.view_partner_search_favorite +#: model_terms:ir.ui.view,arch_db:partner_skills.view_partner_skill_form +msgid "Skill" +msgstr "Compétence" + +#. module: partner_skills +#: model:ir.model.fields,field_description:partner_skills.field_res_partner_skill__name +msgid "Skill Name" +msgstr "Nom de la compétence" + +#. module: partner_skills +#: model:ir.actions.act_window,name:partner_skills.action_partner_skill_form +#: model:ir.model.fields,field_description:partner_skills.field_res_partner__skill_ids +#: model:ir.model.fields,field_description:partner_skills.field_res_users__skill_ids +#: model:ir.ui.menu,name:partner_skills.menu_partner_skill_form +#: model_terms:ir.ui.view,arch_db:partner_skills.view_partner_skill_list +msgid "Skills" +msgstr "Compétences" + +#. module: partner_skills +#: model:ir.model.fields,help:partner_skills.field_res_partner_skill__active +msgid "The active field allows you to hide the skill without removing it." +msgstr "Le champ actif vous permet de cacher la compétence sans la supprimer." + +#. module: partner_skills +#. odoo-python +#: code:addons/partner_skills/models/res_partner_skill.py:0 +#, python-format +msgid "You can not create recursive skills." +msgstr "Vous ne pouvez pas créer de compétences récursives." + +#. module: partner_skills +#: model_terms:ir.ui.view,arch_db:partner_skills.view_partner_skill_form +msgid "e.g. \"Project management\"" +msgstr "ex: \"Gestion de projet\"" + +#. module: partner_skills +#: model_terms:ir.ui.view,arch_db:partner_skills.view_partner_form_skills +msgid "e.g. \"Project management\", ..." +msgstr "ex: \"Gestion de projet\"" diff --git a/partner_skills/models/__init__.py b/partner_skills/models/__init__.py new file mode 100644 index 0000000..cac5d71 --- /dev/null +++ b/partner_skills/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_partner +from . import res_partner_skill \ No newline at end of file diff --git a/partner_skills/models/res_partner.py b/partner_skills/models/res_partner.py new file mode 100644 index 0000000..f30acb5 --- /dev/null +++ b/partner_skills/models/res_partner.py @@ -0,0 +1,10 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import logging +from odoo import fields, models + + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + skill_ids = fields.Many2many('res.partner.skill', string='Skills') \ No newline at end of file diff --git a/partner_skills/models/res_partner_skill.py b/partner_skills/models/res_partner_skill.py new file mode 100644 index 0000000..f8f4d65 --- /dev/null +++ b/partner_skills/models/res_partner_skill.py @@ -0,0 +1,50 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models, api, _ +from random import randint +from odoo.exceptions import ValidationError + + +class ResPartnerSkill(models.Model): + _name = 'res.partner.skill' + + _description = 'Partner skill' + _order = 'name' + _parent_store = True + + def _get_default_color(self): + return randint(1, 11) + + name = fields.Char(string='Skill Name', required=True, translate=True) + color = fields.Integer(string='Color', default=_get_default_color) + parent_id = fields.Many2one('res.partner.skill', string='Parent Skill', index=True, ondelete='cascade') + child_ids = fields.One2many('res.partner.skill', 'parent_id', string='Child Skills') + active = fields.Boolean(default=True, help="The active field allows you to hide the skill without removing it.") + parent_path = fields.Char(index=True, unaccent=False) + + @api.constrains('parent_id') + def _check_parent_id(self): + if not self._check_recursion(): + raise ValidationError(_('You can not create recursive skills.')) + + def name_get(self): + """ Return the skills' display name, including their direct + parent by default. + """ + res = [] + for skill in self: + names = [] + current = skill + while current: + names.append(current.name) + current = current.parent_id + res.append((skill.id, ' / '.join(reversed(names)))) + return res + + @api.model + def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None): + args = args or [] + if name: + # Be sure name_search is symetric to name_get + name = name.split(' / ')[-1] + args = [('name', operator, name)] + args + return self._search(args, limit=limit, access_rights_uid=name_get_uid) \ No newline at end of file diff --git a/partner_skills/security/ir.model.access.csv b/partner_skills/security/ir.model.access.csv new file mode 100644 index 0000000..2203a1b --- /dev/null +++ b/partner_skills/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_res_partner_skill_group_user","res_partner_skill group_user","model_res_partner_skill","base.group_user",1,0,0,0 +"access_res_partner_skill_group_partner_manager","res_partner_skill group_partner_manager","model_res_partner_skill","base.group_partner_manager",1,1,1,1 \ No newline at end of file diff --git a/partner_skills/views/res_partner_skill_views.xml b/partner_skills/views/res_partner_skill_views.xml new file mode 100644 index 0000000..966eb28 --- /dev/null +++ b/partner_skills/views/res_partner_skill_views.xml @@ -0,0 +1,63 @@ + + + + + + Skills + res.partner.skill + +
+ + + + + + + + +
+
+
+ + + Skills + res.partner.skill + + + + + + + + + + + res.partner.skill.view.search + res.partner.skill + + + + + + + + + + + + Skills + ir.actions.act_window + res.partner.skill + + +

+ Create a Skill +

+
+
+ + +
diff --git a/partner_skills/views/res_partner_views.xml b/partner_skills/views/res_partner_views.xml new file mode 100644 index 0000000..bbb7486 --- /dev/null +++ b/partner_skills/views/res_partner_views.xml @@ -0,0 +1,50 @@ + + + + + Add skills on partner kanban view + res.partner + + + + + + + + + + + + + + + + + Add skills on partner form view + res.partner + 13 + + + + + + + + + + + + Add favorite star + res.partner + + + + + + + + + + +