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

Add date convertion for total power

parent 39abe6ef
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!116.0 add date
# Copyright 2023 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import pytz
from datetime import datetime, time
from dateutil.relativedelta import relativedelta
from odoo import _, models
from odoo.exceptions import ValidationError, UserError
from odoo.osv import expression
......@@ -47,9 +46,10 @@ class AccOperation(models.Model):
# Get last date slot recorded
last_record = self.get_last_cdc_record()
start_date, end_date = self.get_interval("month", last_record)
end_date_mounth = end_date + relativedelta(days=1)
query = """
SELECT
date_trunc('month', cdc.date_slot) AS date_slot,
date_trunc('month', cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris') AS date_slot,
(SUM( (CASE
WHEN cdc.comp_data_type = 'cons' THEN cdc.power
ELSE 0 END) )/2) / 1000 as conso_tot,
......@@ -66,13 +66,13 @@ class AccOperation(models.Model):
WHERE
cdc.acc_operation_id = %s
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
GROUP BY date_trunc('month', cdc.date_slot);
AND cdc.date_slot < %s
GROUP BY date_trunc('month', cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris');
"""
query_params = (
self.id,
start_date,
end_date,
self._convert_time(start_date),
self._convert_time(end_date_mounth),
)
self.env.cr.execute(query, query_params)
raw_data = self.env.cr.fetchone()
......@@ -159,7 +159,7 @@ class AccOperation(models.Model):
step = "hour"
step_display_curve = "hour"
# Calculate delta between 2 dates
delta = (end_date - start_date).days
delta = (self._convert_time(end_date) - self._convert_time(start_date)).days
if delta < 32:
step_display_curve = "day"
display_hourly_curves = True
......@@ -197,7 +197,7 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc(%s, cdc.date_slot) AS date_slot,
date_trunc(%s, cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris') AS date_slot,
(SUM( (CASE
WHEN cdc.comp_data_type = 'cons'
THEN cdc.power ELSE 0 END) )/2) / 1000 as cons,
......@@ -217,7 +217,7 @@ class AccOperation(models.Model):
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
AND cdc.partner_id IN %s
GROUP BY date_trunc(%s, cdc.date_slot)
GROUP BY date_trunc(%s, cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -266,7 +266,7 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc('day', cdc.date_slot) AS date_slot,
date_trunc('day', cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris') AS date_slot,
(SUM( (CASE
WHEN cdc.comp_data_type = 'autocons'
THEN cdc.power ELSE 0 END) )/2) / 1000 as autocons,
......@@ -284,7 +284,7 @@ class AccOperation(models.Model):
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
AND cdc.partner_id IN %s
GROUP BY date_trunc('day', cdc.date_slot)
GROUP BY date_trunc('day', cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -329,7 +329,7 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc(%s, cdc.date_slot) AS date_slot,
date_trunc(%s, cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris') AS date_slot,
((SUM((CASE
WHEN cdc.comp_data_type = 'prod' THEN cdc.power
ELSE 0 END))
......@@ -348,7 +348,7 @@ class AccOperation(models.Model):
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
AND cdc.partner_id IN %s
GROUP BY date_trunc(%s, cdc.date_slot)
GROUP BY date_trunc(%s, cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -393,7 +393,7 @@ class AccOperation(models.Model):
query = """
SELECT
date_trunc('day', cdc.date_slot) AS date_slot,
date_trunc('day', cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris') AS date_slot,
((SUM((CASE
WHEN cdc.comp_data_type = 'prod' THEN cdc.power
ELSE 0 END))
......@@ -412,7 +412,7 @@ class AccOperation(models.Model):
AND cdc.date_slot >= %s
AND cdc.date_slot <= %s
AND cdc.partner_id IN %s
GROUP BY date_trunc('day', cdc.date_slot)
GROUP BY date_trunc('day', cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
ORDER BY date_slot ASC;
"""
query_params = (
......@@ -470,8 +470,10 @@ class AccOperation(models.Model):
"""
self.ensure_one()
result_graph = {}
start_date = datetime.strptime(start_date, "%d/%m/%Y")
end_date = datetime.combine(datetime.strptime(end_date, "%d/%m/%Y"), time.max)
start_date = self._convert_time(datetime.strptime(start_date, "%d/%m/%Y"))
end_date = self._convert_time(
datetime.combine(datetime.strptime(end_date, "%d/%m/%Y"), time.max)
)
display_hourly_curves, step_curve, step_display_curve = self.get_step_from_date(
start_date=start_date, end_date=end_date
)
......@@ -528,3 +530,11 @@ class AccOperation(models.Model):
}
)
return result_graph
def _convert_time(self, intitial_time):
return (
pytz.timezone("Europe/Paris")
.localize(intitial_time)
.astimezone(pytz.UTC)
.replace(tzinfo=None)
)
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