From 5e9068ca511e36e92683379fb6a33b8542955c35 Mon Sep 17 00:00:00 2001
From: Benjamin <35699580+benj-filament@users.noreply.github.com>
Date: Wed, 16 Oct 2019 18:09:51 +0200
Subject: [PATCH] =?UTF-8?q?ajout=20CRON=20pour=20initialisation=20dossiers?=
 =?UTF-8?q?=20+=20param=C3=A8tre=20alfresco=5Fssl=20pour=20g=C3=A9rer=20la?=
 =?UTF-8?q?=20v=C3=A9rification=20SSL=20lors=20de=20l'appel?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.rst                    |  1 +
 __manifest__.py               |  3 ++-
 datas/cron_init_alfresco.xml  | 18 ++++++++++++++++++
 datas/ir_config_parameter.xml |  5 +++++
 models/api_alfresco.py        | 17 ++++++++++++-----
 models/res_partner.py         | 16 ++++++++++++++++
 6 files changed, 54 insertions(+), 6 deletions(-)
 create mode 100644 datas/cron_init_alfresco.xml

diff --git a/README.rst b/README.rst
index d17c3e7..3b74b12 100644
--- a/README.rst
+++ b/README.rst
@@ -32,6 +32,7 @@ Les données suivantes sont à renseigner dans le fichier de configuration d'Odo
 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 (True par défaut)
 
 
 Credits
diff --git a/__manifest__.py b/__manifest__.py
index ad23b2b..a41092d 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -12,11 +12,12 @@
         'cgscop_partner'
     ],
     "data": [
-        "datas/ir_config_parameter.xml",
         "views/assets.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': [
         'static/src/xml/*.xml',
diff --git a/datas/cron_init_alfresco.xml b/datas/cron_init_alfresco.xml
new file mode 100644
index 0000000..9bb8007
--- /dev/null
+++ b/datas/cron_init_alfresco.xml
@@ -0,0 +1,18 @@
+<odoo>
+    <data noupdate="0">
+        <record id="ir_cron_init_alfresco" model="ir.cron">
+            <field name="name">CG Scop - Alfresco - Initialisation dossiers</field>
+            <field name="active" eval="False" />
+            <field name="user_id" ref="base.user_root" />
+            <!-- <field name="interval_number">1</field> -->
+            <!-- <field name="interval_type">days</field> -->
+            <!-- <field name="numbercall">-1</field> -->
+            <!-- <field name="doall">1</field> -->
+            <!-- <field name="nextcall" >2019-12-01 01:00:00</field> -->
+            <field name="model_id" ref="model_res_partner" />
+            <field name="code">model._init_alfresco_folder()</field>
+            <field name="state">code</field>
+            <field name="priority" eval="5" />
+        </record>
+    </data>
+</odoo>
\ No newline at end of file
diff --git a/datas/ir_config_parameter.xml b/datas/ir_config_parameter.xml
index 569c09a..4a79164 100644
--- a/datas/ir_config_parameter.xml
+++ b/datas/ir_config_parameter.xml
@@ -7,4 +7,9 @@
         <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/api_alfresco.py b/models/api_alfresco.py
index 790a52c..a8cb1af 100644
--- a/models/api_alfresco.py
+++ b/models/api_alfresco.py
@@ -29,31 +29,38 @@ class CgscopAlfresco(models.AbstractModel):
         _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
         basicAuthCredentials = (
             tools.config['alfresco_login'],
             tools.config['alfresco_password'])
-
         try:
             if call_type == 'get':
                 response = requests.get(
                     alfresco_url + url,
-                    auth=basicAuthCredentials,)
+                    auth=basicAuthCredentials,
+                    verify=alfresco_ssl)
             elif call_type == 'post':
                 response = requests.post(
                     alfresco_url + url,
                     auth=basicAuthCredentials,
-                    json=json)
+                    json=json,
+                    verify=alfresco_ssl)
             elif call_type == 'delete':
                 response = requests.delete(
                     alfresco_url + url,
                     auth=basicAuthCredentials,
-                    json=json)
+                    json=json,
+                    verify=alfresco_ssl)
         except Exception as err:
             _logger.warning(
                 "Erreur de connexion. URL: %s",
                 err.__str__(),
             )
-        if response.status_code not in [200, 201]:
+            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]:
             raise exceptions.Warning(
                 "L'appel url '%s' a échoué\n"
                 "- Code erreur : %d\n"
diff --git a/models/res_partner.py b/models/res_partner.py
index 861e368..42eda4f 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -103,3 +103,19 @@ class AlfrescoPartner(models.Model):
                 "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]])
+        for partner in partners:
+            id_alfresco = partner.alfresco_create_organism(partner)
+            partner.write({
+                'id_alfresco': id_alfresco,
+            })
-- 
GitLab