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