diff --git a/models/acc_enedis_cdc.py b/models/acc_enedis_cdc.py index d5f15c5a668f92b336782dc2a969c1de16965546..6d401019e69b800627acc89adb4b5a93a956c050 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 @@ -217,8 +221,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( { @@ -294,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/acc_operation.py b/models/acc_operation.py index 10f6664e2a494ab34bce7bff5f65788a4a515aec..f310e1555aef54966961ee5ec73150dc1985693b 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 @@ -51,7 +49,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,23 +61,19 @@ class AccOperation(models.Model): from_cron=from_cron, ) - 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() diff --git a/models/queue_job_batch.py b/models/queue_job_batch.py index 92c2cb0a951b74b17417eeb13c7a9aa9e25e8bd1..f62f309f17ec6a49328377958deb5aa492caa69a 100644 --- a/models/queue_job_batch.py +++ b/models/queue_job_batch.py @@ -5,16 +5,41 @@ 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): - 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": + 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 + # 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(date_start=self.start_date, date_end=self.end_date) + # Compute by-day aggregated curves + 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, + ) + # Recompute static datas for last month self.acc_operation_id.set_static_data()