diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..83e553ac462c571a7207e0970415e3cba1bbb3fa --- /dev/null +++ b/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/__manifest__.py b/__manifest__.py new file mode 100755 index 0000000000000000000000000000000000000000..5d8145f6dfb45393b16ecb27f0c5265655c0733e --- /dev/null +++ b/__manifest__.py @@ -0,0 +1,21 @@ +{ + 'name': "CG Scop - Alfodoo Partner", + 'summary': "Connexion Alfodoo pour les Coopératives", + 'author': "Le Filament", + 'website': "https://www.le-filament.com", + 'version': '12.0.1.0.1', + 'license': "AGPL-3", + 'depends': [ + "cgscop_alfresco", + "cgscop_partner", + "cmis", + "contacts", + "cmis_alf", + "cmis_web", + "lefilament_alfodoo", + ], + 'data': [ + 'views/res_partner.xml', + ], + +} diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ccebc724717c32986fb9ec6641ff8f885a20815a --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import res_partner diff --git a/models/res_partner.py b/models/res_partner.py new file mode 100644 index 0000000000000000000000000000000000000000..f9215e2b7107b9ee1e89bf4d59b68a91667ad7f9 --- /dev/null +++ b/models/res_partner.py @@ -0,0 +1,85 @@ +# Copyright 2019 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models +from odoo.addons.cmis_field import fields + +ALFRESCO_TRACKED_FIELDS = ['name', 'id', 'siret', 'member_number', 'ur_id'] + + +class AlfodooResPartner(models.Model): + _name = 'res.partner' + _inherit = ['res.partner', 'cgscop.alfresco'] + + partner_cmis_folder = fields.CmisFolder( + allow_create=True, + allow_delete=False, + create_parent_get='_get_parent_path', + create_properties_get='_get_folder_properties', + ) + + # ------------------------------------------------------ + # Override Alfodoo + # ------------------------------------------------------ + def _get_parent_path(self, records, backend): + """ + Défini le répertoire parent : + le répertoire configuré par défaut dans le backend + """ + path_parts = backend.initial_directory_write.split('/') + parent_cmis_object = backend.get_folder_by_path_parts( + path_parts, create_if_not_found=True) + path = dict.fromkeys(self.ids, parent_cmis_object) + return path + + def _get_folder_properties(self, records, backend): + """ + Ajoute les propriétés au dossier lors de la création dans Alfresco + """ + return { + self.id: { + 'cmis:secondaryObjectTypeIds': [ + 'P:crm:organisme', 'P:up:UploadFolder', 'P:cm:titled' + ], + 'up:allowedTypes': 'crm:document', + 'crm:raisonSociale': self.name, + 'crm:siret': self.siret if self.siret else '', + 'crm:numAdherent': self.member_number if self.member_number else '', + 'crm:id': str(self.id), + 'crm:ur': str(self.ur_id.id), + } + } + + # ------------------------------------------------------ + # Override ORM + # ------------------------------------------------------ + @api.multi + def write(self, vals): + """ Surcharge la fonction write() pour mettre à jour + la raison sociale, le nom, le siret, l'id Odoo ou le + num adhérent + """ + tracked_fields = self.fields_get(ALFRESCO_TRACKED_FIELDS) + # Dict des valeurs initiales des champs présents dans TRACKED_FIELDS + initial_values = dict( + (record.id, dict( + (key, getattr(record, key)) for key in tracked_fields)) for record in self.filtered('is_cooperative')) + # Ecriture des nouvelles valeurs + result = super(AlfodooResPartner, self).write(vals) + # Dict des nouvelles valeurs + new_values = dict( + (record.id, dict( + (key, getattr(record, key)) for key in tracked_fields)) for record in self.filtered('is_cooperative')) + # Check des modifications sur les coopératives présentes dans RIGA + for record in self: + if record.is_cooperative and record.partner_cmis_folder: + if new_values[record.id] != initial_values[record.id]: + self.alfresco_update_organism(record) + return result + + @api.multi + def unlink(self): + for partner in self: + if partner.partner_cmis_folder: + partner.alfresco_remove(partner.partner_cmis_folder) + return super(AlfodooResPartner, self).unlink() diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv new file mode 100644 index 0000000000000000000000000000000000000000..301b7dab167cbcb978ea78e7da9e7f032c40b90e --- /dev/null +++ b/security/ir.model.access.csv @@ -0,0 +1 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink diff --git a/static/description/icon.png b/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..82ef47760a441cf229b5009f0a18ccf3842fbfa5 Binary files /dev/null and b/static/description/icon.png differ diff --git a/views/res_partner.xml b/views/res_partner.xml new file mode 100644 index 0000000000000000000000000000000000000000..3221296f4c08fe451b614885d9556e6b328a94bf --- /dev/null +++ b/views/res_partner.xml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- Copyright 2019 Le Filament + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> + +<odoo> + <data> + + <!-- FORM --> + <record id="res_partner_alfresco_view_form_inherit" model="ir.ui.view"> + <field name="name">res.partner.alfresco.view.form.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="arch" type="xml"> + <!-- Ajoute l'onglet Documents dans la vue coopérative --> + <xpath expr="//div[@name='cooperative']/notebook" position="inside"> + <page string="Documents" groups="base.group_user"> + <field name="partner_cmis_folder" + canCreateFolder="0" + canImportNewVersion="0" + canUpdate="0" + canCopyCutPaste="0" + canRename="0" + metadata="[ + {'name': 'crm:type', 'type': 'selection', 'label': 'Type', 'query': 'SELECT v1.classement:value1, v2.classement:value2 FROM classement:datalist4 as d JOIN classement:value1Aspect as v1 on d.cmis:objectId = v1.cmis:objectId JOIN classement:value2Aspect as v2 on d.cmis:objectId = v2.cmis:objectId JOIN classement:value3Aspect as v3 on d.cmis:objectId = v3.cmis:objectId WHERE v3.classement:value3 = \"STD\"', 'selectionValue': 'v2.classement:value2', 'selectionText': 'v1.classement:value1', 'required': '1'}, + {'name': 'crm:annee', 'type': 'number', 'label': 'Année', 'required': '1', 'pattern': '[0-9]{4}'}, + {'name': 'cmis:objectTypeId', 'value': 'D:crm:document', 'label': 'ObjectType'}, + {'name': 'crm:contexte', 'value': 'STD', 'label': 'Contexte'}]"/> + </page> + </xpath> + </field> + </record> + + </data> +</odoo>