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

add lecture et chargement fichiers

parent 6bbf0b79
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). # © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import controllers
from . import models from . import models
from . import wizard
...@@ -9,10 +9,18 @@ ...@@ -9,10 +9,18 @@
"depends": [ "depends": [
'base', 'base',
'web', 'web',
'cgscop_partner'
], ],
"data": [ "data": [
# "security/ir.model.access.csv", # "security/ir.model.access.csv",
"datas/ir_config_parameter.xml", "datas/ir_config_parameter.xml",
"views/assets.xml",
"views/alfresco_partner_files.xml",
"views/res_partner.xml",
"wizard/add_file_wizard.xml",
],
'qweb': [
'static/src/xml/*.xml',
], ],
'installable': True, 'installable': True,
'auto_install': False, 'auto_install': False,
......
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import main
\ No newline at end of file
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import base64
from odoo import http
from odoo.http import request
from odoo.addons.web.controllers.main import serialize_exception, content_disposition
class AlfrescoBinary(http.Controller):
@http.route('/web/binary/download_alfresco', type='http', auth="user")
@serialize_exception
def download_alfresco_document(self, id_alfresco, **kwargs):
""" Téléchargement des fichiers depuis alfresco.
:param str id_alfresco: id de la ressource
@return: :class:`werkzeug.wrappers.Response`
"""
doc = request.env['alfresco.partner.files'].search(
[['file_id', '=', id_alfresco]]).alfresco_get_doc(id_alfresco)
filecontent = base64.b64decode(
doc['base64NodeContent'])
if not filecontent:
return request.not_found()
else:
return request.make_response(filecontent, [
('Content-Type', 'application/octet-stream'),
('Content-Disposition', content_disposition(doc['name']))])
...@@ -2,3 +2,5 @@ ...@@ -2,3 +2,5 @@
# 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 api_alfresco from . import api_alfresco
from . import alfresco_partner_files
from . import res_partner
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields, api
class AlfrescoPartnerFiles(models.TransientModel):
_name = 'alfresco.partner.files'
_inherit = 'connector.alfresco'
_description = "Requete fichiers par organisme"
name = fields.Char('Nom du Fichier')
type = fields.Char('Type')
periode = fields.Char('Période')
validite = fields.Char('Validité')
file_id = fields.Char('ID Fichier')
last_modification = fields.Datetime('Dernière Modification')
user_id = fields.Many2one(
comodel_name='res.users',
string='User')
partner_id = fields.Many2one(
comodel_name='res.partner',
string='Organisme')
@api.multi
def download_file(self):
for doc in self:
return {
'type': 'ir.actions.act_url',
'url': '/web/binary/download_alfresco?id_alfresco=%s' % (
doc.file_id, ),
'target': 'self',
}
...@@ -57,6 +57,9 @@ class ConnectorAlfresco(models.AbstractModel): ...@@ -57,6 +57,9 @@ class ConnectorAlfresco(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"
...@@ -118,7 +121,7 @@ class ConnectorAlfresco(models.AbstractModel): ...@@ -118,7 +121,7 @@ class ConnectorAlfresco(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_upload(self, doc): def alfresco_upload(self, raisonSociale, type, periode, validite, filename, doc):
""" Upload d'un document sur Alfresco """ Upload d'un document sur Alfresco
:param doc: document encodé en base64 :param doc: document encodé en base64
...@@ -127,12 +130,12 @@ class ConnectorAlfresco(models.AbstractModel): ...@@ -127,12 +130,12 @@ class ConnectorAlfresco(models.AbstractModel):
""" """
url = '/alfresco/s/erp/depotdocument' url = '/alfresco/s/erp/depotdocument'
json = { json = {
'raisonSociale': "LeFilament", 'raisonSociale': raisonSociale,
'periode': u"Liste ministère 2020", 'periode': periode,
'type': u"Autre", 'type': type,
'nomOrigine': "NomFichier.pdf", 'nomOrigine': filename,
'mimeType': "application/pdf", 'mimeType': "application/octet-stream",
'validite': "2020", 'validite': validite,
'contentBase64': doc, 'contentBase64': doc,
} }
return self.get_nodeRef( return self.get_nodeRef(
......
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import dateutil.parser
import pytz
from odoo import models, fields
class AlfrescoPartner(models.Model):
_name = 'res.partner'
_inherit = ['res.partner', 'connector.alfresco']
id_alfresco = fields.Char('ID Dossier Alfresco')
def get_partner_files(self):
""" Liste l'ensemble des fichiers pour un organisme
La fonction fait appel à l'API Alfresco et enregistre le résultat
dans un modèle Transient.
L'ID user est ajouté à la table pour définir les requêtes propres à
chaque user
@return: ir.act.window
"""
files = self.alfresco_list_docs(self.name).get('docs', '')
uid = self.env.user.id
alfresco_obj = self.env["alfresco.partner.files"]
alfresco_obj.search([['user_id', '=', uid]]).unlink()
for doc in files:
alfresco_obj.create({
'name': doc['name'],
'type': doc['type'],
'file_id': doc['nodeRef'].replace('workspace://SpacesStore/', ''),
'user_id': uid,
'periode': doc['periode'],
'validite': doc['validite'],
'last_modification': dateutil.parser.parse(
doc['modifiedOn']).astimezone(pytz.utc),
'partner_id': self.id,
})
return {
"type": "ir.actions.act_window",
"name": "Fichiers liés",
"res_model": "alfresco.partner.files",
"views": [[False, "tree"]],
"search_view_id": self.env.ref(
"connector_alfresco.alfresco_partner_files_search").id,
}
odoo.define('connector_alfresco.alfresco_add_file', function (require){
"use strict";
var core = require('web.core');
var ListController = require('web.ListController');
var QWeb = core.qweb;
var session = require('web.session');
ListController.include({
renderButtons: function() {
this._super.apply(this, arguments);
var self = this;
this.$buttons.on('click', '.add_file', function() {
var active_id = self.getParent().getParent()._current_state.active_id;
self.do_action({
type: "ir.actions.act_window",
name: "Ajouter un fichier",
res_model: "add.file.wizard",
views: [[false,'form']],
target: 'new',
view_type : 'form',
view_mode : 'form',
context: { 'active_id': Number(active_id) }
});
});
},
});
});
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<templates xml:space="preserve">
<t t-extend="ListView.buttons">
<t t-jquery="div.o_list_buttons" t-operation="append">
<t t-if="widget.modelName == 'alfresco.partner.files'" >
<button class="btn btn-secondary add_file" type="button" >Ajouter un fichier</button>
</t>
</t>
</t>
</templates>
\ No newline at end of file
<?xml version="1.0"?>
<!-- Copyright 2019 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record id="alfresco_partner_files_search" model="ir.ui.view">
<field name="name">alfresco.partner.files.search</field>
<field name="model">alfresco.partner.files</field>
<field name="arch" type="xml">
<search>
<!-- Champs de recherche -->
<field name="name" />
<field name="type"/>
<!-- Groupes -->
<group expand="0" name="group_by" string="Group By">
<filter string="Types" name="file_type" context="{'group_by': 'type'}"/>
<filter string="Période" name="file_periode" context="{'group_by': 'periode'}"/>
<filter string="Validité" name="file_validite" context="{'group_by': 'validite'}"/>
</group>
</search>
</field>
</record>
<record id="alfresco_partner_files_tree" model="ir.ui.view">
<field name="name">alfresco.partner.files.tree</field>
<field name="model">alfresco.partner.files</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<tree string="Fichiers" create="false" edit="false" delete="false">
<field name="name" />
<field name="type"/>
<field name="periode"/>
<field name="validite"/>
<field name="last_modification"/>
<button name="download_file" string="Télécharger" type="object" />
</tree>
</field>
</record>
</data>
</odoo>
<?xml version="1.0"?>
<!-- Copyright 2019 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<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>
</xpath>
</template>
</odoo>
\ No newline at end of file
<?xml version="1.0"?>
<!-- Copyright 2019 Le Filament
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record id="view_partner_cooperative_form_inherited" model="ir.ui.view">
<field name="name">cooperative.alfresco.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="cgscop_partner.view_partner_cooperative_form"/>
<field name="arch" type="xml">
<header position="inside">
<button string="Fichiers" type="object" name="get_partner_files" />
</header>
</field>
</record>
</data>
</odoo>
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import add_file_wizard
\ No newline at end of file
# © 2019 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
class AddFileWizard(models.TransientModel):
_name = 'add.file.wizard'
_inherit = 'connector.alfresco'
_description = "Ajout de fichier dans Alfresco"
# Default functions
def _get_selection(self, value):
file_type = self.alfresco_list_type()[value]
select_type = []
for type in file_type:
select_type.append(
(type, type))
return select_type
@api.model
def _get_type(self):
return self._get_selection('type')
@api.model
def _get_periode(self):
return self._get_selection('periode')
@api.model
def _get_validite(self):
return self._get_selection('validite')
@api.model
def _default_partner_id(self):
return self.env.context.get('active_id')
type = fields.Selection(selection=_get_type, string='Type')
periode = fields.Selection(selection=_get_periode, string='Période')
validite = fields.Selection(selection=_get_validite, string='Validité')
file = fields.Binary('Fichier')
filename = fields.Char('Nom')
content_type = fields.Char('MimeType')
partner_id = fields.Many2one(
comodel_name='res.partner',
string='Organisme',
default=_default_partner_id,)
@api.multi
def add_file(self):
self.alfresco_upload(
raisonSociale=self.partner_id.name,
type=self.type,
periode=self.periode,
validite=self.validite,
filename=self.filename,
doc=self.file.decode('utf-8'))
return {
"type": "ir.actions.act_window",
"name": "Fichiers liés",
"res_model": "alfresco.partner.files",
"views": [[False, "tree"]],
"target": "main",
"search_view_id": self.env.ref(
"connector_alfresco.alfresco_partner_files_search").id,
}
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- WIZARD FORM -->
<record id="add_file_wizard_view_form" model="ir.ui.view">
<field name="name">add.file.wizard.form</field>
<field name="model">add.file.wizard</field>
<field name="arch" type="xml">
<form string="Ajouter un Fichier">
<group name="infos" string="Informations">
<field name="partner_id" readonly="1" />
<field name="type" required="1" />
<field name="periode" required="1" />
<field name="validite" required="1" />
</group>
<group>
<field name="filename" invisible="1"/>
<field name="content_type" invisible="1"/>
<field name="file" filename="filename" content_type="content_type" required="1"/>
</group>
<footer>
<button class="btn btn-sm btn-primary" name="add_file" string="Ajouter" type="object" confirm="Êtes-vous sûr de vouloir ajouter ce fichier ?"/>
<button class="btn btn-sm btn-default" special="cancel" string="Fermer"/>
</footer>
</form>
</field>
</record>
<record id="add_file_wizard_create_action" model="ir.actions.act_window">
<field name="name">Ajouter un fichier</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">add.file.wizard</field>
<field name="view_mode">form</field>
<field name="view_id" ref="add_file_wizard_view_form"/>
<field name="target">new</field>
</record>
</odoo>
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