From f53f77e0dca0cebc6a033df89403354b6e2670ae Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Tue, 25 Feb 2025 10:44:37 +0100
Subject: [PATCH 01/12] [ADD] agg

---
 models/acc_operation.py   | 3 +++
 models/queue_job_batch.py | 1 +
 2 files changed, 4 insertions(+)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index 10f6664..b8f7dae 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -84,6 +84,9 @@ class AccOperation(models.Model):
         if rec_ids:
             rec_ids.unlink()
 
+    def store_aggregated_curves(self):
+        pass
+
     # ------------------------------------------------------
     # Business methods
     # ------------------------------------------------------
diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index 92c2cb0..b008195 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -18,3 +18,4 @@ class QueueJobBatch(models.Model):
     def post_finished_action(self):
         if self.acc_operation_id and self.batch_type == "monthly_curves":
             self.acc_operation_id.set_static_data()
+            self.acc_operation_id.store_aggregated_curves()
-- 
GitLab


From f7fda3471c59a78fed642fbc948de8e419600c20 Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Tue, 25 Feb 2025 16:31:47 +0100
Subject: [PATCH 02/12] [UPD] WIP implement wizard and agg curve creation

---
 models/acc_operation.py | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index b8f7dae..c1badba 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -85,7 +85,29 @@ class AccOperation(models.Model):
             rec_ids.unlink()
 
     def store_aggregated_curves(self):
-        pass
+        start_date, end_month = date_utils.get_month(
+            fields.Date.context_today(self) - date_utils.relativedelta(months=1)
+        )
+        # end_date is excluded so it should be first day of next month
+        end_date = end_month + date_utils.relativedelta(days=1)
+
+        domain = [
+            ("acc_operation_id", "=", self.operation_id.id),
+            ("date_slot", ">=", start_date),
+            ("date_slot", "<", end_date),
+        ]
+
+        # Vérification si des données existent déjà
+        # pour cet intervalle de date
+        rec_ids = self.env["acc.enedis.cdc.agg"].search(domain)
+        if rec_ids:
+            rec_ids.unlink()
+
+        self.env["acc.enedis.cdc.agg"].generate(
+            operation=self,
+            start_date=start_date,
+            end_date=end_date,
+        )
 
     # ------------------------------------------------------
     # Business methods
-- 
GitLab


From f7b8193d9cbe3ada987014a738c09334dd0d0adb Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Wed, 26 Feb 2025 09:14:38 +0100
Subject: [PATCH 03/12] [FIX] debug cron

---
 models/acc_operation.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index c1badba..088f8ac 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -92,7 +92,7 @@ class AccOperation(models.Model):
         end_date = end_month + date_utils.relativedelta(days=1)
 
         domain = [
-            ("acc_operation_id", "=", self.operation_id.id),
+            ("acc_operation_id", "=", self.id),
             ("date_slot", ">=", start_date),
             ("date_slot", "<", end_date),
         ]
@@ -104,7 +104,7 @@ class AccOperation(models.Model):
             rec_ids.unlink()
 
         self.env["acc.enedis.cdc.agg"].generate(
-            operation=self,
+            acc_operation_id=self,
             start_date=start_date,
             end_date=end_date,
         )
-- 
GitLab


From 883d04f2e0120b5ffe467681b40eddb5a7b49e08 Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Wed, 26 Feb 2025 09:15:09 +0100
Subject: [PATCH 04/12] [FIX] pre commit

---
 models/acc_operation.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index 088f8ac..ec5e10e 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -51,7 +51,6 @@ class AccOperation(models.Model):
         # end_date is excluded so it should be first day of next month
         end_date = end_month + date_utils.relativedelta(days=1)
 
-
         super()._get_monthly_enedis_data(from_cron)
 
         if from_cron:
@@ -64,7 +63,6 @@ class AccOperation(models.Model):
             from_cron=from_cron,
         )
 
-
     def _remove_cdc(self, start_date, end_date):
         """
         remove cdc for current month
-- 
GitLab


From 9bc009394b9bf4f03614b73b87bab473e1ff2771 Mon Sep 17 00:00:00 2001
From: Julien Ortet <julien@le-filament.com>
Date: Tue, 18 Mar 2025 14:22:19 +0100
Subject: [PATCH 05/12] [FIX] fix genereate call function

---
 models/acc_operation.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index ec5e10e..cf0d849 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -102,7 +102,7 @@ class AccOperation(models.Model):
             rec_ids.unlink()
 
         self.env["acc.enedis.cdc.agg"].generate(
-            acc_operation_id=self,
+            acc_operation_id=self.id,
             start_date=start_date,
             end_date=end_date,
         )
-- 
GitLab


From 4536ef098eb1c8423f3964024f29e9f29bd35f86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Tue, 18 Mar 2025 09:30:57 +0100
Subject: [PATCH 06/12] [FIX] is_cdc_data_exists only if jobs run successfully

---
 models/acc_enedis_cdc.py  | 2 --
 models/queue_job_batch.py | 8 +++++++-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/models/acc_enedis_cdc.py b/models/acc_enedis_cdc.py
index d5f15c5..9c062e8 100644
--- a/models/acc_enedis_cdc.py
+++ b/models/acc_enedis_cdc.py
@@ -217,8 +217,6 @@ class AccEnedisCdc(models.Model):
             + str(fields.Datetime.now())
             + "</h1>"
         )
-        if not operation.is_cdc_data_exists:
-            operation.is_cdc_data_exists = True
         # Logs information
         self.env["acc.logs"].create(
             {
diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index b008195..30bc81a 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -11,11 +11,17 @@ class QueueJobBatch(models.Model):
     )
 
     def write(self, vals):
-        super().write(vals)
+        res = super().write(vals)
         if self.acc_operation_id and self.state == "finished":
             self.post_finished_action()
+        return res
 
     def post_finished_action(self):
         if self.acc_operation_id and self.batch_type == "monthly_curves":
             self.acc_operation_id.set_static_data()
             self.acc_operation_id.store_aggregated_curves()
+            if (
+                not self.acc_operation_id.is_cdc_data_exists
+                and self.finished_job_count > 0
+            ):
+                self.acc_operation_id.is_cdc_data_exists = True
-- 
GitLab


From 62a36b900a04bfb9f4b29a298d03df3274469d0d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Tue, 18 Mar 2025 16:03:33 +0100
Subject: [PATCH 07/12] [MOV] set partner_id on curves at the end of job batch

---
 models/acc_enedis_cdc.py  | 19 +++++--------------
 models/queue_job_batch.py |  9 ++++++++-
 2 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/models/acc_enedis_cdc.py b/models/acc_enedis_cdc.py
index 9c062e8..6d40101 100644
--- a/models/acc_enedis_cdc.py
+++ b/models/acc_enedis_cdc.py
@@ -72,7 +72,11 @@ class AccEnedisCdc(models.Model):
 
         batch_name = f"{operation.name} curves"
         queue_batch = self.env["queue.job.batch"].get_new_batch(
-            batch_name, acc_operation_id=operation.id, batch_type="monthly_curves"
+            batch_name,
+            acc_operation_id=operation.id,
+            batch_type="monthly_curves",
+            start_date=start_date,
+            end_date=end_date,
         )
 
         # Si pas de PRM sélectionnés
@@ -292,19 +296,6 @@ class AccEnedisCdc(models.Model):
                             "timestep": timestep,
                         }
                     )
-                # Update partner_id for retrieved cdc
-                domain = [
-                    ("acc_operation_id", "=", operation.id),
-                    ("acc_counter_id", "=", usage_point_id.id or False),
-                    (
-                        "prm_type",
-                        "=",
-                        "delivery" if type_prm == "cons" else "injection",
-                    ),
-                ]
-                self.env["acc.counter.period"]._get_periods_from_interval(
-                    domain, start_date, end_date
-                )._update_cdc_partner_id()
             message += "Fin du traitement des données\n"
         else:
             message += (
diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index 30bc81a..03ca3ea 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -5,10 +5,11 @@ class QueueJobBatch(models.Model):
     _inherit = ["queue.job.batch"]
 
     acc_operation_id = fields.Many2one("acc.operation", string="Opération liée")
-
     batch_type = fields.Selection(
         [("monthly_curves", "Récupération automatique des courbes")]
     )
+    start_date = fields.Date("Date de début des données")
+    end_date = fields.Date("Date de fin des données (exclue)")
 
     def write(self, vals):
         res = super().write(vals)
@@ -25,3 +26,9 @@ class QueueJobBatch(models.Model):
                 and self.finished_job_count > 0
             ):
                 self.acc_operation_id.is_cdc_data_exists = True
+            # Update partner_id for retrieved cdc
+            self.env["acc.counter.period"]._get_periods_from_interval(
+                [("acc_operation_id", "=", self.acc_operation_id.id)],
+                self.start_date,
+                self.end_date,
+            )._update_cdc_partner_id(self.start_date, self.end_date)
-- 
GitLab


From ae30990289d94dc9fcceff5e2eb50d9e370c9668 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Wed, 19 Mar 2025 08:44:02 +0100
Subject: [PATCH 08/12] [FIX] order of functions

---
 models/queue_job_batch.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index 03ca3ea..316b1e8 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -20,7 +20,6 @@ class QueueJobBatch(models.Model):
     def post_finished_action(self):
         if self.acc_operation_id and self.batch_type == "monthly_curves":
             self.acc_operation_id.set_static_data()
-            self.acc_operation_id.store_aggregated_curves()
             if (
                 not self.acc_operation_id.is_cdc_data_exists
                 and self.finished_job_count > 0
@@ -32,3 +31,5 @@ class QueueJobBatch(models.Model):
                 self.start_date,
                 self.end_date,
             )._update_cdc_partner_id(self.start_date, self.end_date)
+            # Compute by-day aggregated curves
+            self.acc_operation_id.store_aggregated_curves()
-- 
GitLab


From 4efd33f6916e0acde52dbfcbd27e4c7d70a5cfee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Wed, 19 Mar 2025 10:56:44 +0100
Subject: [PATCH 09/12] [IMP] simplify functions

---
 models/acc_operation.py   | 38 ++++----------------------------------
 models/queue_job_batch.py |  8 ++++++--
 2 files changed, 10 insertions(+), 36 deletions(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index cf0d849..f310e15 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -2,7 +2,6 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
 
 from odoo import fields, models
-from odoo.osv import expression
 from odoo.tools import date_utils
 
 from odoo.addons.api_connector.tools.date_utils import local_to_utc
@@ -38,7 +37,6 @@ class AccOperation(models.Model):
     # ------------------------------------------------------
     # Actions
     # ------------------------------------------------------
-
     def _get_monthly_enedis_data(self, from_cron):
         """
         Overrides function from oacc_perimeter_api to request curves for last month
@@ -65,48 +63,20 @@ class AccOperation(models.Model):
 
     def _remove_cdc(self, start_date, end_date):
         """
-        remove cdc for current month
+        remove existing cdc between given dates
         """
-        domain_base = [
-            ("acc_operation_id", "in", self.ids),
-        ]
         start_datetime = local_to_utc(start_date, "Europe/Paris")
         end_datetime = local_to_utc(end_date, "Europe/Paris")
-        domain_date = [
+        domain = [
+            ("acc_operation_id", "in", self.ids),
             ("date_slot", ">=", start_datetime),
             ("date_slot", "<", end_datetime),
         ]
-        domain_cdc = expression.AND([domain_base, domain_date])
 
-        rec_ids = self.env["acc.enedis.cdc"].search(domain_cdc)
+        rec_ids = self.env["acc.enedis.cdc"].search(domain)
         if rec_ids:
             rec_ids.unlink()
 
-    def store_aggregated_curves(self):
-        start_date, end_month = date_utils.get_month(
-            fields.Date.context_today(self) - date_utils.relativedelta(months=1)
-        )
-        # end_date is excluded so it should be first day of next month
-        end_date = end_month + date_utils.relativedelta(days=1)
-
-        domain = [
-            ("acc_operation_id", "=", self.id),
-            ("date_slot", ">=", start_date),
-            ("date_slot", "<", end_date),
-        ]
-
-        # Vérification si des données existent déjà
-        # pour cet intervalle de date
-        rec_ids = self.env["acc.enedis.cdc.agg"].search(domain)
-        if rec_ids:
-            rec_ids.unlink()
-
-        self.env["acc.enedis.cdc.agg"].generate(
-            acc_operation_id=self.id,
-            start_date=start_date,
-            end_date=end_date,
-        )
-
     # ------------------------------------------------------
     # Business methods
     # ------------------------------------------------------
diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index 316b1e8..94b2ded 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -30,6 +30,10 @@ class QueueJobBatch(models.Model):
                 [("acc_operation_id", "=", self.acc_operation_id.id)],
                 self.start_date,
                 self.end_date,
-            )._update_cdc_partner_id(self.start_date, self.end_date)
+            ).update_cdc_partner_id(self.start_date, self.end_date)
             # Compute by-day aggregated curves
-            self.acc_operation_id.store_aggregated_curves()
+            self.env["acc.enedis.cdc.day"].generate(
+                acc_operation_id=self.acc_operation_id.id,
+                start_date=self.start_date,
+                end_date=self.end_date,
+            )
-- 
GitLab


From 9a636ca3f761a2f279c1372bd6107599787fed73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Wed, 19 Mar 2025 11:37:40 +0100
Subject: [PATCH 10/12] [FIX] named parameters

---
 models/queue_job_batch.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index 94b2ded..b7b427d 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -30,7 +30,7 @@ class QueueJobBatch(models.Model):
                 [("acc_operation_id", "=", self.acc_operation_id.id)],
                 self.start_date,
                 self.end_date,
-            ).update_cdc_partner_id(self.start_date, self.end_date)
+            ).update_cdc_partner_id(date_start=self.start_date, date_end=self.end_date)
             # Compute by-day aggregated curves
             self.env["acc.enedis.cdc.day"].generate(
                 acc_operation_id=self.acc_operation_id.id,
-- 
GitLab


From 092b3918df029e0f7760696557ef14f0f56c84a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Tue, 8 Apr 2025 18:31:45 +0200
Subject: [PATCH 11/12] [REF] simplify mixin

---
 models/queue_job_batch.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index b7b427d..8477ada 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -32,7 +32,12 @@ class QueueJobBatch(models.Model):
                 self.end_date,
             ).update_cdc_partner_id(date_start=self.start_date, date_end=self.end_date)
             # Compute by-day aggregated curves
-            self.env["acc.enedis.cdc.day"].generate(
+            self.env["acc.enedis.cdc.day"].populate_daily_aggregated_data(
+                acc_operation_id=self.acc_operation_id.id,
+                start_date=self.start_date,
+                end_date=self.end_date,
+            )
+            self.env["acc.enedis.cdc.prorata"].populate_daily_prorata(
                 acc_operation_id=self.acc_operation_id.id,
                 start_date=self.start_date,
                 end_date=self.end_date,
-- 
GitLab


From 6087fb3af4149b1a27b333ec33f3f3cf2f3ee9ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Wed, 9 Apr 2025 14:28:17 +0200
Subject: [PATCH 12/12] [FIX] move compute static_data after generating daily
 curves

---
 models/queue_job_batch.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py
index 8477ada..f62f309 100644
--- a/models/queue_job_batch.py
+++ b/models/queue_job_batch.py
@@ -19,7 +19,6 @@ class QueueJobBatch(models.Model):
 
     def post_finished_action(self):
         if self.acc_operation_id and self.batch_type == "monthly_curves":
-            self.acc_operation_id.set_static_data()
             if (
                 not self.acc_operation_id.is_cdc_data_exists
                 and self.finished_job_count > 0
@@ -42,3 +41,5 @@ class QueueJobBatch(models.Model):
                 start_date=self.start_date,
                 end_date=self.end_date,
             )
+            # Recompute static datas for last month
+            self.acc_operation_id.set_static_data()
-- 
GitLab