Newer
Older
# © 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
""" 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):
"fileName": filename,
"templateNodeRef": templateNodeRef,
"convertToPDF": False,
"keys": keys
}
# Ajout des options Alfresco à envoyer
json_data.update(options)
print("------ json_data---", str(json_data))
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/', '')
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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'
url=url,
call_type='post',
json={
"assoc_smf_custom-template-association_added": noderef_file_id
},
backend=backend)