From c144b8d290469b4c999c57f19e6af18924c73581 Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Thu, 22 Feb 2024 16:22:16 +0100
Subject: [PATCH] Add queue job

---
 __manifest__.py                       |  2 +-
 tools/key_file.py                     | 23 ++++++++++++-----------
 wizard/acc_repartition_keys_wizard.py | 14 +++++++-------
 3 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/__manifest__.py b/__manifest__.py
index 0803a59..7ea573f 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -5,7 +5,7 @@
     "website": "https://le-filament.com",
     "version": "16.0.1.0.0",
     "license": "AGPL-3",
-    "depends": ["oacc", "api_enedis_acc"],
+    "depends": ["oacc", "api_enedis_acc", "queue_job"],
     "data": [
         "security/ir.model.access.csv",
         # datas
diff --git a/tools/key_file.py b/tools/key_file.py
index 7f48d85..70d3241 100644
--- a/tools/key_file.py
+++ b/tools/key_file.py
@@ -66,7 +66,7 @@ class RepartitionKeyEntryFile:
                 )
         return json
 
-    def data_to_send(self, agreement_id, send_empty_key=True):
+    def data_to_send(self, send_empty_key=True):
         """
         build route and body for api sending
         return dict {"route", "body} to enedis
@@ -74,17 +74,18 @@ class RepartitionKeyEntryFile:
         call_list = []
         for horo in self.json:
             date = datetime.strptime(horo, "%d-%m-%Y %H:%M")
-            route = f"{agreement_id}/repartition_keys/{date.strftime('%Y%m%dT%H%MZ')}"
+            route = f"/repartition_keys/{date.strftime('%Y%m%dT%H%M%SZ')}"
             body = []
-            # specification enedis si la somme des clefs est nulle on envoi un body vide
-            if self._get_key_sum(self.json.get(horo)) > 0:
-                for keys in self.json.get(horo):
-                    if send_empty_key:
-                        body.append(keys)
-                    else:
-                        if float(keys.get("key")) > 0:
-                            body.append(keys)
-            call_list.append({"route": route, "body": body})
+            for key in self.json.get(horo):
+                if send_empty_key:
+                    body.append(key)
+                else:
+                    if float(key.get("key")) > 0:
+                        body.append(key)
+            
+            if send_empty_key or body:
+                call_list.append({"route": route, "body": body})
+                
         return call_list
 
     def _check_counter(self):
diff --git a/wizard/acc_repartition_keys_wizard.py b/wizard/acc_repartition_keys_wizard.py
index caa0f41..4758365 100644
--- a/wizard/acc_repartition_keys_wizard.py
+++ b/wizard/acc_repartition_keys_wizard.py
@@ -4,7 +4,7 @@ import base64
 import datetime
 
 from odoo import fields, models
-from odoo.exceptions import UserError
+from odoo.exceptions import UserError, ValidationError
 
 from ..tools.key_file import RepartitionKeyEntryFile
 
@@ -83,14 +83,14 @@ class AccRepartitionKeysWizard(models.TransientModel):
             if not file_check_result.get("check"):
                 raise UserError(file_check_result.get("message"))
 
-            data_to_send = entry_file_handler.data_to_send(
-                agreement_id=self.operation_id.name
-            )
+            data_to_send = entry_file_handler.data_to_send(send_empty_key=False)
 
             for key in data_to_send:
-                response = self.env["api.enedis.acc"].send_repartition_key(key=key)
-                # TODO: test api
-                print(response)
+                job_description = f"Send repartition key at {key.get('route')}"
+                try:
+                    self.operation_id.with_delay(description=job_description).send_repartition_key(key=key)
+                except ValidationError as exc:
+                    raise UserError(str(exc))
 
             self.env["acc.repartition.keys"].create(
                 {
-- 
GitLab