diff --git a/models/acc_enedis_cdc.py b/models/acc_enedis_cdc.py index da0aa8092f22c73554ca112c3324c6f19c33817f..de8979ab0db8ac2f2b10299b856c45a1ef226df0 100644 --- a/models/acc_enedis_cdc.py +++ b/models/acc_enedis_cdc.py @@ -3,13 +3,15 @@ from datetime import datetime from dateutil.relativedelta import relativedelta -from ..tools.export_cdc import get_divider_from_row + from odoo import _, api, models from odoo.exceptions import ValidationError from odoo.osv import expression from odoo.addons.api_connector.tools.date_utils import local_to_utc +from ..tools.export_cdc import get_divider_from_row + class AccEnedisCdc(models.Model): _inherit = "acc.enedis.cdc" @@ -358,6 +360,7 @@ class AccEnedisCdc(models.Model): slot_type, start_date, end_date, + display_hourly_curves, prm_id=None, partner_id=None, ): @@ -370,6 +373,7 @@ class AccEnedisCdc(models.Model): "year") datetime start_date: date début datetime end_date: date de fin + bool display_hourly_curves: si step différent de day alors on calcule le total sinon il est calculé dans _get_cdc_by_query_daily_histo_cons() int prm_id : PRM de soutirage à récupérer int partner_id: contact associé à la courbe @returns: resultat de la requête @@ -385,18 +389,25 @@ class AccEnedisCdc(models.Model): operation_id, slot_type, start_date, end_date, prm_id, partner_id ) + if not display_hourly_curves: + total_autocons = 0 + total_allocons = 0 + for row in raw_data: # use KW here, divider depend of the timestep # only use 30 or 15 minutes, by default its 30 minutes divider = get_divider_from_row(row) label.append(row[0]) - data_cons.append({"x": row[0], "y": row[1] / divider}) - data_autocons.append({"x": row[0], "y": row[2] / divider}) + data_cons.append({"x": row[0], "y": round(row[1] / divider, 2)}) + data_autocons.append({"x": row[0], "y": round(row[2] / divider, 2)}) data_allocons.append( - {"x": row[0], "y": (row[1] - row[2]) / divider} + {"x": row[0], "y": round((row[1] - row[2]) / divider, 2)} ) - data_prod.append({"x": row[0], "y": row[3] / divider}) + data_prod.append({"x": row[0], "y": round(row[3] / divider, 2)}) + if not display_hourly_curves: + total_autocons += row[2] / divider + total_allocons += (row[1] - row[2]) / divider cdc_cons = { "label": label, @@ -405,6 +416,11 @@ class AccEnedisCdc(models.Model): "cons": data_cons, "prod": data_prod, } + + if not display_hourly_curves: + cdc_cons["total_autocons"] = round(total_autocons, 2) + cdc_cons["total_allocons"] = round(total_allocons, 2) + return cdc_cons @api.model @@ -444,19 +460,26 @@ class AccEnedisCdc(models.Model): + self._group_clause(date_slot="day") + self._order_clause() ) - self.env.cr.execute(query) raw_data = self.env.cr.fetchall() + + total_autocons = 0 + total_allocons = 0 + for row in raw_data: divider = get_divider_from_row(row) - data_autocons_histo.append(row[1]/divider) - data_allocons_histo.append(row[2]/divider) + data_autocons_histo.append(round(row[1] / divider, 2)) + data_allocons_histo.append(round(row[2] / divider, 2)) label_histo.append(row[0]) + total_autocons += row[1] / divider + total_allocons += row[2] / divider cdc_cons = { "autocons_histo": data_autocons_histo, "allocons_histo": data_allocons_histo, "label_histo": label_histo, + "total_autocons": round(total_autocons, 2), + "total_allocons": round(total_allocons, 2), } return cdc_cons @@ -511,6 +534,7 @@ class AccEnedisCdc(models.Model): slot_type, start_date, end_date, + display_hourly_curves, prm_id=None, partner_id=None, ): @@ -522,6 +546,7 @@ class AccEnedisCdc(models.Model): "year") datetime start_date: date début datetime end_date: date de fin + bool display_hourly_curves: si step différent de day alors on calcule le total sinon il est calculé dans _get_cdc_by_query_daily_histo_prod() int prm_id : PRM d'injection à récupérer int partner_id: contact associé à la courbe :return: un dictionnaire de données @@ -535,17 +560,27 @@ class AccEnedisCdc(models.Model): operation_id, slot_type, start_date, end_date, prm_id, partner_id ) + if not display_hourly_curves: + total_autocons_prod = 0 + total_surplus = 0 + for row in raw_data: divider = get_divider_from_row(row) label.append(row[0]) - data_autocons.append({"x": row[0], "y": round(row[1]/divider, 2)}) - data_surplus.append({"x": row[0], "y": round(row[2]/divider, 2)}) + data_autocons.append({"x": row[0], "y": round(row[1] / divider, 2)}) + data_surplus.append({"x": row[0], "y": round(row[2] / divider, 2)}) + if not display_hourly_curves: + total_autocons_prod += row[1] / divider + total_surplus += row[2] / divider cdc_prod = { "label": label, "autocons_prod": data_autocons, "surplus": data_surplus, } + if not display_hourly_curves: + cdc_prod["total_autocons_prod"] = round(total_autocons_prod, 2) + cdc_prod["total_surplus"] = round(total_surplus, 2) return cdc_prod @api.model @@ -582,16 +617,24 @@ class AccEnedisCdc(models.Model): ) self.env.cr.execute(query) raw_data = self.env.cr.fetchall() + + total_autocons_prod = 0 + total_surplus = 0 + for row in raw_data: divider = get_divider_from_row(row) label_histo.append(row[0]) - data_autocons_prod_histo.append(round(row[1]/divider, 2)) - data_surplus_histo.append(round(row[2]/divider, 2)) + data_autocons_prod_histo.append(round(row[1] / divider, 2)) + data_surplus_histo.append(round(row[2] / divider, 2)) + total_autocons_prod += row[1] / divider + total_surplus += row[2] / divider cdc_jour = { "label_histo": label_histo, "autocons_prod_histo": data_autocons_prod_histo, "surplus_histo": data_surplus_histo, + "total_autocons_prod": round(total_autocons_prod, 2), + "total_surplus": round(total_surplus, 2), } return cdc_jour diff --git a/models/acc_operation.py b/models/acc_operation.py index 56027620cd9546b678fb48aa1e3fd684579ed171..0ac57cbc19cd3cd9cc0963e4be9a5f662c79a5b0 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -89,7 +89,13 @@ class AccOperation(models.Model): chart_data = {} if data_type == "cons" or data_type == "pmo": chart_data_cons = Cdc_model._get_cdc_by_query_cons( - self.id, step_curve, start_date, end_date, prm_id, partner_id + self.id, + step_curve, + start_date, + end_date, + display_hourly_curves, + prm_id, + partner_id, ) if display_hourly_curves: chart_data_histo = Cdc_model._get_cdc_by_query_daily_histo_cons( @@ -99,7 +105,13 @@ class AccOperation(models.Model): chart_data.update(chart_data_cons) if data_type == "prod" or data_type == "pmo": chart_data_prod = Cdc_model._get_cdc_by_query_prod( - self.id, step_curve, start_date, end_date, prm_id, partner_id + self.id, + step_curve, + start_date, + end_date, + display_hourly_curves, + prm_id, + partner_id, ) if display_hourly_curves: chart_data_histo = Cdc_model._get_cdc_by_query_daily_histo_prod( diff --git a/static/src/js/operation_chart.js b/static/src/js/operation_chart.js index 5b5eeac10de66979cb00efe6b449fd84d89b2a3c..c7e3b5081c07543b0212d7e1d44df27e3833867b 100644 --- a/static/src/js/operation_chart.js +++ b/static/src/js/operation_chart.js @@ -346,36 +346,11 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) { _getPieChartData: function (typeData) { var data = {}; var res = []; - var sum_res1 = 0; - var sum_res2 = 0; if (typeData === "cons") { - this.chartData.autocons.forEach((item) => { - if ("y" in item) { - sum_res1 += item.y; - } else { - sum_res1 += item; - } - }); - this.chartData.allocons.forEach((item) => { - if ("y" in item) { - sum_res2 += item.y; - } else { - sum_res2 += item; - } - }); - /* - autocons, allocons, cons, prod - - sert à construire bar et pie - - sur 2 mois on a 2 éléments donc regroupé par mois - - sert à construire la courbe - - par 7 jours on a regroupé par heure 7x24 - - par mois on a regroupé par heure 30x24 - autocons_histo, allocons_histo - - sert à construire bar et pie - - par 7 jours, regroupé par jour - - par mois, regroupé par jour - */ - res = [Math.floor(sum_res1), Math.floor(sum_res2)]; + res = [ + Math.round(this.chartData.total_autocons), + Math.round(this.chartData.total_allocons), + ]; data = { labels: ["AutoConso", "AlloConso"], datasets: [ @@ -395,21 +370,10 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) { ], }; } else { - this.chartData.autocons_prod.forEach((item) => { - if ("y" in item) { - sum_res1 += item.y; - } else { - sum_res1 += item; - } - }); - this.chartData.surplus.forEach((item) => { - if ("y" in item) { - sum_res2 += item.y; - } else { - sum_res2 += item; - } - }); - res = [Math.floor(sum_res1), Math.floor(sum_res2)]; + res = [ + Math.round(this.chartData.total_autocons_prod), + Math.round(this.chartData.total_surplus), + ]; data = { labels: ["AutoConso", "Surplus"], datasets: [ diff --git a/tools/export_cdc.py b/tools/export_cdc.py index b250261974d42971df0294298fb182476f11e313..37b07ba199d43490209c12404bdacc311bda0809 100644 --- a/tools/export_cdc.py +++ b/tools/export_cdc.py @@ -101,20 +101,20 @@ def make_cons_data(raw_data): # horodatage row[0].strftime("%d/%m/%Y %H:%M"), # consommation en watt - str(round((row[1] * 2000)/divider, rounding)), + str(round((row[1] * 2000) / divider, rounding)), # consommation en kwh - str(round(row[1]/divider, rounding)), + str(round(row[1] / divider, rounding)), # allocons - str(round(row[3]/divider, rounding)), + str(round(row[3] / divider, rounding)), # autocons - str(round(row[2]/divider, rounding)), + str(round(row[2] / divider, rounding)), ] ) ) - sum_value["cons"] += round(row[1]/divider, rounding) - sum_value["allo_cons"] += round(row[3]/divider, rounding) - sum_value["auto_cons"] += round(row[2]/divider, rounding) + sum_value["cons"] += round(row[1] / divider, rounding) + sum_value["allo_cons"] += round(row[3] / divider, rounding) + sum_value["auto_cons"] += round(row[2] / divider, rounding) tot = ";".join( [ @@ -147,19 +147,19 @@ def make_prod_data(raw_data): # horodatage row[0].strftime("%d/%m/%Y %H:%M"), # production en watt - str(round((row[3] * 2000)/divider, rounding)), + str(round((row[3] * 2000) / divider, rounding)), # production en kwh - str(round(row[3]/divider, rounding)), + str(round(row[3] / divider, rounding)), # surplus - str(round(row[2]/divider, rounding)), + str(round(row[2] / divider, rounding)), # autocons - str(round(row[1]/divider, rounding)), + str(round(row[1] / divider, rounding)), ] ) ) - sum_value["prod"] += round(row[3]/divider, rounding) - sum_value["surplus"] += round(row[2]/divider, rounding) - sum_value["auto_cons"] += round(row[1]/divider, rounding) + sum_value["prod"] += round(row[3] / divider, rounding) + sum_value["surplus"] += round(row[2] / divider, rounding) + sum_value["auto_cons"] += round(row[1] / divider, rounding) tot = ";".join( [