diff --git a/models/acc_operation.py b/models/acc_operation.py index a6cdabd81122f926d9e476ed320981a47a1d64a4..830449a621cc7b07b6410a636254ae44d55d1dfb 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -1,6 +1,8 @@ # Copyright 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import time + from dateutil.relativedelta import relativedelta from odoo import _, api, fields, models @@ -67,39 +69,37 @@ class AccOperation(models.Model): """ # Récupère les dates du dernier mois disponible date_start, date_end = self.get_last_day("month") - # Conso Totale - conso_ids = self.env["acc.enedis.cdc"].search( - [ - ("acc_operation_id", "=", self.id), - ("comp_data_type", "=", "cons"), - ("date_slot", ">=", date_start), - ("date_slot", "<", date_end), - ] - ) - conso_tot = (sum(conso_ids.mapped("power")) / 1000) / 2 - - # Prod Totale - prod_ids = self.env["acc.enedis.cdc"].search( - [ - ("acc_operation_id", "=", self.id), - ("comp_data_type", "=", "prod"), - ("date_slot", ">=", date_start), - ("date_slot", "<", date_end), - ] - ) - prod_tot = (sum(prod_ids.mapped("power")) / 1000) / 2 - - # Auto cons Totale - autoconso_ids = self.env["acc.enedis.cdc"].search( - [ - ("acc_operation_id", "=", self.id), - ("comp_data_type", "=", "autocons"), - ("date_slot", ">=", date_start), - ("date_slot", "<", date_end), - ] + query = """ + SELECT + date_trunc('month', A.date_slot) AS date_slot, + (SUM( (CASE + WHEN comp_data_type = 'cons' THEN A.power + ELSE 0 END) )/2) / 1000 as conso_tot, + (SUM( (CASE + WHEN comp_data_type = 'prod' + THEN A.power ELSE 0 END) )/2) / 1000 as prod_tot, + (SUM( (CASE WHEN + comp_data_type = 'autocons' THEN A.power + ELSE 0 END) )/2) / 1000 as autoconso_tot + 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 = %s + AND A.date_slot >= %s + AND A.date_slot < %s + GROUP BY date_trunc('month', A.date_slot); + """ + query_params = ( + self.id, + date_start, + date_end, ) - autoconso_tot = (sum(autoconso_ids.mapped("power")) / 1000) / 2 - return conso_tot, prod_tot, autoconso_tot + self.env.cr.execute(query, query_params) + raw_data = self.env.cr.fetchall() + return raw_data[0][1], raw_data[0][2], raw_data[0][3] def get_power_install_tot(self): """ @@ -520,7 +520,7 @@ class AccOperation(models.Model): data_cons = [] data_prod = [] data_surplus = [] - + stime = time.time() # if prm_ids: query = """ SELECT @@ -557,6 +557,8 @@ class AccOperation(models.Model): 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() + print("Temps requête %s query 1", str(round(time.time() - stime, 3))) + stime2 = time.time() for row in raw_data: if slot_type == "month" or slot_type == "year": data_cons.append(int(row[1])) @@ -574,6 +576,10 @@ class AccOperation(models.Model): 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]) + print("Temps time2 %s", str(time.time())) + print("Temps boucle2 %s", str(round(time.time() - stime2, 3))) + print("Temps boucle2 %s", str(time.time() - stime2)) + print("Temps total2 %s", str(round(time.time() - stime, 3))) cdc_jour = { "autocons": data_autocons, @@ -601,6 +607,7 @@ class AccOperation(models.Model): data_autocons_prod_histo = [] data_allocons_histo = [] data_surplus_histo = [] + stime = time.time() query = """ SELECT @@ -631,12 +638,24 @@ class AccOperation(models.Model): 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() + print("Temps requête %s", str(round(time.time() - stime, 3))) + stime2 = time.time() + 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)) + print("Temps time %s", str(time.time())) + print("Temps boucle %s", str(round(time.time() - stime2, 3))) + print("Temps boucle %s", str(time.time() - stime2)) + print("Temps total %s", str(round(time.time() - stime, 3))) cdc_jour = { "autocons_histo": data_autocons_histo,