diff --git a/l10n_fr_association/__manifest__.py b/l10n_fr_association/__manifest__.py
index 150b6cb..8f997a8 100644
--- a/l10n_fr_association/__manifest__.py
+++ b/l10n_fr_association/__manifest__.py
@@ -18,9 +18,18 @@
"contacts",
"l10n_fr",
"l10n_fr_department_state",
+ "partner_multi_relation",
],
"data": [
+ # Base data
+ "data/res_partner_relation_instance.xml",
+ # "data/res_partner_relation_type.xml",
+ # Security
+ "security/ir.model.access.csv",
+ # Views
"views/res_partner.xml",
+ "views/res_partner_relation_instance.xml",
+ "views/res_partner_relation_type.xml",
],
"assets": {},
"demo": [],
diff --git a/l10n_fr_association/data/res_partner_relation_instance.xml b/l10n_fr_association/data/res_partner_relation_instance.xml
new file mode 100644
index 0000000..cd65f2d
--- /dev/null
+++ b/l10n_fr_association/data/res_partner_relation_instance.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ Councile
+ Coun.
+ adm
+
+
+
+ Office
+ Offi.
+ adm
+
+
+
+
+ Supervision staff
+ Staff
+ sup
+
+
+
+ Volunteer supervision
+ Volu.
+ sup
+
+
+
+
+ Employed supervision
+ Empl.
+ sup
+
+
+
+
\ No newline at end of file
diff --git a/l10n_fr_association/data/res_partner_relation_type.xml b/l10n_fr_association/data/res_partner_relation_type.xml
new file mode 100644
index 0000000..55a77a1
--- /dev/null
+++ b/l10n_fr_association/data/res_partner_relation_type.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ President
+
+
+
\ No newline at end of file
diff --git a/l10n_fr_association/i18n/fr.po b/l10n_fr_association/i18n/fr.po
index f33126b..8e11bc3 100644
--- a/l10n_fr_association/i18n/fr.po
+++ b/l10n_fr_association/i18n/fr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0-20230613\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-05-26 14:32+0000\n"
-"PO-Revision-Date: 2024-05-26 14:32+0000\n"
+"POT-Creation-Date: 2024-05-26 22:57+0000\n"
+"PO-Revision-Date: 2024-05-26 22:57+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -20,6 +20,16 @@ msgstr ""
msgid "ANR number"
msgstr "Numéro RNA"
+#. module: l10n_fr_association
+#: model:ir.model.fields.selection,name:l10n_fr_association.selection__res_partner_relation_instance__inst_type__adm
+msgid "Administration"
+msgstr ""
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_type__insctance_id
+msgid "Asso instance"
+msgstr "Instance asso."
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__asso_project_file
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__asso_project_file
@@ -43,12 +53,22 @@ msgstr ""
msgid "Association National Register declaration date"
msgstr "Date d'enregistrement au Registre National des Associations"
+#. module: l10n_fr_association
+#: model_terms:ir.ui.view,arch_db:l10n_fr_association.view_res_partner_filter_inherit_base
+msgid "Associations"
+msgstr ""
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__company_registry
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__company_registry
msgid "Company ID"
msgstr "ID de la société"
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__child_ids
+msgid "Composing instances"
+msgstr "Composé des instances"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__constituent_ga_date
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__constituent_ga_date
@@ -66,12 +86,59 @@ msgstr "Date de l'Assemblée Générale Constitutive"
msgid "Contact"
msgstr ""
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,short:l10n_fr_association.relation_insctance_councile
+msgid "Coun."
+msgstr "C.A."
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,name:l10n_fr_association.relation_insctance_councile
+msgid "Councile"
+msgstr "Conseil d'Administration"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__create_date
+msgid "Created on"
+msgstr "Créé le"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__prefecture_date
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__prefecture_date
msgid "Declaration date"
msgstr "Date de déclaration"
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__display_name
+msgid "Display Name"
+msgstr "Nom d'affichange"
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,short:l10n_fr_association.relation_insctance_sup_emp
+msgid "Empl."
+msgstr "Pro."
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,name:l10n_fr_association.relation_insctance_sup_emp
+msgid "Employed supervision"
+msgstr "Encadrement professionnel"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields.selection,name:l10n_fr_association.selection__res_partner_relation_type__relation_type__1
+msgid "Employee"
+msgstr "Employé"
+
+#. module: l10n_fr_association
+#. odoo-python
+#: code:addons/l10n_fr_association/models/res_partner_relation_instance.py:0
+#, python-format
+msgid "Error ! You cannot create recursive instances."
+msgstr "Erreur ! vous ne pouvez pas créer des instances recursives."
+
#. module: l10n_fr_association
#: model_terms:ir.ui.view,arch_db:l10n_fr_association.view_partner_form_inherit_base
msgid "Foundation"
@@ -83,6 +150,27 @@ msgstr "Fondation"
msgid "French partner"
msgstr "Partenaire français"
+#. module: l10n_fr_association
+#: model:ir.model.fields.selection,name:l10n_fr_association.selection__res_partner_relation_instance__inst_type__ag
+msgid "General Assembly"
+msgstr "Asemblée Ganérale"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__id
+msgid "ID"
+msgstr ""
+
+#. module: l10n_fr_association
+#: model_terms:ir.ui.view,arch_db:l10n_fr_association.res_partner_relation_type_view_search
+msgid "Instance"
+msgstr ""
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__inst_type
+#: model_terms:ir.ui.view,arch_db:l10n_fr_association.res_partner_relation_instance_view_search
+msgid "Instance type"
+msgstr "Type d'instance"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__internal_regul_update_date
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__internal_regul_update_date
@@ -112,6 +200,21 @@ msgstr "Documents internes"
msgid "Is an association"
msgstr "Association"
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__write_uid
+msgid "Last Updated by"
+msgstr "Dernière modification par"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__last_ga_date
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__last_ga_date
@@ -134,6 +237,11 @@ msgstr "Informations légales"
msgid "NAF/APE code"
msgstr "Code NAF/APE"
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__name
+msgid "Name"
+msgstr "Nom"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__official_journal_dept_id
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__official_journal_dept_id
@@ -146,6 +254,16 @@ msgstr "Département du JO"
msgid "OJ reference"
msgstr "Référence du JO"
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,short:l10n_fr_association.relation_insctance_office
+msgid "Offi."
+msgstr "Bur."
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,name:l10n_fr_association.relation_insctance_office
+msgid "Office"
+msgstr "Bureau"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__official_journal_date
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__official_journal_date
@@ -170,6 +288,26 @@ msgstr "Département de publication au Journal Officiel"
msgid "Official Journal reference"
msgstr "Numéro du Journal Officiel"
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__parent_path
+msgid "Parent Path"
+msgstr "Chemin parent"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__parents_and_self
+msgid "Parents And Self"
+msgstr "Parents et instance"
+
+#. module: l10n_fr_association
+#: model:ir.model,name:l10n_fr_association.model_res_partner_relation_type
+msgid "Partner Relation Type"
+msgstr "Type de relation de partenaire"
+
+#. module: l10n_fr_association
+#: model:ir.model,name:l10n_fr_association.model_res_partner_relation_instance
+msgid "Partners relation instance"
+msgstr "Instance de relation de partenaire"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__prefecture
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__prefecture
@@ -194,6 +332,11 @@ msgstr "Date de déclaration en préfecture"
msgid "Project update"
msgstr "Màj du Projet"
+#. module: l10n_fr_association
+#: model_terms:ir.ui.view,arch_db:l10n_fr_association.form_res_partner_relation_type_inherit_ffck
+msgid "Properties"
+msgstr "Propriétés"
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__company_registry_date
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__company_registry_date
@@ -201,10 +344,28 @@ msgid "Registration date"
msgstr "Date d'enregistrement"
#. module: l10n_fr_association
+#: model:ir.actions.act_window,name:l10n_fr_association.relation_instance_action
+#: model:ir.ui.menu,name:l10n_fr_association.relation_instance_menu
+msgid "Relation instances"
+msgstr "Instances de relation"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_type__relation_type
+#: model_terms:ir.ui.view,arch_db:l10n_fr_association.res_partner_relation_type_view_search
+msgid "Relation type"
+msgstr "Type de relation"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__short
#: model_terms:ir.ui.view,arch_db:l10n_fr_association.view_partner_form_inherit_base
msgid "Short name"
msgstr "Initiales"
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,short:l10n_fr_association.relation_insctance_sup_staff
+msgid "Staff"
+msgstr "Enc."
+
#. module: l10n_fr_association
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner__statuses_file
#: model:ir.model.fields,field_description:l10n_fr_association.field_res_users__statuses_file
@@ -223,6 +384,21 @@ msgstr "Nom du fichier Statuts"
msgid "Statuses update"
msgstr "Màj des statuts"
+#. module: l10n_fr_association
+#: model:ir.model.fields,field_description:l10n_fr_association.field_res_partner_relation_instance__parent_id
+msgid "Superior instance"
+msgstr "Instance supérieure"
+
+#. module: l10n_fr_association
+#: model:ir.model.fields.selection,name:l10n_fr_association.selection__res_partner_relation_instance__inst_type__sup
+msgid "Supervision"
+msgstr "Encadrement"
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,name:l10n_fr_association.relation_insctance_sup_staff
+msgid "Supervision staff"
+msgstr "Équipe pédagogique"
+
#. module: l10n_fr_association
#: model:ir.model.fields,help:l10n_fr_association.field_res_partner__company_registry
#: model:ir.model.fields,help:l10n_fr_association.field_res_users__company_registry
@@ -233,3 +409,18 @@ msgstr ""
"Le numéro de registre de la société. Utilisez-le s'il est différent du "
"numéro d'identification fiscale. Il doit être unique parmi tous les "
"partenaires d'un même pays"
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,short:l10n_fr_association.relation_insctance_sup_vol
+msgid "Volu."
+msgstr "Bén."
+
+#. module: l10n_fr_association
+#: model:ir.model.fields.selection,name:l10n_fr_association.selection__res_partner_relation_type__relation_type__0
+msgid "Volunteer"
+msgstr "Bénévole"
+
+#. module: l10n_fr_association
+#: model:res.partner.relation.instance,name:l10n_fr_association.relation_insctance_sup_vol
+msgid "Volunteer supervision"
+msgstr "Encadrement bénévole"
diff --git a/l10n_fr_association/models/__init__.py b/l10n_fr_association/models/__init__.py
index 0fbdfcf..b8b5ea8 100644
--- a/l10n_fr_association/models/__init__.py
+++ b/l10n_fr_association/models/__init__.py
@@ -1,2 +1,4 @@
# -*- coding: utf-8 -*-
+from . import res_partner_relation_instance
+from . import res_partner_relation_type
from . import res_partner
diff --git a/l10n_fr_association/models/res_partner_relation_instance.py b/l10n_fr_association/models/res_partner_relation_instance.py
new file mode 100644
index 0000000..6987284
--- /dev/null
+++ b/l10n_fr_association/models/res_partner_relation_instance.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api
+
+TYPES = [
+ ("adm", "Administration"),
+ ("sup", "Supervision"),
+ ("ag", "General Assembly"),
+]
+
+
+class ResPartnerRelationInsctance(models.Model):
+ _name = "res.partner.relation.instance"
+ _description = "Partners relation instance"
+ _order = "inst_type, short, name, id"
+
+ name = fields.Char(
+ string="Name",
+ translate=True,
+ required=True,
+ )
+ short = fields.Char(
+ string="Short name",
+ translate=True,
+ required=True,
+ )
+ inst_type = fields.Selection(
+ selection=TYPES,
+ string="Instance type",
+ required=True,
+ )
+ parent_id = fields.Many2one(
+ comodel_name="res.partner.relation.instance",
+ string="Superior instance",
+ )
+ parent_path = fields.Char(
+ unaccent=False,
+ )
+ parents_and_self = fields.Many2many(
+ comodel_name="res.partner.relation.instance",
+ compute="_compute_parents_and_self",
+ )
+ child_ids = fields.One2many(
+ comodel_name="res.partner.relation.instance",
+ inverse_name="parent_id",
+ string="Composing instances",
+ )
+
+ def name_get(self):
+ res = []
+ for instance in self:
+ res.append(
+ (instance.id, " / ".join(instance.parents_and_self.mapped("name")))
+ )
+ return res
+
+ def _compute_parents_and_self(self):
+ for instance in self:
+ if instance.parent_path:
+ instance.parents_and_self = self.env[self._model].browse(
+ [int(p) for p in instance.parent_path.split("/")[:-1]]
+ )
+ else:
+ instance.parents_and_self = instance
+
+ @api.constrains("parent_id")
+ def check_parent_id(self):
+ if not self._check_recursion():
+ raise ValueError(_("Error ! You cannot create recursive instances."))
diff --git a/l10n_fr_association/models/res_partner_relation_type.py b/l10n_fr_association/models/res_partner_relation_type.py
new file mode 100644
index 0000000..738fc4a
--- /dev/null
+++ b/l10n_fr_association/models/res_partner_relation_type.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields
+
+INSTANCES = [
+ ("1", "Office"),
+ ("2", "Councile"),
+ ("3", "Commission"),
+ ("4", "Supervision"),
+ ("5", "Active member"),
+]
+
+TYPES = [
+ ("0", "Volunteer"),
+ ("1", "Employee"),
+]
+
+
+class ResPartnerRelationType(models.Model):
+ _inherit = "res.partner.relation.type"
+
+ insctance_id = fields.Many2one(
+ comodel_name="res.partner.relation.instance",
+ string="Asso instance",
+ )
+ relation_type = fields.Selection(
+ selection=TYPES,
+ string="Relation type",
+ )
diff --git a/l10n_fr_association/security/ir.model.access.csv b/l10n_fr_association/security/ir.model.access.csv
new file mode 100644
index 0000000..47bd6cc
--- /dev/null
+++ b/l10n_fr_association/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_relation_instance_all,All res.partner.relation.instance,model_res_partner_relation_instance,,1,0,0,0
+access_res_partner_relation_instance_group_partner_manager,Partner manager res.partner.relation.instance,model_res_partner_relation_instance,base.group_system,1,1,1,0
\ No newline at end of file
diff --git a/l10n_fr_association/security/ir_rule.xml b/l10n_fr_association/security/ir_rule.xml
new file mode 100644
index 0000000..c5d0d52
--- /dev/null
+++ b/l10n_fr_association/security/ir_rule.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/l10n_fr_association/security/res_groups.xml b/l10n_fr_association/security/res_groups.xml
new file mode 100644
index 0000000..86dbb2c
--- /dev/null
+++ b/l10n_fr_association/security/res_groups.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/l10n_fr_association/views/res_partner.xml b/l10n_fr_association/views/res_partner.xml
index 524b018..2ff10ab 100644
--- a/l10n_fr_association/views/res_partner.xml
+++ b/l10n_fr_association/views/res_partner.xml
@@ -73,4 +73,15 @@
+
+ res.partner.view.search.inherit
+ res.partner
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/l10n_fr_association/views/res_partner_relation_instance.xml b/l10n_fr_association/views/res_partner_relation_instance.xml
new file mode 100644
index 0000000..b1bac77
--- /dev/null
+++ b/l10n_fr_association/views/res_partner_relation_instance.xml
@@ -0,0 +1,64 @@
+
+
+
+
+ res.partner.relation.instance.view.form
+ res.partner.relation.instance
+
+
+
+
+
+
+ res.partner.relation.instance.view.tree
+ res.partner.relation.instance
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.relation.instance.view.search
+ res.partner.relation.instance
+
+
+
+
+
+
+
+
+
+
+ Relation instances
+ res.partner.relation.instance
+ tree,form
+ []
+ {}
+
+
+
+
+
\ No newline at end of file
diff --git a/l10n_fr_association/views/res_partner_relation_type.xml b/l10n_fr_association/views/res_partner_relation_type.xml
new file mode 100644
index 0000000..d06c582
--- /dev/null
+++ b/l10n_fr_association/views/res_partner_relation_type.xml
@@ -0,0 +1,50 @@
+
+
+
+
+ res.partner.relation.type.view.form.inherit
+ res.partner.relation.type
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.relation.type.view.tree.inherit
+ res.partner.relation.type
+
+
+
+
+
+
+
+
+
+
+ res.partner.relation.type.view.search
+ res.partner.relation.type
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file