[NEW] partner_skills

This commit is contained in:
clementthomas
2024-10-28 10:34:52 +01:00
parent 5b9172ef19
commit d3257c857b
9 changed files with 342 additions and 0 deletions

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -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,
}

143
partner_skills/i18n/fr.po Normal file
View File

@@ -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\""

View File

@@ -0,0 +1,2 @@
from . import res_partner
from . import res_partner_skill

View File

@@ -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')

View File

@@ -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)

View File

@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_res_partner_skill_group_user res_partner_skill group_user model_res_partner_skill base.group_user 1 0 0 0
3 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

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Categories -->
<record id="view_partner_skill_form" model="ir.ui.view">
<field name="name">Skills</field>
<field name="model">res.partner.skill</field>
<field name="arch" type="xml">
<form string="Skill">
<sheet>
<group col="4">
<field name="name" placeholder='e.g. "Project management"'/>
<field name="color" widget="color_picker"/>
<field name="parent_id"/>
<field name="active" widget="boolean_toggle"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_partner_skill_list" model="ir.ui.view">
<field name="name">Skills</field>
<field name="model">res.partner.skill</field>
<field eval="6" name="priority"/>
<field name="arch" type="xml">
<tree string="Skills">
<field name="display_name"/>
<field name="color" widget="color_picker"/>
</tree>
</field>
</record>
<record id="res_partner_skill_view_search" model="ir.ui.view">
<field name="name">res.partner.skill.view.search</field>
<field name="model">res.partner.skill</field>
<field name="arch" type="xml">
<search string="Search Partner Skills">
<field name="name"/>
<field name="display_name"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="action_partner_skill_form" model="ir.actions.act_window">
<field name="name">Skills</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.skill</field>
<field name="search_view_id" ref="res_partner_skill_view_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a Skill
</p>
</field>
</record>
<menuitem id="menu_partner_skill_form"
action="action_partner_skill_form"
name="Skills"
sequence="2" parent="contacts.res_partner_menu_config"/>
</odoo>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_partner_kanban_skills" model="ir.ui.view">
<field name="name">Add skills on partner kanban view</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_kanban_view"/>
<field name="arch" type="xml">
<data>
<field name="category_id" position="after">
<field name="skill_ids"/>
</field>
<xpath expr="//div[hasclass('oe_kanban_partner_categories')]" position="inside">
<span class="oe_kanban_list_many2many">
<field name="skill_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</span>
</xpath>
</data>
</field>
</record>
<record id="view_partner_form_skills" model="ir.ui.view">
<field name="name">Add skills on partner form view</field>
<field name="model">res.partner</field>
<field name="priority">13</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<data>
<field name="category_id" position="after">
<field name="skill_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_create_edit': True}"
placeholder='e.g. "Project management", ...'/>
</field>
</data>
</field>
</record>
<record id="view_partner_search_favorite" model="ir.ui.view">
<field name="name">Add favorite star</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_res_partner_filter"/>
<field name="arch" type="xml">
<data>
<field name="category_id" position="after">
<field name="skill_ids" string="Skill" operator="child_of"/>
<separator />
</field>
</data>
</field>
</record>
</odoo>