From e0088817b31d6c717f49ef4368e4746265f6351a Mon Sep 17 00:00:00 2001 From: Benjamin <35699580+benj-filament@users.noreply.github.com> Date: Fri, 22 Nov 2019 19:15:18 +0100 Subject: [PATCH] modification gestion connexion + adaptation changement API --- README.rst | 6 ++-- __manifest__.py | 3 +- datas/ir_config_parameter.xml | 15 -------- models/__init__.py | 1 + models/alfresco_connection.py | 24 +++++++++++++ models/api_alfresco.py | 32 +++++++++++++----- models/res_partner.py | 2 ++ security/ir.model.access.csv | 1 + views/alfresco_connection.xml | 64 +++++++++++++++++++++++++++++++++++ wizard/add_file_wizard.py | 15 ++++---- 10 files changed, 128 insertions(+), 35 deletions(-) delete mode 100644 datas/ir_config_parameter.xml create mode 100644 models/alfresco_connection.py create mode 100644 views/alfresco_connection.xml diff --git a/README.rst b/README.rst index 2832ad3..8e09802 100644 --- a/README.rst +++ b/README.rst @@ -24,15 +24,13 @@ Il utilise l'API Alfresco développée spécifiquement pour le projet de la CG S Usage ===== -Les données suivantes sont à renseigner dans le fichier de configuration d'Odoo : +Pour configurer ce module, les données suivantes sont à renseigner dans le menu **Configuration > Alfresco > CG Scop > Cofiguration connexion** : * *alfresco_login* : login de connexion à l'API * *alfresco_password* : password de connexion à l'API - -Les données suivantes sont présentes dans la table **ir.config.parameter** : - * *alfresco_url* : url de l'API * *alfresco_ssl* : **True** si on active la vérification SSL, **False** sinon (False par défaut) +* *active* : si il s'agit de la connexion active Credits diff --git a/__manifest__.py b/__manifest__.py index a41092d..e123f9c 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -12,11 +12,12 @@ 'cgscop_partner' ], "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/ir_config_parameter.xml", "datas/cron_init_alfresco.xml", ], 'qweb': [ diff --git a/datas/ir_config_parameter.xml b/datas/ir_config_parameter.xml deleted file mode 100644 index 4a79164..0000000 --- a/datas/ir_config_parameter.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<odoo noupdate="1"> - - <record id="alfresco_url" model="ir.config_parameter"> - <field name="key">alfresco.url</field> - <field name="value">https://documents.scop.coop</field> - </record> - - <record id="alfresco_ssl" model="ir.config_parameter"> - <field name="key">alfresco.ssl</field> - <field name="value">False</field> - </record> - -</odoo> \ No newline at end of file diff --git a/models/__init__.py b/models/__init__.py index ceb46c4..8320fce 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -2,5 +2,6 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import api_alfresco +from . import alfresco_connection from . import alfresco_partner_files from . import res_partner diff --git a/models/alfresco_connection.py b/models/alfresco_connection.py new file mode 100644 index 0000000..a991cf5 --- /dev/null +++ b/models/alfresco_connection.py @@ -0,0 +1,24 @@ +# © 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 + + +class CgscopAlfrescoConnection(models.Model): + _name = 'alfresco.connection' + _description = 'Infos FTP de connexion pour fichiers RIGA' + + name = fields.Char(string='Nom') + login = fields.Char('Login') + password = fields.Char('Password') + url = fields.Char('URL') + ssl = fields.Boolean('Connexion SSL', default=False) + active = fields.Boolean('Actif', default=False) + + def toogle_active_config(self): + """ Active la connexion sélectionnée et désactive + toutes les autres connexions + """ + for item in self.env['alfresco.connection'].search([]): + item.active = False + self.active = True diff --git a/models/api_alfresco.py b/models/api_alfresco.py index a8cb1af..18ca6b7 100644 --- a/models/api_alfresco.py +++ b/models/api_alfresco.py @@ -27,12 +27,17 @@ class CgscopAlfresco(models.AbstractModel): @return response au format JSON """ _logger.info("Calling %s" % url) - param = self.env['ir.config_parameter'].sudo() - alfresco_url = param.get_param('alfresco.url') - alfresco_ssl = True if param.get_param('alfresco.ssl') == 'True' else False + param = self.env['alfresco.connection'].sudo().search([ + ['active', '=', True]]) + if not param: + raise exceptions.Warning( + "La connexion avec Alfresco n'est pas configurée !") + return False + alfresco_url = param.url + alfresco_ssl = param.ssl basicAuthCredentials = ( - tools.config['alfresco_login'], - tools.config['alfresco_password']) + param.login, + param.password) try: if call_type == 'get': response = requests.get( @@ -57,10 +62,12 @@ class CgscopAlfresco(models.AbstractModel): err.__str__(), ) response = False - if not response: - raise exceptions.Warning( - "Oops... il y a un problème de connexion avec l'espace documentaire") - elif response.status_code not in [200, 201]: + # if not response: + # raise exceptions.Warning( + # "Oops... il y a un problème de connexion avec l'espace documentaire") + # Gestion erreur API + print(response.text) + if response.status_code not in [200, 201]: raise exceptions.Warning( "L'appel url '%s' a échoué\n" "- Code erreur : %d\n" @@ -68,6 +75,13 @@ class CgscopAlfresco(models.AbstractModel): response.url, response.status_code, response.json().get('message'))) + # Si dossier déjà créé + elif response.text.find("NUMADHERENT d") > 0: + beg = response.text.find("workspace://SpacesStore/") + nodeRef = response.text[beg:beg+60] + return {"nodeRef": nodeRef} + # return response.json().get('dossiersExistants')[0] + return response.json() # Get Methods diff --git a/models/res_partner.py b/models/res_partner.py index 42eda4f..534dc70 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -78,6 +78,8 @@ class AlfrescoPartner(models.Model): 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"] diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 97dd8b9..c3e7f01 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1 +1,2 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_alfresco_connection,access_alfresco_connection,model_alfresco_connection,cgscop_partner.group_cg_administrator,1,1,1,1 \ No newline at end of file diff --git a/views/alfresco_connection.xml b/views/alfresco_connection.xml new file mode 100644 index 0000000..d3eebfb --- /dev/null +++ b/views/alfresco_connection.xml @@ -0,0 +1,64 @@ +<?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_alfresco_connection_tree" model="ir.ui.view"> + <field name="name">alfresco.connection.tree</field> + <field name="model">alfresco.connection</field> + <field name="arch" type="xml"> + <tree string="Synchronisation Odoo"> + <field name="name"/> + <field name="login"/> + <field name="url"/> + <field name="active"/> + </tree> + </field> + </record> + + <record id="view_alfresco_connection_form" model="ir.ui.view"> + <field name="name">alfresco.connection.form</field> + <field name="model">alfresco.connection</field> + <field name="arch" type="xml"> + <form> + <header> + <button name="toogle_active_config" type="object" string="Activer" /> + </header> + <sheet> + <group> + <group> + <field name="name" /> + <field name="url"/> + <field name="ssl"/> + </group> + <group> + <field name="active" readonly="1" /> + <field name="login"/> + <field name="password" password="True" /> + </group> + </group> + </sheet> + </form> + </field> + </record> + + <record id="action_view_alfresco_connection" model="ir.actions.act_window"> + <field name="name">Configuration Connexion Alfresco</field> + <field name="res_model">alfresco.connection</field> + <field name="view_mode">tree,form</field> + </record> + + <menuitem id="menu_cgscop_alfresco" + parent="base.menu_custom" + sequence="120" + name="Alfresco"/> + + <menuitem id="menu_cgscop_alfresco_connection" + parent="menu_cgscop_alfresco" + action="action_view_alfresco_connection" + name="Cofiguration connexion" + sequence="90"/> + </data> +</odoo> diff --git a/wizard/add_file_wizard.py b/wizard/add_file_wizard.py index 6b5c9bc..0fc1921 100644 --- a/wizard/add_file_wizard.py +++ b/wizard/add_file_wizard.py @@ -21,12 +21,15 @@ class AddFileWizard(models.TransientModel): # 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 + 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): -- GitLab