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