Skip to content
Extraits de code Groupes Projets
Valider 8830e7eb rédigé par Benjamin's avatar Benjamin
Parcourir les fichiers

modification API avec clé = nodeRef et implémentation création, suppression et mise à jour dossier

parent 8877001e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -12,7 +12,13 @@ Description
Ce module permet de lire, créer, supprimer les documents depuis Alfresco.
Il utilise l'API Alfresco développée spécifiquement pour le projet de la CG Scop.
Il utilise l'API Alfresco développée spécifiquement pour le projet de la CG Scop qui impémente les fonctions suivantes :
* Création d'un dossier : lors de la création d'un organisme
* Mise à jour d'un dossier : lors des la mise à jour d'un organisme sur les champs nom, SIRET et n° adhérent
* Liste des fichiers pour un organisme
* Ajout d'un fichier
* Suppression d'un dossier : lors de la suppression d'un organisme
Usage
......
{
"name": "CG SCOP - Connecteur Alfresco",
"summary": "CG SCOP - Connecteur Alfresco",
"summary": "Connecteur Alfresco",
"version": "12.0.1.0.1",
"development_status": "Beta",
"author": "Le Filament",
......@@ -12,9 +12,8 @@
'cgscop_partner'
],
"data": [
# "security/ir.model.access.csv",
"datas/ir_config_parameter.xml",
# "views/assets.xml", # supprime le bouton ajouter un fichier en attendant validation de la CG
"views/assets.xml",
"views/alfresco_partner_files.xml",
"views/res_partner.xml",
"wizard/add_file_wizard.xml",
......
......@@ -6,7 +6,7 @@ from odoo import models, fields, api
class AlfrescoPartnerFiles(models.TransientModel):
_name = 'alfresco.partner.files'
_inherit = 'connector.alfresco'
_inherit = 'cgscop.alfresco'
_description = "Requete fichiers par organisme"
name = fields.Char('Nom du Fichier')
......
......@@ -37,19 +37,16 @@ class CgscopAlfresco(models.AbstractModel):
if call_type == 'get':
response = requests.get(
alfresco_url + url,
auth=basicAuthCredentials,
verify=False,)
auth=basicAuthCredentials,)
elif call_type == 'post':
response = requests.post(
alfresco_url + url,
auth=basicAuthCredentials,
verify=False,
json=json)
elif call_type == 'delete':
response = requests.delete(
alfresco_url + url,
auth=basicAuthCredentials,
verify=False,
json=json)
except Exception as err:
_logger.warning(
......@@ -57,9 +54,6 @@ class CgscopAlfresco(models.AbstractModel):
err.__str__(),
)
if response.status_code not in [200, 201]:
if 'Le dossier organisme est inexistant' in response.json().get('message'):
print(response.json().get('message'))
else:
raise exceptions.Warning(
"L'appel url '%s' a échoué\n"
"- Code erreur : %d\n"
......@@ -70,11 +64,11 @@ class CgscopAlfresco(models.AbstractModel):
return response.json()
# Get Methods
def alfresco_list_docs(self, name):
def alfresco_list_docs(self, node_id):
""" Liste les documents pour un organisme (raison sociale)
:param name: raison sociale de la structure
"""
url = '/alfresco/s/erp/listedocuments?raisonSociale=' + name
url = '/alfresco/s/erp/listedocuments?nodeId=' + node_id
return self.alfresco_get_by_url(url=url, call_type='get')
def alfresco_list_type(self):
......@@ -121,6 +115,23 @@ class CgscopAlfresco(models.AbstractModel):
return self.get_nodeRef(
self.alfresco_get_by_url(url=url, call_type='post', json=json))
def alfresco_update_organism(self, partner):
""" Mise à jour d'un dossier Organisme
:param partner: objet Odoo créé
@return: id Alfresco (nodeRef) du dossier
"""
url = '/alfresco/s/erp/updatedossierorganisme/' + partner.id_alfresco
json = {
'raisonSociale': partner.name,
"id": partner.id,
"siret": partner.siret,
"numAdherent": partner.member_number
}
return self.get_nodeRef(
self.alfresco_get_by_url(url=url, call_type='post', json=json))
def alfresco_upload(self, partner, type, periode, validite, filename, mimetype, doc):
""" Upload d'un document sur Alfresco
......@@ -130,10 +141,7 @@ class CgscopAlfresco(models.AbstractModel):
"""
url = '/alfresco/s/erp/depotdocument'
json = {
'raisonSociale': partner.name,
'id': partner.id,
'siret': partner.siret,
'numAdherent': partner.member_number,
'folderNodeId': partner.id_alfresco,
'periode': periode,
'type': type,
'nomOrigine': filename,
......@@ -141,7 +149,6 @@ class CgscopAlfresco(models.AbstractModel):
'validite': validite,
'contentBase64': doc,
}
print(json)
return self.get_nodeRef(
self.alfresco_get_by_url(url=url, call_type='post', json=json))
......
......@@ -4,7 +4,9 @@
import dateutil.parser
import pytz
from odoo import models, fields
from odoo import models, fields, api
ALFRESCO_TRACKED_FIELDS = ['name', 'id', 'siret', 'member_number']
class AlfrescoPartner(models.Model):
......@@ -13,6 +15,55 @@ class AlfrescoPartner(models.Model):
id_alfresco = fields.Char('ID Dossier Alfresco')
# ------------------------------------------------------
# Fonctions héritées
# ------------------------------------------------------
@api.model
def create(self, vals):
""" Crée automatiquement un répertoire Alfresco
lors de la création d'un organisme
"""
partner = super(AlfrescoPartner, self).create(vals)
if partner.is_cooperative and not partner.id_alfresco:
id_alfresco = self.alfresco_create_organism(partner)
partner.write({
'id_alfresco': id_alfresco,
})
return partner
@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(AlfrescoPartner, 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.id_alfresco:
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.id_alfresco:
partner.alfresco_remove(partner.id_alfresco)
# ------------------------------------------------------
# Fonction boutons
# ------------------------------------------------------
def get_partner_files(self):
""" Liste l'ensemble des fichiers pour un organisme
......@@ -23,7 +74,11 @@ class AlfrescoPartner(models.Model):
@return: ir.act.window
"""
files = self.alfresco_list_docs(self.name).get('docs', '')
if self.id_alfresco:
files = self.alfresco_list_docs(self.id_alfresco).get('docs', '')
else:
self.id_alfresco = self.alfresco_create_organism(self)
files = self.alfresco_list_docs(self.id_alfresco).get('docs', '')
uid = self.env.user.id
alfresco_obj = self.env["alfresco.partner.files"]
alfresco_obj.search([['user_id', '=', uid]]).unlink()
......@@ -45,6 +100,6 @@ class AlfrescoPartner(models.Model):
"res_model": "alfresco.partner.files",
"views": [[False, "tree"]],
"search_view_id": self.env.ref(
"connector_alfresco.alfresco_partner_files_search").id,
"cgscop_alfresco.alfresco_partner_files_search").id,
'context': {'search_default_group_periode': True}
}
......@@ -6,7 +6,7 @@
<template id="alfresco_assets_backend" name="account assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/connector_alfresco/static/src/js/alfresco_add_file.js"></script>
<script type="text/javascript" src="/cgscop_alfresco/static/src/js/alfresco_add_file.js"></script>
</xpath>
</template>
......
......@@ -2,6 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import mimetypes
import dateutil.parser
import pytz
from odoo import api, fields, models
from odoo.tools.mimetypes import guess_mimetype
......@@ -58,12 +60,14 @@ class AddFileWizard(models.TransientModel):
@return: fonction get_partner_files() de res.partner
"""
# Get Mimetype
content_type = mimetypes.guess_type(self.filename)
if content_type[0]:
content_type = content_type[0]
else:
content_type = guess_mimetype(self.file)
self.alfresco_upload(
# Upload File
uploaded_file = self.alfresco_upload(
partner=self.partner_id,
type=self.type,
periode=self.periode,
......@@ -71,9 +75,26 @@ class AddFileWizard(models.TransientModel):
filename=self.filename,
mimetype=content_type,
doc=self.file.decode('utf-8'))
# Add new file in transient model for view
uid = self.env.user.id
alfresco_obj = self.env["alfresco.partner.files"]
alfresco_obj.create({
'name': self.type,
'type': self.type,
'file_id': uploaded_file,
'user_id': uid,
'periode': self.periode,
'validite': self.validite,
'last_modification': fields.Datetime.now(),
'partner_id': self.partner_id.id,
})
# Reload view
return {
'type': 'ir.actions.client',
'tag': 'reload',
"type": "ir.actions.act_window",
"name": "Fichiers liés",
"res_model": "alfresco.partner.files",
"views": [[False, "tree"]],
"search_view_id": self.env.ref(
"cgscop_alfresco.alfresco_partner_files_search").id,
'context': {'search_default_group_periode': True}
}
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