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

Rebuild function

parent ca5d0fda
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -240,6 +240,50 @@ class EnercoopOperation(models.Model): ...@@ -240,6 +240,50 @@ class EnercoopOperation(models.Model):
} }
return cdc_jour return cdc_jour
def get_cdc_by_query_histo_cons(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_histo = []
data_allocons_histo = []
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 = '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)
self.env.cr.execute(query, query_params)
raw_data = self.env.cr.fetchall()
for row in raw_data:
data_autocons_histo.append(int(row[1]))
data_allocons_histo.append(int(row[2]))
label_histo.append(row[0])
cdc_jour = {
'autocons_histo': data_autocons_histo,
'allocons_histo': data_allocons_histo,
'label_histo': label_histo,
}
return cdc_jour
def get_cdc_by_query_prod(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 Fonction permettant de récupérer les données pour la
...@@ -463,7 +507,7 @@ class EnercoopOperation(models.Model): ...@@ -463,7 +507,7 @@ class EnercoopOperation(models.Model):
data_autocons_histo.append(int(row[1])) data_autocons_histo.append(int(row[1]))
data_surplus_histo.append(int(row[2])) data_surplus_histo.append(int(row[2]))
data_allocons_histo.append(int(row[3])) data_allocons_histo.append(int(row[3]))
data_allocons_histo.append(int(row[3])) data_autocons_prod_histo.append(int(row[4]))
label_histo.append(row[0]) label_histo.append(row[0])
cdc_jour = { cdc_jour = {
...@@ -940,10 +984,51 @@ class EnercoopOperation(models.Model): ...@@ -940,10 +984,51 @@ class EnercoopOperation(models.Model):
}) })
return result_graph return result_graph
# ------------------------------------------------------ # ------------------------------------------------------
# Functions to manage route # Functions to manage route
# ------------------------------------------------------ # ------------------------------------------------------
def graph_view_conso(self, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None): def build_graph_data_options(self, chart_data, step_display_courbe=None, scale=None, step_courbe=None):
result_graph = {}
result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe)
result_graph.update(result_graph_line)
result_graph_histo = self.chart_data_histo_prod(chart_data, step_display_courbe, scale)
result_graph.update(result_graph_histo)
result_graph_donuts = self.chart_data_donuts_prod(chart_data, step_courbe)
result_graph.update(result_graph_donuts)
result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
result_graph.update(result_graph_line)
result_graph_histo = self.chart_data_histo_cons(chart_data, step_display_courbe, scale)
result_graph.update(result_graph_histo)
result_graph_donuts = self.chart_data_donuts_cons(chart_data, step_courbe)
result_graph.update(result_graph_donuts)
return result_graph
def build_graph_data_options_prod(self, chart_data, step_display_courbe=None, scale=None, step_courbe=None):
result_graph = {}
result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe)
result_graph.update(result_graph_line)
result_graph_histo = self.chart_data_histo_prod(chart_data, step_display_courbe, scale)
result_graph.update(result_graph_histo)
result_graph_donuts = self.chart_data_donuts_prod(chart_data, step_courbe)
result_graph.update(result_graph_donuts)
return result_graph
def build_graph_data_options_cons(self, chart_data, step_display_courbe=None, scale=None, step_courbe=None):
result_graph = {}
result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
result_graph.update(result_graph_line)
result_graph_histo = self.chart_data_histo_cons(chart_data, step_display_courbe, scale)
result_graph.update(result_graph_histo)
result_graph_donuts = self.chart_data_donuts_cons(chart_data, step_courbe)
result_graph.update(result_graph_donuts)
return result_graph
# ------------------------------------------------------
# Functions to manage route
# ------------------------------------------------------
def graph_view_global(self, scale=None, date_start=None, date_end=None):
""" """
Fonction appelée pour l'affichage des courbes consommation Fonction appelée pour l'affichage des courbes consommation
sur le portail sur le portail
...@@ -957,31 +1042,16 @@ class EnercoopOperation(models.Model): ...@@ -957,31 +1042,16 @@ class EnercoopOperation(models.Model):
if not date_start and not date_end: if not date_start and not date_end:
date_start, date_end = self.get_last_day(scale) date_start, date_end = self.get_last_day(scale)
# Get the step to display courbe in chart counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_delivery_operation_ids.ids)]).ids
step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
# New code implementation step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
# enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None # Get the data to display in chart
if prm_id: chart_data = self.get_cdc(
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) scale=scale, step_courbe=step_courbe, date_start=date_start,
elif partner_id: date_end=date_end, prm_ids=counter_ids)
enercoop_counter_ids = self.env['enercoop.counter'].search([('partner_id', '=', partner_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)])
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)
# Build the chart with data and options # Build the chart with data and options
result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe) result_graph = self.build_graph_data_options(chart_data, step_display_courbe=step_display_courbe, scale=scale, step_courbe=step_courbe)
result_graph.update(result_graph_line)
result_graph_histo = self.chart_data_histo_cons(chart_data, step_display_courbe, scale)
result_graph.update(result_graph_histo)
result_graph_donuts = self.chart_data_donuts_cons(chart_data, step_courbe)
result_graph.update(result_graph_donuts)
date_deb, date_max = self.get_last_day('day') date_deb, date_max = self.get_last_day('day')
date_max = date_max.strftime("%d/%m/%Y") date_max = date_max.strftime("%d/%m/%Y")
...@@ -997,44 +1067,80 @@ class EnercoopOperation(models.Model): ...@@ -997,44 +1067,80 @@ class EnercoopOperation(models.Model):
}) })
return result_graph return result_graph
def graph_view_prod(self, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None): # ------------------------------------------------------
# Functions to manage route
# ------------------------------------------------------
def get_graph_data(self, type=None, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None):
if scale:
graph_datas = self.graph_view_type(type, scale, prm_id, partner_id)
elif date_start and date_end:
graph_datas = self.graph_view_type(
type=type,
date_start=datetime.strptime(date_start, '%Y-%m-%d'),
date_end=datetime.strptime(date_end, '%Y-%m-%d'),
prm_id=prm_id,
partner_id=partner_id
)
else:
graph_datas = self.graph_view_type(
type=type, scale='week', prm_id=prm_id, partner_id=partner_id)
if prm_id:
graph_datas['name'] = "PRM n° " + self.env['enercoop.counter'].sudo().browse(prm_id).name
if partner_id:
graph_datas['name'] = self.env['res.partner'].sudo().browse(partner_id).name
graph_datas['prm_id'] = prm_id
graph_datas['partner_id'] = partner_id
return graph_datas
def graph_view_type(self, type=None, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None):
""" """
Fonction appelée pour l'affichage des courbes production Fonction appelée pour l'affichage des courbes consommation
sur le portail sur le portail
:param scale: type d'affichage des graphes :param scale: type d'affichage des graphes
(day/week/month/semestre/year) (day/week/month/semestre/year)
défini par le clic bouton défini par le clic bouton
:return: dictionnaire pour la construction des graphes :return: dictionnaire pour la construction des graphes
""" """
result_graph = {} result_graph = {}
# Get the step to display courbe in chart if scale:
if not date_start and not date_end:
date_start, date_end = self.get_last_day(scale) date_start, date_end = self.get_last_day(scale)
# Get the step to display curve in chart
step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end) step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
# New code implementation # Get PRM ids
# enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
if prm_id: if prm_id:
enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id)
elif partner_id: elif partner_id:
enercoop_counter_ids = self.env['enercoop.counter'].search([('partner_id', '=', partner_id)]) enercoop_counter_ids = self.env['enercoop.counter'].search([('partner_id', '=', partner_id)])
else: else:
# enercoop_counter_op_ids = self.enercoop_injection_operation_ids if type == 'cons':
enercoop_counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_injection_operation_ids.ids)]) enercoop_counter_ids = self.env['enercoop.counter'].search(
[('enercoop_operation_ids', 'in', self.enercoop_delivery_operation_ids.ids)])
else:
enercoop_counter_ids = self.env['enercoop.counter'].search(
[('enercoop_operation_ids', 'in', self.enercoop_injection_operation_ids.ids)])
if type == 'cons':
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_cons('day', date_start, date_end, enercoop_counter_ids)
chart_data.update(chart_data_histo)
# Build the chart with data and options
result_graph = self.build_graph_data_options_cons(chart_data, step_display_courbe=step_display_courbe,
scale=scale, step_courbe=step_courbe)
else:
chart_data = self.get_cdc_by_query_prod(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': if scale == 'week':
chart_data_histo = self.get_cdc_by_query_histo_prod('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) chart_data.update(chart_data_histo)
result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe) # Build the chart with data and options
result_graph.update(result_graph_line) result_graph = self.build_graph_data_options_prod(chart_data, step_display_courbe=step_display_courbe,
result_graph_histo = self.chart_data_histo_prod(chart_data, step_display_courbe, scale) scale=scale, step_courbe=step_courbe)
result_graph.update(result_graph_histo)
result_graph_donuts = self.chart_data_donuts_prod(chart_data, step_courbe)
result_graph.update(result_graph_donuts)
date_deb, date_max = self.get_last_day('day') date_deb, date_max = self.get_last_day('day')
date_max = date_max.strftime("%d/%m/%Y") date_max = date_max.strftime("%d/%m/%Y")
date_min = self.get_first_day() date_min = self.get_first_day()
...@@ -1047,5 +1153,4 @@ class EnercoopOperation(models.Model): ...@@ -1047,5 +1153,4 @@ class EnercoopOperation(models.Model):
'date_max': date_max, 'date_max': date_max,
'scale': scale 'scale': scale
}) })
return result_graph return result_graph
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