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 ...@@ -12,7 +12,13 @@ Description
Ce module permet de lire, créer, supprimer les documents depuis Alfresco. 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 Usage
......
{ {
"name": "CG SCOP - Connecteur Alfresco", "name": "CG SCOP - Connecteur Alfresco",
"summary": "CG SCOP - Connecteur Alfresco", "summary": "Connecteur Alfresco",
"version": "12.0.1.0.1", "version": "12.0.1.0.1",
"development_status": "Beta", "development_status": "Beta",
"author": "Le Filament", "author": "Le Filament",
...@@ -12,9 +12,8 @@ ...@@ -12,9 +12,8 @@
'cgscop_partner' 'cgscop_partner'
], ],
"data": [ "data": [
# "security/ir.model.access.csv",
"datas/ir_config_parameter.xml", "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/alfresco_partner_files.xml",
"views/res_partner.xml", "views/res_partner.xml",
"wizard/add_file_wizard.xml", "wizard/add_file_wizard.xml",
......
...@@ -6,7 +6,7 @@ from odoo import models, fields, api ...@@ -6,7 +6,7 @@ from odoo import models, fields, api
class AlfrescoPartnerFiles(models.TransientModel): class AlfrescoPartnerFiles(models.TransientModel):
_name = 'alfresco.partner.files' _name = 'alfresco.partner.files'
_inherit = 'connector.alfresco' _inherit = 'cgscop.alfresco'
_description = "Requete fichiers par organisme" _description = "Requete fichiers par organisme"
name = fields.Char('Nom du Fichier') name = fields.Char('Nom du Fichier')
......
...@@ -37,19 +37,16 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -37,19 +37,16 @@ class CgscopAlfresco(models.AbstractModel):
if call_type == 'get': if call_type == 'get':
response = requests.get( response = requests.get(
alfresco_url + url, alfresco_url + url,
auth=basicAuthCredentials, auth=basicAuthCredentials,)
verify=False,)
elif call_type == 'post': elif call_type == 'post':
response = requests.post( response = requests.post(
alfresco_url + url, alfresco_url + url,
auth=basicAuthCredentials, auth=basicAuthCredentials,
verify=False,
json=json) json=json)
elif call_type == 'delete': elif call_type == 'delete':
response = requests.delete( response = requests.delete(
alfresco_url + url, alfresco_url + url,
auth=basicAuthCredentials, auth=basicAuthCredentials,
verify=False,
json=json) json=json)
except Exception as err: except Exception as err:
_logger.warning( _logger.warning(
...@@ -57,9 +54,6 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -57,9 +54,6 @@ class CgscopAlfresco(models.AbstractModel):
err.__str__(), err.__str__(),
) )
if response.status_code not in [200, 201]: 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( raise exceptions.Warning(
"L'appel url '%s' a échoué\n" "L'appel url '%s' a échoué\n"
"- Code erreur : %d\n" "- Code erreur : %d\n"
...@@ -70,11 +64,11 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -70,11 +64,11 @@ class CgscopAlfresco(models.AbstractModel):
return response.json() return response.json()
# Get Methods # Get Methods
def alfresco_list_docs(self, name): def alfresco_list_docs(self, node_id):
""" Liste les documents pour un organisme (raison sociale) """ Liste les documents pour un organisme (raison sociale)
:param name: raison sociale de la structure :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') return self.alfresco_get_by_url(url=url, call_type='get')
def alfresco_list_type(self): def alfresco_list_type(self):
...@@ -121,6 +115,23 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -121,6 +115,23 @@ class CgscopAlfresco(models.AbstractModel):
return self.get_nodeRef( return self.get_nodeRef(
self.alfresco_get_by_url(url=url, call_type='post', json=json)) 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): def alfresco_upload(self, partner, type, periode, validite, filename, mimetype, doc):
""" Upload d'un document sur Alfresco """ Upload d'un document sur Alfresco
...@@ -130,10 +141,7 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -130,10 +141,7 @@ class CgscopAlfresco(models.AbstractModel):
""" """
url = '/alfresco/s/erp/depotdocument' url = '/alfresco/s/erp/depotdocument'
json = { json = {
'raisonSociale': partner.name, 'folderNodeId': partner.id_alfresco,
'id': partner.id,
'siret': partner.siret,
'numAdherent': partner.member_number,
'periode': periode, 'periode': periode,
'type': type, 'type': type,
'nomOrigine': filename, 'nomOrigine': filename,
...@@ -141,7 +149,6 @@ class CgscopAlfresco(models.AbstractModel): ...@@ -141,7 +149,6 @@ class CgscopAlfresco(models.AbstractModel):
'validite': validite, 'validite': validite,
'contentBase64': doc, 'contentBase64': doc,
} }
print(json)
return self.get_nodeRef( return self.get_nodeRef(
self.alfresco_get_by_url(url=url, call_type='post', json=json)) self.alfresco_get_by_url(url=url, call_type='post', json=json))
......
...@@ -4,7 +4,9 @@ ...@@ -4,7 +4,9 @@
import dateutil.parser import dateutil.parser
import pytz 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): class AlfrescoPartner(models.Model):
...@@ -13,6 +15,55 @@ class AlfrescoPartner(models.Model): ...@@ -13,6 +15,55 @@ class AlfrescoPartner(models.Model):
id_alfresco = fields.Char('ID Dossier Alfresco') 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): def get_partner_files(self):
""" Liste l'ensemble des fichiers pour un organisme """ Liste l'ensemble des fichiers pour un organisme
...@@ -23,7 +74,11 @@ class AlfrescoPartner(models.Model): ...@@ -23,7 +74,11 @@ class AlfrescoPartner(models.Model):
@return: ir.act.window @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 uid = self.env.user.id
alfresco_obj = self.env["alfresco.partner.files"] alfresco_obj = self.env["alfresco.partner.files"]
alfresco_obj.search([['user_id', '=', uid]]).unlink() alfresco_obj.search([['user_id', '=', uid]]).unlink()
...@@ -45,6 +100,6 @@ class AlfrescoPartner(models.Model): ...@@ -45,6 +100,6 @@ class AlfrescoPartner(models.Model):
"res_model": "alfresco.partner.files", "res_model": "alfresco.partner.files",
"views": [[False, "tree"]], "views": [[False, "tree"]],
"search_view_id": self.env.ref( "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} 'context': {'search_default_group_periode': True}
} }
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<template id="alfresco_assets_backend" name="account assets" inherit_id="web.assets_backend"> <template id="alfresco_assets_backend" name="account assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside"> <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> </xpath>
</template> </template>
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
# 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).
import mimetypes import mimetypes
import dateutil.parser
import pytz
from odoo import api, fields, models from odoo import api, fields, models
from odoo.tools.mimetypes import guess_mimetype from odoo.tools.mimetypes import guess_mimetype
...@@ -58,12 +60,14 @@ class AddFileWizard(models.TransientModel): ...@@ -58,12 +60,14 @@ class AddFileWizard(models.TransientModel):
@return: fonction get_partner_files() de res.partner @return: fonction get_partner_files() de res.partner
""" """
# Get Mimetype
content_type = mimetypes.guess_type(self.filename) content_type = mimetypes.guess_type(self.filename)
if content_type[0]: if content_type[0]:
content_type = content_type[0] content_type = content_type[0]
else: else:
content_type = guess_mimetype(self.file) content_type = guess_mimetype(self.file)
self.alfresco_upload( # Upload File
uploaded_file = self.alfresco_upload(
partner=self.partner_id, partner=self.partner_id,
type=self.type, type=self.type,
periode=self.periode, periode=self.periode,
...@@ -71,9 +75,26 @@ class AddFileWizard(models.TransientModel): ...@@ -71,9 +75,26 @@ class AddFileWizard(models.TransientModel):
filename=self.filename, filename=self.filename,
mimetype=content_type, mimetype=content_type,
doc=self.file.decode('utf-8')) 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 { return {
'type': 'ir.actions.client', "type": "ir.actions.act_window",
'tag': 'reload', "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