diff --git a/models/acc_operation.py b/models/acc_operation.py index afaf31eac75c6695d4ef3b03efbfd4902bfc75b4..6684bd14c66b126dd401e6903ccd4c07637b2c3e 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -105,87 +105,6 @@ class AccOperation(models.Model): } return action - @api.model - def graph_view(self, domain, scale, date_start, date_end, acc_counter_id=None): - """ - Fonction appelée lors du chargement de la vue Qweb - :param domain: représente le champ recherche de la vue - scale: type d'affichage des graphes - (day/week/month/semestre/year) - défini par le clic bouton - :return: dictionnaire pour la construction des graphes - """ - result_graph = {} - # Get the operations depending to the domain - operation_ids = self.env["acc.operation"].search(domain) - - if operation_ids: - # Get date start and date end depending on type of scale - if date_start and date_end: - date_start = fields.Datetime.to_datetime(date_start) - date_end = fields.Datetime.to_datetime(date_end) - if not date_start and not date_end: - date_start, date_end = operation_ids.get_last_day("month") - if not date_end: - date_start, date_end = operation_ids.get_last_day("day") - - counter_ids = None - if acc_counter_id: - counter_ids = ( - self.env["acc.counter"].search([("name", "=", acc_counter_id)]).ids - ) - - scale, step_courbe, step_display_courbe = operation_ids.get_step_from_date( - date_start=date_start, date_end=date_end, scale=scale - ) - # Get the data to display in chart - chart_data = operation_ids.get_cdc( - scale=scale, - step_courbe=step_courbe, - date_start=date_start, - date_end=date_end, - prm_ids=counter_ids, - ) - - # Build the chart with data and options - 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) - - # result_graph.update(result_graph2) - result_graph.update({"scale": scale}) - - date_end = date_end.strftime("%d/%m/%Y") - date_min = operation_ids.get_first_day() - date_min = date_min.strftime("%d/%m/%Y") - result_graph.update( - { - "date_end": date_end, - "date_min": date_min, - "date_start": date_start, - } - ) - - return result_graph - # ------------------------------------------------------ # Business methods # ------------------------------------------------------ @@ -656,157 +575,6 @@ class AccOperation(models.Model): } 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 = [] - time.time() - # 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_s, - (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_prod - FROM acc_enedis_cdc A - JOIN acc_operation E ON E.id = A.acc_operation_id - WHERE A.acc_operation_id IS NOT NULL - AND A.acc_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(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_cons.append(int(row[1])) - data_autocons.append(int(row[2])) - 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": round(row[1], 2)}) - data_autocons.append({"x": row[0], "y": round(row[2], 2)}) - data_prod.append({"x": row[0], "y": round(row[3], 2)}) - data_surplus.append({"x": row[0], "y": round(row[4], 2)}) - data_allocons.append({"x": row[0], "y": round(row[5], 2)}) - data_autocons_prod.append({"x": row[0], "y": round(row[6], 2)}) - label.append(row[0]) - - cdc_jour = { - "autocons": data_autocons, - "autocons_prod": data_autocons_prod, - "cons": data_cons, - "prod": data_prod, - "surplus": data_surplus, - "allocons": data_allocons, - "label": label, - } - return cdc_jour - - def get_cdc_by_query_histo(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_histo = [] - data_autocons_histo = [] - data_autocons_prod_histo = [] - data_allocons_histo = [] - data_surplus_histo = [] - time.time() - - 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, - ((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 acc_enedis_cdc A - JOIN acc_operation E ON E.id = A.acc_operation_id - WHERE A.acc_operation_id IS NOT NULL - AND A.acc_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(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_histo.append(round(row[1], 2)) - data_surplus_histo.append(round(row[2], 2)) - data_allocons_histo.append(round(row[3], 2)) - data_autocons_prod_histo.append(round(row[4], 2)) - label_histo.append(row[0]) - # data_autocons_histo = list(map(lambda raw: round(raw[1], 2), raw_data)) - # data_surplus_histo = list(map(lambda raw: round(raw[2], 2), raw_data)) - # data_allocons_histo = list(map(lambda raw: round(raw[3], 2), raw_data)) - # data_autocons_prod_histo = list(map(lambda raw: round(raw[4], 2), raw_data)) - # label_histo = list(map(lambda raw: raw[0], raw_data)) - - 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 - def chart_data_line_cons(self, chart_data, scale): """ Fonction retournant le dictionnaire permettant la construiction @@ -814,13 +582,6 @@ class AccOperation(models.Model): :param chart_data: données à afficher dans les chart (labels et data) :return: un dictionnaire de chart """ - # TODO: Centrer les libellés des abscisses date - # J'ai essayé en changeant le offsetGridLines mais ça ne répond pas au besoin - - # if scale == 'day': - # offsetGridLines = False - # else: - # offsetGridLines = True offsetGridLines = True result = {} @@ -1051,7 +812,7 @@ class AccOperation(models.Model): :param chart_data: données à afficher dans les chart (labels et data) :return: un dictionnaire de chart """ - offsetGridLines = True + result = {} result["line_chart_prod_line"] = { "type": "line", @@ -1092,7 +853,7 @@ class AccOperation(models.Model): "ticks": { # 'min': result.date_start, }, - "gridLines": {"offsetGridLines": offsetGridLines}, + "gridLines": {"offsetGridLines": True}, } ], "yAxes": [ @@ -1260,29 +1021,6 @@ class AccOperation(models.Model): return result - api.model - def get_cdc(self, scale, step_courbe, 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 step_courbe: Pas à prendre en courbe pour le calcul des courbes - (hour/day/week/month/year) - date_start: date début - date_end: date de fin - prm_ids: PRMs - :return: un dictionnaire de données - (labels et data pour les charts à afficher) - """ - chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, prm_ids) - - if scale == "week": - chart_data_histo = self.get_cdc_by_query_histo( - "day", date_start, date_end, prm_ids - ) - chart_data.update(chart_data_histo) - - return chart_data - # ------------------------------------------------------ # Functions to manage route # ------------------------------------------------------