[NEW] partner_skills
This commit is contained in:
1
partner_skills/__init__.py
Normal file
1
partner_skills/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import models
|
20
partner_skills/__manifest__.py
Normal file
20
partner_skills/__manifest__.py
Normal 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
143
partner_skills/i18n/fr.po
Normal 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\""
|
2
partner_skills/models/__init__.py
Normal file
2
partner_skills/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import res_partner
|
||||
from . import res_partner_skill
|
10
partner_skills/models/res_partner.py
Normal file
10
partner_skills/models/res_partner.py
Normal 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')
|
50
partner_skills/models/res_partner_skill.py
Normal file
50
partner_skills/models/res_partner_skill.py
Normal 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)
|
3
partner_skills/security/ir.model.access.csv
Normal file
3
partner_skills/security/ir.model.access.csv
Normal 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
|
|
63
partner_skills/views/res_partner_skill_views.xml
Normal file
63
partner_skills/views/res_partner_skill_views.xml
Normal 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>
|
50
partner_skills/views/res_partner_views.xml
Normal file
50
partner_skills/views/res_partner_views.xml
Normal 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>
|
Reference in New Issue
Block a user