Skip to content
Extraits de code Groupes Projets
Valider 7a47b4e0 rédigé par Julien - Le Filament's avatar Julien - Le Filament
Parcourir les fichiers

[UPD] handle 15 minutes steps in cdc

parent bf5f513a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!5[UPD] handle 15 minutes steps in cdc
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
from datetime import datetime from datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from ..tools.export_cdc import get_divider_from_row
from odoo import _, api, models from odoo import _, api, models
from odoo.exceptions import ValidationError from odoo.exceptions import ValidationError
from odoo.osv import expression from odoo.osv import expression
...@@ -36,10 +36,10 @@ class AccEnedisCdc(models.Model): ...@@ -36,10 +36,10 @@ class AccEnedisCdc(models.Model):
step_display_curve = "hour" step_display_curve = "hour"
# Calculate delta between 2 dates # Calculate delta between 2 dates
delta = (end_date - start_date).days delta = (end_date - start_date).days
if delta > 1 and delta <= 31: if 1 < delta <= 31:
step_display_curve = "day" step_display_curve = "day"
display_hourly_curves = True display_hourly_curves = True
elif delta > 31 and delta <= 366: elif 31 < delta <= 366:
step = "month" step = "month"
step_display_curve = "month" step_display_curve = "month"
elif delta > 366: elif delta > 366:
...@@ -193,7 +193,7 @@ class AccEnedisCdc(models.Model): ...@@ -193,7 +193,7 @@ class AccEnedisCdc(models.Model):
if curve_type in ("cons", "autocons", "prod", "surplus"): if curve_type in ("cons", "autocons", "prod", "surplus"):
result += f""" result += f"""
, (SUM(CASE WHEN cdc.comp_data_type = '{curve_type}' , (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": elif curve_type == "allocons":
result += """ result += """
...@@ -202,7 +202,7 @@ class AccEnedisCdc(models.Model): ...@@ -202,7 +202,7 @@ class AccEnedisCdc(models.Model):
THEN cdc.power ELSE 0 END) THEN cdc.power ELSE 0 END)
- SUM(CASE - SUM(CASE
WHEN cdc.comp_data_type = 'autocons' 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": elif curve_type == "autoprod":
result += """ result += """
...@@ -211,8 +211,12 @@ class AccEnedisCdc(models.Model): ...@@ -211,8 +211,12 @@ class AccEnedisCdc(models.Model):
THEN cdc.power ELSE 0 END) THEN cdc.power ELSE 0 END)
- SUM(CASE - SUM(CASE
WHEN cdc.comp_data_type = 'surplus' 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 return result
@api.model @api.model
...@@ -293,7 +297,8 @@ class AccEnedisCdc(models.Model): ...@@ -293,7 +297,8 @@ class AccEnedisCdc(models.Model):
raise ValidationError(_("Incorrect date_slot in GROUP BY section")) raise ValidationError(_("Incorrect date_slot in GROUP BY section"))
return f""" return f"""
GROUP BY date_trunc('{date_slot}', 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 @api.model
...@@ -381,11 +386,17 @@ class AccEnedisCdc(models.Model): ...@@ -381,11 +386,17 @@ class AccEnedisCdc(models.Model):
) )
for row in raw_data: 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]) label.append(row[0])
data_cons.append({"x": row[0], "y": round(row[1], 2)}) data_cons.append({"x": row[0], "y": round(row[1] / divider, 2)})
data_autocons.append({"x": row[0], "y": round(row[2], 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], 2)}) data_allocons.append(
data_prod.append({"x": row[0], "y": round(row[3], 2)}) {"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 = { cdc_cons = {
"label": label, "label": label,
...@@ -437,8 +448,9 @@ class AccEnedisCdc(models.Model): ...@@ -437,8 +448,9 @@ class AccEnedisCdc(models.Model):
self.env.cr.execute(query) self.env.cr.execute(query)
raw_data = self.env.cr.fetchall() raw_data = self.env.cr.fetchall()
for row in raw_data: for row in raw_data:
data_autocons_histo.append(round(row[1], 2)) divider = get_divider_from_row(row)
data_allocons_histo.append(round(row[2], 2)) data_autocons_histo.append(round(row[1]/divider, 2))
data_allocons_histo.append(round(row[2]/divider, 2))
label_histo.append(row[0]) label_histo.append(row[0])
cdc_cons = { cdc_cons = {
...@@ -524,9 +536,10 @@ class AccEnedisCdc(models.Model): ...@@ -524,9 +536,10 @@ class AccEnedisCdc(models.Model):
) )
for row in raw_data: for row in raw_data:
divider = get_divider_from_row(row)
label.append(row[0]) label.append(row[0])
data_autocons.append({"x": row[0], "y": round(row[1], 2)}) data_autocons.append({"x": row[0], "y": round(row[1]/divider, 2)})
data_surplus.append({"x": row[0], "y": round(row[2], 2)}) data_surplus.append({"x": row[0], "y": round(row[2]/divider, 2)})
cdc_prod = { cdc_prod = {
"label": label, "label": label,
...@@ -570,9 +583,10 @@ class AccEnedisCdc(models.Model): ...@@ -570,9 +583,10 @@ class AccEnedisCdc(models.Model):
self.env.cr.execute(query) self.env.cr.execute(query)
raw_data = self.env.cr.fetchall() raw_data = self.env.cr.fetchall()
for row in raw_data: for row in raw_data:
divider = get_divider_from_row(row)
label_histo.append(row[0]) label_histo.append(row[0])
data_autocons_prod_histo.append(round(row[1], 2)) data_autocons_prod_histo.append(round(row[1]/divider, 2))
data_surplus_histo.append(round(row[2], 2)) data_surplus_histo.append(round(row[2]/divider, 2))
cdc_jour = { cdc_jour = {
"label_histo": label_histo, "label_histo": label_histo,
......
...@@ -94,26 +94,27 @@ def make_cons_data(raw_data): ...@@ -94,26 +94,27 @@ def make_cons_data(raw_data):
data_file_lines = [] data_file_lines = []
rounding = 3 rounding = 3
for row in raw_data: for row in raw_data:
divider = get_divider_from_row(row)
data_file_lines.append( data_file_lines.append(
";".join( ";".join(
[ [
# horodatage # horodatage
row[0].strftime("%d/%m/%Y %H:%M"), row[0].strftime("%d/%m/%Y %H:%M"),
# consommation en watt # consommation en watt
str(round(row[1] * 2000, rounding)), str(round((row[1] * 2000)/divider, rounding)),
# consommation en kwh # consommation en kwh
str(round(row[1], rounding)), str(round(row[1]/divider, rounding)),
# allocons # allocons
str(round(row[3], rounding)), str(round(row[3]/divider, rounding)),
# autocons # autocons
str(round(row[2], rounding)), str(round(row[2]/divider, rounding)),
] ]
) )
) )
sum_value["cons"] += round(row[1], rounding) sum_value["cons"] += round(row[1]/divider, rounding)
sum_value["allo_cons"] += round(row[3], rounding) sum_value["allo_cons"] += round(row[3]/divider, rounding)
sum_value["auto_cons"] += round(row[2], rounding) sum_value["auto_cons"] += round(row[2]/divider, rounding)
tot = ";".join( tot = ";".join(
[ [
...@@ -139,25 +140,26 @@ def make_prod_data(raw_data): ...@@ -139,25 +140,26 @@ def make_prod_data(raw_data):
rounding = 3 rounding = 3
sum_value = {"prod": 0, "surplus": 0, "auto_cons": 0} sum_value = {"prod": 0, "surplus": 0, "auto_cons": 0}
for row in raw_data: for row in raw_data:
divider = get_divider_from_row(row)
data_file_lines.append( data_file_lines.append(
";".join( ";".join(
[ [
# horodatage # horodatage
row[0].strftime("%d/%m/%Y %H:%M"), row[0].strftime("%d/%m/%Y %H:%M"),
# production en watt # production en watt
str(round(row[3] * 2000, rounding)), str(round((row[3] * 2000)/divider, rounding)),
# production en kwh # production en kwh
str(round(row[3], rounding)), str(round(row[3]/divider, rounding)),
# surplus # surplus
str(round(row[2], rounding)), str(round(row[2]/divider, rounding)),
# autocons # autocons
str(round(row[1], rounding)), str(round(row[1]/divider, rounding)),
] ]
) )
) )
sum_value["prod"] += round(row[3], rounding) sum_value["prod"] += round(row[3]/divider, rounding)
sum_value["surplus"] += round(row[2], rounding) sum_value["surplus"] += round(row[2]/divider, rounding)
sum_value["auto_cons"] += round(row[1], rounding) sum_value["auto_cons"] += round(row[1]/divider, rounding)
tot = ";".join( tot = ";".join(
[ [
...@@ -211,3 +213,15 @@ def get_partner_name_from_id(operation, partner_id): ...@@ -211,3 +213,15 @@ def get_partner_name_from_id(operation, partner_id):
""" """
return operation.env["res.partner"].browse(int(partner_id)).name 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
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter