Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 1bb968e6957e6088bcee8302474983476e04d158
  • 16.0 par défaut
  • 18.0
  • 17.0
  • 15.0
  • 13.0
  • 12.0 protégée
  • 14.0
8 résultats

main.py

Blame
  • 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',
            }