diff --git a/models/acc_enedis_cdc.py b/models/acc_enedis_cdc.py index 0cc19c6d7ff8ffb99a2b7db8498949296dd6af0b..69892181edd19a44948103176c4a70b8db45a31b 100644 --- a/models/acc_enedis_cdc.py +++ b/models/acc_enedis_cdc.py @@ -3,7 +3,7 @@ from datetime import datetime from dateutil.relativedelta import relativedelta - +from ..tools.export_cdc import get_divider_from_row from odoo import _, api, models from odoo.exceptions import ValidationError from odoo.osv import expression @@ -36,10 +36,10 @@ class AccEnedisCdc(models.Model): step_display_curve = "hour" # Calculate delta between 2 dates delta = (end_date - start_date).days - if delta > 1 and delta <= 31: + if 1 < delta <= 31: step_display_curve = "day" display_hourly_curves = True - elif delta > 31 and delta <= 366: + elif 31 < delta <= 366: step = "month" step_display_curve = "month" elif delta > 366: @@ -193,7 +193,7 @@ class AccEnedisCdc(models.Model): if curve_type in ("cons", "autocons", "prod", "surplus"): result += f""" , (SUM(CASE WHEN cdc.comp_data_type = '{curve_type}' - THEN cdc.power ELSE 0 END)) /2 / 1000 as {curve_type} + THEN cdc.power ELSE 0 END)) as {curve_type} """ elif curve_type == "allocons": result += """ @@ -202,7 +202,7 @@ class AccEnedisCdc(models.Model): THEN cdc.power ELSE 0 END) - SUM(CASE WHEN cdc.comp_data_type = 'autocons' - THEN cdc.power ELSE 0 END)) / 2 / 1000 as allocons + THEN cdc.power ELSE 0 END)) as allocons """ elif curve_type == "autoprod": result += """ @@ -211,8 +211,12 @@ class AccEnedisCdc(models.Model): THEN cdc.power ELSE 0 END) - SUM(CASE WHEN cdc.comp_data_type = 'surplus' - THEN cdc.power ELSE 0 END)) / 2 / 1000 as autoprod + THEN cdc.power ELSE 0 END)) as autoprod """ + result += """ + , cdc.timestep as timestep + """ + return result @api.model @@ -293,7 +297,8 @@ class AccEnedisCdc(models.Model): raise ValidationError(_("Incorrect date_slot in GROUP BY section")) return f""" GROUP BY date_trunc('{date_slot}', - cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris') + cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'), + cdc.timestep """ @api.model @@ -381,11 +386,17 @@ class AccEnedisCdc(models.Model): ) for row in raw_data: + # use KW here, divider depend of the timestep + # only use 30 or 15 minutes, by default its 30 minutes + + divider = get_divider_from_row(row) label.append(row[0]) - data_cons.append({"x": row[0], "y": round(row[1], 2)}) - data_autocons.append({"x": row[0], "y": round(row[2], 2)}) - data_allocons.append({"x": row[0], "y": round(row[1] - row[2], 2)}) - data_prod.append({"x": row[0], "y": round(row[3], 2)}) + data_cons.append({"x": row[0], "y": round(row[1] / divider, 2)}) + data_autocons.append({"x": row[0], "y": round(row[2] / divider, 2)}) + data_allocons.append( + {"x": row[0], "y": round((row[1] - row[2]) / divider, 2)} + ) + data_prod.append({"x": row[0], "y": round(row[3] / divider, 2)}) cdc_cons = { "label": label, @@ -437,8 +448,9 @@ class AccEnedisCdc(models.Model): self.env.cr.execute(query) raw_data = self.env.cr.fetchall() for row in raw_data: - data_autocons_histo.append(round(row[1], 2)) - data_allocons_histo.append(round(row[2], 2)) + divider = get_divider_from_row(row) + data_autocons_histo.append(round(row[1]/divider, 2)) + data_allocons_histo.append(round(row[2]/divider, 2)) label_histo.append(row[0]) cdc_cons = { @@ -524,9 +536,10 @@ class AccEnedisCdc(models.Model): ) for row in raw_data: + divider = get_divider_from_row(row) label.append(row[0]) - data_autocons.append({"x": row[0], "y": round(row[1], 2)}) - data_surplus.append({"x": row[0], "y": round(row[2], 2)}) + data_autocons.append({"x": row[0], "y": round(row[1]/divider, 2)}) + data_surplus.append({"x": row[0], "y": round(row[2]/divider, 2)}) cdc_prod = { "label": label, @@ -570,9 +583,10 @@ class AccEnedisCdc(models.Model): self.env.cr.execute(query) raw_data = self.env.cr.fetchall() for row in raw_data: + divider = get_divider_from_row(row) label_histo.append(row[0]) - data_autocons_prod_histo.append(round(row[1], 2)) - data_surplus_histo.append(round(row[2], 2)) + data_autocons_prod_histo.append(round(row[1]/divider, 2)) + data_surplus_histo.append(round(row[2]/divider, 2)) cdc_jour = { "label_histo": label_histo, diff --git a/tools/export_cdc.py b/tools/export_cdc.py index d34807e6c42c2fa70faf6d157d41b0e232af9c54..b250261974d42971df0294298fb182476f11e313 100644 --- a/tools/export_cdc.py +++ b/tools/export_cdc.py @@ -94,26 +94,27 @@ def make_cons_data(raw_data): data_file_lines = [] rounding = 3 for row in raw_data: + divider = get_divider_from_row(row) data_file_lines.append( ";".join( [ # horodatage row[0].strftime("%d/%m/%Y %H:%M"), # consommation en watt - str(round(row[1] * 2000, rounding)), + str(round((row[1] * 2000)/divider, rounding)), # consommation en kwh - str(round(row[1], rounding)), + str(round(row[1]/divider, rounding)), # allocons - str(round(row[3], rounding)), + str(round(row[3]/divider, rounding)), # autocons - str(round(row[2], rounding)), + str(round(row[2]/divider, rounding)), ] ) ) - sum_value["cons"] += round(row[1], rounding) - sum_value["allo_cons"] += round(row[3], rounding) - sum_value["auto_cons"] += round(row[2], rounding) + sum_value["cons"] += round(row[1]/divider, rounding) + sum_value["allo_cons"] += round(row[3]/divider, rounding) + sum_value["auto_cons"] += round(row[2]/divider, rounding) tot = ";".join( [ @@ -139,25 +140,26 @@ def make_prod_data(raw_data): rounding = 3 sum_value = {"prod": 0, "surplus": 0, "auto_cons": 0} for row in raw_data: + divider = get_divider_from_row(row) data_file_lines.append( ";".join( [ # horodatage row[0].strftime("%d/%m/%Y %H:%M"), # production en watt - str(round(row[3] * 2000, rounding)), + str(round((row[3] * 2000)/divider, rounding)), # production en kwh - str(round(row[3], rounding)), + str(round(row[3]/divider, rounding)), # surplus - str(round(row[2], rounding)), + str(round(row[2]/divider, rounding)), # autocons - str(round(row[1], rounding)), + str(round(row[1]/divider, rounding)), ] ) ) - sum_value["prod"] += round(row[3], rounding) - sum_value["surplus"] += round(row[2], rounding) - sum_value["auto_cons"] += round(row[1], rounding) + sum_value["prod"] += round(row[3]/divider, rounding) + sum_value["surplus"] += round(row[2]/divider, rounding) + sum_value["auto_cons"] += round(row[1]/divider, rounding) tot = ";".join( [ @@ -211,3 +213,15 @@ def get_partner_name_from_id(operation, partner_id): """ return operation.env["res.partner"].browse(int(partner_id)).name + + +def get_divider_from_row(row): + """ + Get divider from a data row + divider depends of the timestep + by default return 2000 (timestep of 30 min) + """ + + if row[-1] == 15: + return 4000 + return 2000