From 4706f30f8c0dc874dde3984ebffa83664d257e04 Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Tue, 15 Mar 2022 11:01:45 +0100
Subject: [PATCH] [add] cron and Alfresco functions

---
 __manifest__.py              |  1 +
 datas/cron_inovatic.xml      | 18 ++++++++++
 models/__init__.py           |  1 +
 models/inovatic_job_queue.py | 70 ++++++++++++++++++++++++++++++++++++
 4 files changed, 90 insertions(+)
 create mode 100644 datas/cron_inovatic.xml
 create mode 100644 models/inovatic_job_queue.py

diff --git a/__manifest__.py b/__manifest__.py
index 39ffe28..440fd18 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -12,6 +12,7 @@
         "cgscop_liste_ministere_alfodoo",
     ],
     "data": [
+        "datas/cron_inovatic.xml",
         "views/scop_liste_ministere.xml",
     ],
     "installable": True,
diff --git a/datas/cron_inovatic.xml b/datas/cron_inovatic.xml
new file mode 100644
index 0000000..71cd806
--- /dev/null
+++ b/datas/cron_inovatic.xml
@@ -0,0 +1,18 @@
+<odoo>
+    <data noupdate="1">
+        <record id="ir_cron_odoo_riga" model="ir.cron">
+            <field name="name">CG Scop - Inovatic : traitement liasses</field>
+            <field name="active" eval="True" />
+            <field name="user_id" ref="base.user_root" />
+            <field name="interval_number">10</field>
+            <field name="interval_type">minutes</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_inovatic_job_queue" />
+            <field name="code">model._cron_sync()</field>
+            <field name="state">code</field>
+            <field name="priority" eval="5" />
+        </record>
+    </data>
+</odoo>
diff --git a/models/__init__.py b/models/__init__.py
index e660e1e..c8709b0 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,4 +1,5 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
+from . import inovatic_job_queue
 from . import scop_liste_ministere
diff --git a/models/inovatic_job_queue.py b/models/inovatic_job_queue.py
new file mode 100644
index 0000000..a0938b4
--- /dev/null
+++ b/models/inovatic_job_queue.py
@@ -0,0 +1,70 @@
+# © 2020 Le Filament (<http://www.le-filament.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+import base64
+import datetime
+import logging
+import random
+from calendar import monthrange
+
+from odoo import _, api, exceptions, fields, models
+from odoo.exceptions import UserError
+
+_logger = logging.getLogger(__name__)
+
+
+class InovaticJobQueue(models.Model):
+    _inherit = "inovatic.job.queue"
+
+    # ------------------------------------------------------
+    # Button function
+    # ------------------------------------------------------
+    def inovatic_sync(self):
+        """
+        Méthode permettant de transmettre une liasse fiscale
+        depuis Alfresco
+        """
+        for liasse in self:
+            file = liasse._get_cmis_file()
+            stream = file.getContentStream().read()
+            filename = file.name
+            data_file = base64.b64encode(stream)
+            liasse.inovatic_load_file(file=data_file, filename=filename)
+
+    # ------------------------------------------------------
+    # Internal function
+    # ------------------------------------------------------
+    def _get_cmis_file(self):
+        if not self.liasse_fiscale_id.liste_ministere_id:
+            raise UserError(
+                _(
+                    "Rechargement impossible : il n'y a pas de "
+                    "Liste Ministère associée à cette liasse"
+                )
+            )
+        backend = self.env["cmis.backend"].search([])
+        backend.ensure_one()
+        cmis_client = backend.get_cmis_client()
+        query = """
+            SELECT * FROM crm:document as d
+            JOIN crm:organisme as o ON d.cmis:objectId = o.cmis:objectId
+            WHERE d.crm:type='LFI'
+            AND d.crm:annee = '%s'
+            AND d.crm:contexte = 'LM'
+            AND o.crm:id = '%s'""" % (
+            str(self.liasse_fiscale_id.liste_ministere_id.year),
+            str(self.liasse_fiscale_id.partner_id.id),
+        )
+        doc = cmis_client.getDefaultRepository().query(query)
+        if not doc:
+            raise exceptions.Warning(
+                _("Il n'y a pas de fichier dans Alfresco pour cette liasse")
+            )
+        return doc[0]
+
+    # ------------------------------------------------------
+    # CRON function
+    # ------------------------------------------------------
+    def _cron_sync(self):
+        jobs = self.env["inovatic.job.queue"].search([["state", "=", "waiting"]])
+        return jobs.inovatic_sync()
-- 
GitLab