Sélectionner une révision Git
-
remi-filament a rédigéremi-filament a rédigé
api_alfresco.py 4,94 Kio
# © 2020 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import requests
import logging
import json
from odoo import models, exceptions, tools, api
_logger = logging.getLogger(__name__)
class LeFilamentAlfresco(models.AbstractModel):
""" Appelle l'API alfresco et implémente les fonctions suivantes :
"""
_inherit = 'lefilament.alfresco'
def alfresco_publipostage_documents(self, url, filename, templateNodeRef, convertToPDF, keys, options, backend):
# Remplissage des données de base
json_data = {
"fileName": filename,
"templateNodeRef": templateNodeRef,
"convertToPDF": False,
"keys": keys
}
# Ajout des options Alfresco à envoyer
json_data.update(options)
print("------ json_data---", str(json_data))
return self.alfresco_publipostage(
url=url,
json=json_data,
backend=backend)
def alfresco_publipostage(self, url, json, backend):
""" Génération d'un document via Alfresco
:param dict: variables envoyés
"""
return self.alfresco_get_by_url(
url=url,
call_type='post',
json=json,
backend=backend)
def generate_public_link(self, url, backend=None):
""" Récupératin du lien public d'un docuement à partir d'une URL
:param url: Url avec ID du Noderef du doc
"""
result = self.alfresco_get_by_url(url=url, call_type='post', backend=backend)
res = result.content.decode('utf8').replace("'", '"')
data = json.loads(res)
sharedId = data.get('sharedId')
return backend.url + '/share/s/' + sharedId
def copy_document(self, url, workspace, workspace_parent, backend=None):
""" Copie d'un document à partir d'un ID dans un dossier
:param url: Url avec ID du Noderef du dossier
:param workspace: ID du document à copier
:param workspace_parent: ID du dossier
"""
result = self.alfresco_get_by_url(
url=url,
call_type='post',
json={
"nodeRefs":
[workspace],
"parentId": workspace_parent
},
backend=backend)
res = result.content.decode('utf8').replace("'", '"')
data = json.loads(res)
nodeDoc = data.get('results')[0].get('nodeRef').replace('workspace://SpacesStore/', '')
return nodeDoc
def create_json_file(self, file_name, virtual_json, json_file_cmis):
""" Crée un dossier virtuel à partir d'un node ref d'un dossier, puis associe
un fichier json sur la propriété "Modèle de dossier intelligent"
:param file_name: Nom du dossier créé et du fichier JSON
:param virtual_json: fichier json
:param json_file_cmis: Noderef du dossier où créer le dossier virtuel
"""
backend = self.env['cmis.backend'].search([], limit=1)
parent_path = backend.get_cmis_repository().getFolder(
json_file_cmis).getPaths()
path_to_create = parent_path + [file_name]
path = '/'.join(path_to_create)
# Création du dossier virtuel
cmis_folder = backend.get_folder_by_path(path)
js = json.dumps(virtual_json, indent=4)
prop = {
'cmis:secondaryObjectTypeIds': ['P:adefpat:justificatif'],
}
# Création du JSON
repo = backend.get_cmis_repository().getObject(json_file_cmis)
file = repo.createDocument(
name=file_name + ".json",
properties=prop,
contentFile=js,
contentType="application/json"
)
noderef_file_id = file.getProperties().get('alfcmis:nodeRef')
# Mise à jour des propriétés du dossier virtuel
prop_folder = {
'cmis:secondaryObjectTypeIds': [
'P:smf:customConfigSmartFolder',
'P:cm:taggable',
'P:up:UploadFolder',
'P:cm:titled',
'P:sys:localized'
],
}
cmis_folder.updateProperties(prop_folder)
# Association du fichier JSON au dossier virtuel
noderef_folder_id = cmis_folder.getProperties().get('cmis:objectId')
url = '/alfresco/s/api/node/workspace/SpacesStore/' + noderef_folder_id + '/formprocessor'
self.alfresco_get_by_url(
url=url,
call_type='post',
json={
"assoc_smf_custom-template-association_added": noderef_file_id
},
backend=backend)
properties = cmis_folder.getProperties()
url = backend.get_content_details_url_from_props(properties)
return {
'type': 'ir.actions.act_url',
'url': url,
'target': 'new',
}