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