Skip to content
Extraits de code Groupes Projets
Valider b414ed14 rédigé par Juliana's avatar Juliana
Parcourir les fichiers

[UPD]Update curve calcul

parent 55f44cbd
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -172,12 +172,10 @@ class EnercoopOperation(models.Model):
elif delta <= 7:
step_display_courbe = 'day'
step = 'hour'
elif delta <= 181:
# elif delta <= 181:
else:
step = 'month'
step_display_courbe = 'month'
else:
step = 'year'
step_display_courbe = 'year'
return step, step_display_courbe
......@@ -239,10 +237,10 @@ class EnercoopOperation(models.Model):
}
return cdc_jour
def get_cdc_by_query(self, slot_type, date_start, date_end, prm_ids=None):
def get_cdc_by_query_prod(self, slot_type, date_start, date_end, prm_ids=None):
"""
Fonction permettant de récupérer les données pour la
construction des chart pour une ou des opérations données
construction des chart pour une ou des opérations données pour les consommateurs
:param slot_type: type de slot pour la query ('month' ou 'hour' ou 'year')
date_start: date début
date_end: date de fin
......@@ -251,42 +249,133 @@ class EnercoopOperation(models.Model):
"""
label = []
data_autocons = []
data_allocons = []
data_cons = []
data_prod = []
data_surplus = []
label_histo = []
data_autocons_histo = []
data_surplus_histo = []
if prm_ids:
query = """
SELECT
date_trunc(%s, A.date_slot) AS date_slot,
(SUM((CASE WHEN comp_data_type = 'cons' THEN A.power ELSE 0 END)) / 2) / 1000 as cons,
(SUM((CASE WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons,
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) / 2) / 1000 as prod,
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as surplus,
((SUM((CASE WHEN comp_data_type = 'cons' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as allocons
((SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons,
(SUM((CASE WHEN comp_data_type = 'prod' AND A.enercoop_counter_id IN %s THEN A.power ELSE 0 END)) / 2) /
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) *
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 END)) / 2) / 1000 as surplus
FROM enercoop_enedis_cdc A
JOIN enercoop_operation E ON E.id = A.enercoop_operation_id
WHERE A.enercoop_operation_id IS NOT NULL
AND A.enercoop_operation_id IN %s
AND A.enercoop_counter_id IN %s
AND A.date_slot >= %s
AND A.date_slot < %s
GROUP BY date_trunc(%s, A.date_slot)
ORDER BY date_slot ASC;
"""
query_params = (slot_type, tuple(self.ids), tuple(prm_ids.ids), date_start, date_end, slot_type)
query_params = (slot_type, tuple(prm_ids.ids), tuple(self.ids), date_start, date_end, slot_type)
self.env.cr.execute(query, query_params)
raw_data = self.env.cr.fetchall()
for row in raw_data:
if slot_type == 'month' or slot_type == 'year':
data_autocons.append(int(row[1]))
data_surplus.append(int(row[2]))
label.append(row[0])
elif slot_type == 'day':
data_autocons_histo.append(int(row[1]))
data_surplus_histo.append(int(row[2]))
label_histo.append(row[0])
else:
data_autocons.append({'x': row[0], 'y': int(row[1])})
data_surplus.append({'x': row[0], 'y': int(row[2])})
label.append(row[0])
cdc_jour = {
'autocons_prod': data_autocons,
'label': label,
'surplus': data_surplus,
'autocons_histo': data_autocons_histo,
'label_histo': label_histo,
'surplus_histo': data_surplus_histo,
}
return cdc_jour
def get_cdc_by_query_histo_prod(self, slot_type, date_start, date_end, prm_ids=None):
"""
Fonction permettant de récupérer les données pour la
construction des chart pour une ou des opérations données pour les consommateurs
:param slot_type: type de slot pour la query ('month' ou 'hour' ou 'year')
date_start: date début
date_end: date de fin
:return: un dictionnaire de données
(labels et data pour les charts à afficher)
"""
label_histo = []
data_autocons_prod_histo = []
data_surplus_histo = []
query = """
SELECT
date_trunc(%s, A.date_slot) AS date_slot,
((SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons,
(SUM((CASE WHEN comp_data_type = 'prod' AND A.enercoop_counter_id IN %s THEN A.power ELSE 0 END)) / 2) /
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) *
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 END)) / 2) / 1000 as surplus
FROM enercoop_enedis_cdc A
JOIN enercoop_operation E ON E.id = A.enercoop_operation_id
WHERE A.enercoop_operation_id IS NOT NULL
AND A.enercoop_operation_id IN %s
AND A.date_slot >= %s
AND A.date_slot < %s
GROUP BY date_trunc(%s, A.date_slot)
ORDER BY date_slot ASC;
"""
query_params = (slot_type, tuple(prm_ids.ids), tuple(self.ids), date_start, date_end, slot_type)
self.env.cr.execute(query, query_params)
raw_data = self.env.cr.fetchall()
for row in raw_data:
data_autocons_prod_histo.append(int(row[1]))
data_surplus_histo.append(int(row[2]))
label_histo.append(row[0])
cdc_jour = {
'autocons_prod_histo': data_autocons_prod_histo,
'label_histo': label_histo,
'surplus_histo': data_surplus_histo,
}
return cdc_jour
def get_cdc_by_query(self, slot_type, date_start, date_end, prm_ids=None):
"""
Fonction permettant de récupérer les données pour la
construction des chart pour une ou des opérations données
:param slot_type: type de slot pour la query ('month' ou 'hour' ou 'year')
date_start: date début
date_end: date de fin
:return: un dictionnaire de données
(labels et data pour les charts à afficher)
"""
label = []
data_autocons = []
data_autocons_prod = []
data_allocons = []
data_cons = []
data_prod = []
data_surplus = []
# if prm_ids:
query = """
SELECT
date_trunc(%s, A.date_slot) AS date_slot,
(SUM((CASE WHEN comp_data_type = 'cons' THEN A.power ELSE 0 END)) / 2) / 1000 as cons,
(SUM((CASE WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons,
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) / 2) / 1000 as prod,
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as surplus,
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) / 2) / 1000 as prod_s,
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) / 2) /
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) *
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 END)) / 2) / 1000 as surplus,
((SUM((CASE WHEN comp_data_type = 'cons' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as allocons
WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as allocons,
((SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons_prod
FROM enercoop_enedis_cdc A
JOIN enercoop_operation E ON E.id = A.enercoop_operation_id
WHERE A.enercoop_operation_id IS NOT NULL
......@@ -306,6 +395,7 @@ class EnercoopOperation(models.Model):
data_prod.append(int(row[3]))
data_surplus.append(int(row[4]))
data_allocons.append(int(row[5]))
data_autocons_prod.append(int(row[6]))
label.append(row[0])
else:
data_cons.append({'x': row[0], 'y': int(row[1])})
......@@ -313,10 +403,12 @@ class EnercoopOperation(models.Model):
data_prod.append({'x': row[0], 'y': int(row[3])})
data_surplus.append({'x': row[0], 'y': int(row[4])})
data_allocons.append({'x': row[0], 'y': int(row[5])})
data_autocons_prod.append({'x': row[0], 'y': int(row[6])})
label.append(row[0])
cdc_jour = {
'autocons': data_autocons,
'autocons_prod': data_autocons_prod,
'cons': data_cons,
'prod': data_prod,
'surplus': data_surplus,
......@@ -337,36 +429,21 @@ class EnercoopOperation(models.Model):
"""
label_histo = []
data_autocons_histo = []
data_autocons_prod_histo = []
data_allocons_histo = []
data_surplus_histo = []
if prm_ids:
query = """
SELECT
date_trunc(%s, A.date_slot) AS date_slot,
(SUM((CASE WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons,
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as surplus,
((SUM((CASE WHEN comp_data_type = 'cons' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as allocons
FROM enercoop_enedis_cdc A
JOIN enercoop_operation E ON E.id = A.enercoop_operation_id
WHERE A.enercoop_operation_id IS NOT NULL
AND A.enercoop_operation_id IN %s
AND A.enercoop_counter_id IN %s
AND A.date_slot >= %s
AND A.date_slot < %s
GROUP BY date_trunc(%s, A.date_slot)
ORDER BY date_slot ASC;
"""
query_params = (slot_type, tuple(self.ids), tuple(prm_ids.ids), date_start, date_end, slot_type)
else:
query = """
SELECT
date_trunc(%s, A.date_slot) AS date_slot,
(SUM((CASE WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons,
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as surplus,
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) / 2) /
(SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) *
(SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 END)) / 2) / 1000 as surplus,
((SUM((CASE WHEN comp_data_type = 'cons' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as allocons
WHEN comp_data_type = 'autocons' THEN A.power ELSE 0 END)) / 2) / 1000 as allocons,
((SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 0 END)) - SUM(CASE
WHEN comp_data_type = 'surplus' THEN A.power ELSE 0 END)) / 2) / 1000 as autocons_prod
FROM enercoop_enedis_cdc A
JOIN enercoop_operation E ON E.id = A.enercoop_operation_id
WHERE A.enercoop_operation_id IS NOT NULL
......@@ -383,12 +460,14 @@ class EnercoopOperation(models.Model):
data_autocons_histo.append(int(row[1]))
data_surplus_histo.append(int(row[2]))
data_allocons_histo.append(int(row[3]))
data_allocons_histo.append(int(row[3]))
label_histo.append(row[0])
cdc_jour = {
'autocons_histo': data_autocons_histo,
'surplus_histo': data_surplus_histo,
'allocons_histo': data_allocons_histo,
'autocons_prod_histo': data_autocons_prod_histo,
'label_histo': label_histo,
}
return cdc_jour
......@@ -462,6 +541,20 @@ class EnercoopOperation(models.Model):
}
},
}
result['line_chart_prod_prm'] = {
'type': 'line',
'data': {
'labels': chart_data['label'],
'datasets': [
{
'label': 'Production solaire',
'data': chart_data['prod'],
'backgroundColor': 'rgba(244, 165, 25, 0)',
'borderColor': 'rgba(244, 165, 25, 1)',
},
],
},
}
return result
def chart_data_histo_cons(self, chart_data, scale, scale_spe):
......@@ -604,7 +697,7 @@ class EnercoopOperation(models.Model):
},
{
'label': 'Autoconso',
'data': chart_data['autocons'],
'data': chart_data['autocons_prod'],
'backgroundColor': 'rgba(91, 154, 81, 0.4)',
'borderColor': 'rgba(91, 154, 81, 1)',
'borderWidth': 2,
......@@ -642,20 +735,6 @@ class EnercoopOperation(models.Model):
}
},
}
result['line_chart_prod_prm'] = {
'type': 'line',
'data': {
'labels': chart_data['label'],
'datasets': [
{
'label': 'Production solaire',
'data': chart_data['prod'],
'backgroundColor': 'rgba(244, 165, 25, 0)',
'borderColor': 'rgba(244, 165, 25, 1)',
},
],
},
}
return result
def chart_data_donuts_prod(self, chart_data, scale):
......@@ -668,10 +747,10 @@ class EnercoopOperation(models.Model):
result = {}
if scale == 'hour':
sum_res1 = sum(int(item['y']) for item in chart_data['autocons'])
sum_res1 = sum(int(item['y']) for item in chart_data['autocons_prod'])
sum_res2 = sum(int(item['y']) for item in chart_data['surplus'])
else:
sum_res1 = sum(chart_data['autocons'])
sum_res1 = sum(chart_data['autocons_prod'])
sum_res2 = sum(chart_data['surplus'])
tot_res = sum_res1 + sum_res2
......@@ -705,11 +784,11 @@ class EnercoopOperation(models.Model):
result = {}
if scale_spe == 'week':
data_autocons = chart_data['autocons_histo']
data_autocons = chart_data['autocons_prod_histo']
data_surplus = chart_data['surplus_histo']
data_label = chart_data['label_histo']
else:
data_autocons = chart_data['autocons']
data_autocons = chart_data['autocons_prod']
data_surplus = chart_data['surplus']
data_label = chart_data['label']
......@@ -784,10 +863,10 @@ class EnercoopOperation(models.Model):
:return: un dictionnaire de données
(labels et data pour les charts à afficher)
"""
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_ids) if prm_ids else None
enercoop_counter_ids = self.env['enercoop.counter'].search([])
chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
if scale == 'week':
chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
chart_data.update(chart_data_histo)
......@@ -813,10 +892,13 @@ class EnercoopOperation(models.Model):
if first_day and last_day:
date_start = fields.Datetime.to_datetime(first_day)
date_end = fields.Datetime.to_datetime(last_day)
date_end = date_utils.end_of(date_end, 'day')
elif first_day:
date_start, date_end = operation_ids.get_last_day('day')
date_end = date_utils.end_of(date_end, 'day')
else:
date_start, date_end = operation_ids.get_last_day('month')
date_end = date_utils.end_of(date_end, 'day')
counter_ids = None
if enercoop_counter_id:
......@@ -876,18 +958,17 @@ class EnercoopOperation(models.Model):
step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
# New code implementation
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
# enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
if prm_id:
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id)
else:
# enercoop_counter_op_ids = self.enercoop_injection_operation_ids
enercoop_counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_delivery_operation_ids.ids)])
if enercoop_counter_ids:
chart_data = self.get_cdc_by_query_cons(step_courbe, date_start, date_end, enercoop_counter_ids)
if scale == 'week':
chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
chart_data.update(chart_data_histo)
else:
chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
if scale == 'week':
chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
chart_data.update(chart_data_histo)
# Build the chart with data and options
result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
......@@ -928,14 +1009,16 @@ class EnercoopOperation(models.Model):
step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
# New code implementation
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
# enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
if prm_id:
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id)
else:
# enercoop_counter_op_ids = self.enercoop_injection_operation_ids
enercoop_counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_injection_operation_ids.ids)])
# if enercoop_counter_ids:
# chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
# else:
chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
chart_data = self.get_cdc_by_query_prod(step_courbe, date_start, date_end, enercoop_counter_ids)
if scale == 'week':
chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
chart_data_histo = self.get_cdc_by_query_histo_prod('day', date_start, date_end, enercoop_counter_ids)
chart_data.update(chart_data_histo)
result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe)
......
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