Skip to content
Extraits de code Groupes Projets
Valider 31f20e60 rédigé par Juliana's avatar Juliana
Parcourir les fichiers

Mise a jour du json générique

parent f8b52807
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
# © 2019 Le Filament (<http://www.le-filament.com>) # © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models
from . import api_alfresco from . import api_alfresco
...@@ -3,47 +3,32 @@ ...@@ -3,47 +3,32 @@
import requests import requests
import logging import logging
import json
from odoo import models, exceptions, tools from odoo import models, exceptions, tools, api
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class CgscopAlfresco(models.AbstractModel): class LeFilamentAlfresco(models.AbstractModel):
""" Appelle l'API alfresco et implémente les fonctions suivantes : """ Appelle l'API alfresco et implémente les fonctions suivantes :
""" """
_inherit = 'lefilament.alfresco' _inherit = 'lefilament.alfresco'
def publipostage_documents(self, url, template_doc, versionable=None, generable=None): def alfresco_publipostage_documents(self, url, filename, templateNodeRef, convertToPDF, keys, options, backend):
# Récupération du backend
backend_name = self._fields['cmis_folder']
backend = backend_name.get_backend(self.env)
# Path du dossier projet
path_proj = backend.get_cmis_repository().getFolder(
self.cmis_folder).getPaths()
# Création du path
path_n0 = path_proj + [template_doc.dossier.name]
path = '/'.join(path_n0)
# récupération du NodeRef du dossier lié
cmis_obj_nodeRef = backend.get_folder_by_path(path).getProperties()['alfcmis:nodeRef']
keys = self.fill_data()
# Remplissage des données de base
json_data = { json_data = {
"fileName": template_doc.name, "fileName": filename,
"templateNodeRef": template_doc.noderef_document, "templateNodeRef": templateNodeRef,
"destinationNodeRef": cmis_obj_nodeRef,
"convertToPDF": False, "convertToPDF": False,
"versionable": versionable,
"generable": generable,
"keys": keys "keys": keys
} }
# TRY - EXCEPT : permet de ne pas bloquer le traitement en cas d'erreur # Ajout des options Alfresco à envoyer
json_data.update(options)
print("------ json_data---", str(json_data))
return self.alfresco_publipostage( return self.alfresco_publipostage(
url=url, url=url,
json=json_data, json=json_data,
......
# © 2020 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
from odoo.exceptions import UserError
from odoo.tools.translate import _
class Base(models.AbstractModel):
_inherit = 'base'
@api.multi
def json_build(self, parser):
"""Convertit l'enregistrement en fonction du template.
Example de template:
parser = [
'name',
'number',
'create_date',
('partner_id', ['name', 'street'])
('line_ids', {'type_data': LIST/TAB/ENUM, 'fields': ['id', ('partner_id', ['name']), 'street']})
]
le type LIST affichera une liste d'éléments avec saut de ligne entre chaque
le type ENUM affichera une liste d'éléments séparés par des virgules
le type TAB affichera un tableau de valeur
"""
result = []
for rec in self:
res = {}
for field in parser:
field_name = field
subparser = None
if isinstance(field, tuple):
field_name, subparser = field
json_key = '##' + field_name + '##'
if ':' in field_name:
field_name, json_key = field_name.split(':')
json_key = '##' + json_key + '##'
field_type = rec._fields[field_name].type
if subparser:
# Field One2many / Many2many
# Construction de l'entrée json sous forme:
# En entrée: ('O2m/M2m', type, ['field1', ('field2', ['subfield2']), 'field3'])
# En sortie:
# si type=LIST: ##LIST_O2m/M2m##: ['field1, subfiled2, field3', 'field1, subfiled2, field3',...]
# si type=TAB: ##MAP_O2m/M2m##: [['field1', 'subfiled2', 'field3'], ['field1', 'subfiled2', 'field3'],...]
# si type=ENUM: ##MAP_O2m/M2m##: 'field1 subfiled2, field3, field1, subfiled2, field3,...
if field_type in ('one2many', 'many2many'):
if subparser.get('type_data') == "LIST":
sub_res = rec[field_name].json_build(subparser.get('fields'))
# json_key = '##' + json_key + '##'
res[json_key] = []
for sub in sub_res:
for ressub in sub.values():
res[json_key].append(ressub)
elif subparser.get('type_data') == "ENUM":
sub_res = rec[field_name].json_build(subparser.get('fields'))
res[json_key] = ""
for sub in sub_res:
for ressub in sub.values():
if res[json_key]:
res[json_key] += ', ' + ressub
else:
res[json_key] += ressub
elif subparser.get('type_data') == "TAB":
sub_res = rec[field_name].json_build(subparser.get('fields'))
# json_key = '##' + json_key + '##'
res[json_key] = []
for sub in sub_res:
res_tab = []
for ressub in sub.values():
res_tab.append(ressub)
res[json_key].append(res_tab)
# Field Many2one
# Construction de l'entrée json sous forme:
# En entrée: ('M2o', ['field1', 'field2'])
# En sortie: ##M2o##: 'field1, field2'
elif field_type in ('many2one', 'reference'):
if rec[field_name]:
sub_res = rec[field_name].json_build(subparser)[0]
res[json_key] = ""
for sub in sub_res.values():
if res[json_key]:
res[json_key] += ', ' + sub
else:
res[json_key] += sub
else:
res[json_key] = None
else:
raise UserError(_('Mauvaise configuration de template de données'))
else:
value = rec[field_name]
if field_type == "selection":
value = dict(self._fields[field_name].selection).get(value)
if value is False and field_type != 'boolean':
value = None
elif field_type == "date":
value = fields.Date.to_date(value).isoformat()
elif field_type == "datetime":
value = fields.Datetime.to_datetime(value)
value = fields.Datetime.context_timestamp(rec, value)
value = value.isoformat()
res[json_key] = value
result.append(res)
return result
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter