Skip to content
Extraits de code Groupes Projets
Valider 759d1683 rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[update] suppressions fonctions gérées par Alfodoo

parent 552287a6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!112.0 alfodoo
# © 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 wizard
......@@ -14,12 +14,8 @@
],
"data": [
"security/ir.model.access.csv",
"views/assets.xml",
"views/alfresco_connection.xml",
"views/alfresco_partner_files.xml",
"views/res_partner.xml",
"wizard/add_file_wizard.xml",
"datas/cron_init_alfresco.xml",
],
'qweb': [
'static/src/xml/*.xml',
......
# © 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']))])
......@@ -3,5 +3,4 @@
from . import api_alfresco
from . import alfresco_connection
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 = 'cgscop.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',
}
# © 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, api
ALFRESCO_TRACKED_FIELDS = ['name', 'id', 'siret', 'member_number']
......@@ -16,9 +13,8 @@ class AlfrescoPartner(models.Model):
id_alfresco = fields.Char('ID Dossier Alfresco')
# ------------------------------------------------------
# Fonctions héritées
# Override ORM
# ------------------------------------------------------
@api.multi
def write(self, vals):
""" Surcharge la fonction write() pour mettre à jour
......@@ -49,66 +45,3 @@ class AlfrescoPartner(models.Model):
if partner.id_alfresco:
partner.alfresco_remove(partner.id_alfresco)
return super(AlfrescoPartner, self).unlink()
# ------------------------------------------------------
# Fonction boutons
# ------------------------------------------------------
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
"""
if self.id_alfresco:
files = self.alfresco_list_docs(self.id_alfresco).get('docs', '')
else:
self.id_alfresco = self.alfresco_create_organism(self)
print(self.name)
print(self.id_alfresco)
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()
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(
"cgscop_alfresco.alfresco_partner_files_search").id,
'context': {'search_default_group_periode': True}
}
# ------------------------------------------------------
# CRON
# ------------------------------------------------------
def _init_alfresco_folder(self):
""" Fonction pour le cron permettant de créer un dossier
dans Alfresco pour l'ensemble des organismes qui n'ont pas
de nodeRef
"""
partners = self.env['res.partner'].search([
['is_cooperative', '=', True],
['id_alfresco', '=', False],
['membership_status', '=', "member"]])
for partner in partners:
id_alfresco = partner.alfresco_create_organism(partner)
partner.write({
'id_alfresco': id_alfresco,
})
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="periode"/>
<field name="type"/>
<field name="validite"/>
<!-- Groupes -->
<group expand="0" name="group_by" string="Group By">
<filter string="Période" name="group_periode" context="{'group_by': 'periode'}"/>
<filter string="Types" name="group_type" context="{'group_by': 'type'}"/>
<filter string="Validité" name="group_validite" context="{'group_by': 'validite'}"/>
<filter string="Dernière Modification" name="group_last_modification" context="{'group_by': 'last_modification'}"/>
</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="/cgscop_alfresco/static/src/js/alfresco_add_file.js"></script>
</xpath>
</template>
</odoo>
\ 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 . 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).
import mimetypes
import dateutil.parser
import pytz
from odoo import api, fields, models
from odoo.tools.mimetypes import guess_mimetype
class AddFileWizard(models.TransientModel):
""" Wizard d'ajout de fichier dans la GED
Récupère automatiquement depuis Alfresco les valeurs de periode,
type et validité ainsi que l'organisme associé
"""
_name = 'add.file.wizard'
_inherit = 'cgscop.alfresco'
_description = "Ajout de fichier dans Alfresco"
# Default functions
def _get_selection(self, value):
try:
file_type = self.alfresco_list_type()[value]
select_type = []
for type in file_type:
select_type.append(
(type, type))
return select_type
except:
return False
@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')
partner_id = fields.Many2one(
comodel_name='res.partner',
string='Organisme',
default=_default_partner_id,)
@api.multi
def add_file(self):
""" Ajoute un fichier sur la GED Alfresco
@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)
# Upload File
uploaded_file = self.alfresco_upload(
partner=self.partner_id,
type=self.type,
periode=self.periode,
validite=self.validite,
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.periode if self.periode != 'Autre' else self.filename,
'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.close_wizard_refresh_view'
}
<?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="periode" required="1" />
<field name="type" required="1" />
<field name="validite" required="1" />
</group>
<group>
<field name="filename" invisible="1"/>
<field name="file" filename="filename" required="1"/>
</group>
<footer>
<button class="btn btn-sm btn-primary" name="add_file" string="Ajouter" type="object" confirm="Êtes-vous sûr(e) 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