diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py index d355726043a92e3e404b678c3b7b7d7a95e0133b..f30efefe445723b75334568eb8133643f4731feb 100644 --- a/models/enercoop_operation.py +++ b/models/enercoop_operation.py @@ -48,11 +48,19 @@ class EnercoopOperation(models.Model): operation_ids = self.env['enercoop.operation'].search(domain) if operation_ids: + # # Get date start and date end depending on type of scale if scale fill + # if scale: + # date_start, date_end = self.get_last_day(scale) + # + # # Get scale depending on the date start and date end + # if date_start and date_end: + # scale = self.get_scale(date_start, date_end) + # Get date start and date end depending on type of scale date_start, date_end = operation_ids.get_last_day(scale) # Get the data to display in chart - chart_data = operation_ids.get_cdc(scale, date_start, date_end) + chart_data = operation_ids.get_cdc(scale, date_start, date_end, 19) # Build the chart depending on data calculated result_graph = operation_ids.chart_data_cons(chart_data) @@ -260,7 +268,7 @@ class EnercoopOperation(models.Model): result['histo_chart_conso'] = { 'type': 'bar', 'data': { - 'labels': chart_data['label'], + 'labels': chart_data['label_histo'], 'datasets': [ { 'label': 'AutoConso', @@ -345,7 +353,7 @@ class EnercoopOperation(models.Model): result['histo_chart_prod'] = { 'type': 'bar', 'data': { - 'labels': chart_data['label'], + 'labels': chart_data['label_histo'], 'datasets': [ { 'label': 'AutoConso', @@ -364,7 +372,7 @@ class EnercoopOperation(models.Model): } return result - def get_cdc(self, type, date_start, date_end): + def get_cdc(self, type, date_start, date_end, prm_id): """ Fonction permettant de récupérer les données pour la construction des chart pour une ou des opérations données @@ -379,6 +387,7 @@ class EnercoopOperation(models.Model): cdc_jour = [] label_line_cons = [] + label_histo_cons = [] data_autocons = [] data_autocons_line = [] data_cons = [] @@ -396,35 +405,111 @@ class EnercoopOperation(models.Model): if type == 'day': type_date = 'date_slot:hour' type_date_abs = 'date_slot:day' + type_date_histo = 'date_slot:hour' elif type == 'year': type_date = 'date_slot:month' type_date_abs = 'date_slot:month' + type_date_histo = 'date_slot:month' else: type_date = 'date_slot:day' type_date_abs = 'date_slot:day' + type_date_histo = 'date_slot:day' if type == 'week': type_date = 'date_slot:hour' - # Get all data group by curves type and date - cdc_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end)], - ['power', 'enercoop_operation_id', 'date_slot'], - ['comp_data_type', type_date], orderby='comp_data_type, date_slot ASC', lazy=False) - - # Get the date for the abscissa axis - cdc_date_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end)], - ['enercoop_operation_id', 'date_slot'], - [type_date_abs], orderby='date_slot ASC', lazy=False) + enercoop_counter_id = self.env['enercoop.counter'].browse(prm_id) + + if enercoop_counter_id: + # Get all data group by curves type and date + cdc_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) + ], + ['power', 'enercoop_operation_id', 'date_slot'], + ['comp_data_type', type_date], orderby='comp_data_type, date_slot ASC', lazy=False) + + if type == 'week': + cdc_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) + ], + ['power', 'enercoop_operation_id', 'date_slot'], + ['comp_data_type', type_date_histo], orderby='comp_data_type, date_slot ASC', lazy=False) + + # Get the date for the abscissa axis + cdc_date_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) + ], + ['enercoop_operation_id', 'date_slot'], + [type_date_abs], orderby='date_slot ASC', lazy=False) + + # Get the date for the abscissa axis (histo) + if type == 'day': + cdc_date_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) + ], + ['enercoop_operation_id', 'date_slot'], + [type_date], orderby='date_slot ASC', lazy=False) + else: + # Get all data group by curves type and date + cdc_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end) + ], + ['power', 'enercoop_operation_id', 'date_slot'], + ['comp_data_type', type_date], orderby='comp_data_type, date_slot ASC', lazy=False) + + if type == 'week': + cdc_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end) + ], + ['power', 'enercoop_operation_id', 'date_slot'], + ['comp_data_type', type_date_histo], orderby='comp_data_type, date_slot ASC', lazy=False) + + # Get the date for the abscissa axis + cdc_date_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + ], + ['enercoop_operation_id', 'date_slot'], + [type_date_abs], orderby='date_slot ASC', lazy=False) + + # Get the date for the abscissa axis (histo) + if type == 'day': + cdc_date_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + ], + ['enercoop_operation_id', 'date_slot'], + [type_date], orderby='date_slot ASC', lazy=False) # Build the abscissa axis with the right format date for cdc in cdc_date_ids: value_hour = cdc[type_date_abs] label_line_cons.append(value_hour) + label_histo_cons.append(value_hour) + + # Build the abscissa axis with the right format date (histo) + if type == 'day': + label_histo_cons = [] + for cdc in cdc_date_histo_ids: + value_hour = cdc[type_date] + label_histo_cons.append(value_hour) # Build the ordinate axis for each data type (autoconso/conso/prod/surplus) for cdc in cdc_ids: @@ -442,24 +527,62 @@ class EnercoopOperation(models.Model): if cdc['comp_data_type'] == 'surplus': data_surplus.append(value_power) + # Build the ordinate axis for each data type (autoconso/conso/prod/surplus) for histo graph + if type == 'week': + data_autocons = [] + data_cons = [] + data_prod = [] + data_surplus = [] + for cdc in cdc_histo_ids: + value_power = round((cdc['power'] / 2), 2) + if cdc['comp_data_type'] == 'autocons': + data_autocons.append(value_power) + if cdc['comp_data_type'] == 'cons': + data_cons.append(value_power) + if cdc['comp_data_type'] == 'prod': + data_prod.append(value_power) + if cdc['comp_data_type'] == 'surplus': + data_surplus.append(value_power) + if type == 'day' or type == 'week': - query = """ - SELECT - A.comp_data_type AS comp_data_type, - A.date_slot AS date_slot, - SUM(A.power) AS power - 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 A.comp_data_type, A.date_slot - ORDER BY A.comp_data_type, A.date_slot ASC; - """ - query_params = (tuple(self.ids), date_start, date_end) - self.env.cr.execute(query, query_params) - raw_data = self.env.cr.dictfetchall() + if enercoop_counter_id: + query = """ + SELECT + A.comp_data_type AS comp_data_type, + A.date_slot AS date_slot, + SUM(A.power) AS power + 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 = %s + OR A.enercoop_counter_id = NULL ) + AND A.date_slot >= %s + AND A.date_slot < %s + GROUP BY A.comp_data_type, A.date_slot + ORDER BY A.comp_data_type, A.date_slot ASC; + """ + query_params = (tuple(self.ids), enercoop_counter_id.id, date_start, date_end) + self.env.cr.execute(query, query_params) + raw_data = self.env.cr.dictfetchall() + else: + query = """ + SELECT + A.comp_data_type AS comp_data_type, + A.date_slot AS date_slot, + SUM(A.power) AS power + 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 A.comp_data_type, A.date_slot + ORDER BY A.comp_data_type, A.date_slot ASC; + """ + query_params = (tuple(self.ids), date_start, date_end) + self.env.cr.execute(query, query_params) + raw_data = self.env.cr.dictfetchall() for cdc in raw_data: if type == 'week' or type == 'day': @@ -476,12 +599,21 @@ class EnercoopOperation(models.Model): data_surplus_line.append({'t': value_hour, 'y': value_power}) # Get the data to build the chart Bilan - bilan_cdc = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end)], - ['power', 'enercoop_operation_id'], - ['comp_data_type'], orderby='comp_data_type', lazy=False) + if enercoop_counter_id: + bilan_cdc = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id)], + ['power', 'enercoop_operation_id'], + ['comp_data_type'], orderby='comp_data_type', lazy=False) + else: + bilan_cdc = self.env['enercoop.enedis.cdc'].sudo().read_group( + [('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end)], + ['power', 'enercoop_operation_id'], + ['comp_data_type'], orderby='comp_data_type', lazy=False) # Build the ordinate axis for each data type (autoconso/conso/prod/surplus) for bilan in bilan_cdc: @@ -521,6 +653,7 @@ class EnercoopOperation(models.Model): 'surplus': data_surplus, 'surplus_line': data_surplus_line, 'label': label_line_cons, + 'label_histo': label_histo_cons, 'label_doughnut': ['Autoconso', 'Alloconso'], 'doughnut_cons': [percent_autocons, percent_cons], 'label_doughnut_prod': ['Autoconso', 'Surplus'], @@ -532,7 +665,7 @@ class EnercoopOperation(models.Model): # ------------------------------------------------------ # Functions to manage route # ------------------------------------------------------ - def graph_view_conso(self, scale=None, date_start=None, date_end=None): + def graph_view_conso(self, scale=None, date_start=None, date_end=None, prm_id=None): """ Fonction appelée pour l'affichage des courbes consommation sur le portail @@ -553,7 +686,7 @@ class EnercoopOperation(models.Model): scale = self.get_scale(date_start, date_end) # Get the data to display in chart - chart_data = self.get_cdc(scale, date_start, date_end) + chart_data = self.get_cdc(scale, date_start, date_end, prm_id) # Build the chart depending on data calculated result_graph = self.chart_data_cons(chart_data) @@ -572,7 +705,7 @@ class EnercoopOperation(models.Model): }) return result_graph - def graph_view_prod(self, scale=None, date_start=None, date_end=None): + def graph_view_prod(self, scale=None, date_start=None, date_end=None, prm_id=None): """ Fonction appelée pour l'affichage des courbes production sur le portail @@ -592,7 +725,7 @@ class EnercoopOperation(models.Model): scale = self.get_scale(date_start, date_end) # Get the data to display in chart - chart_data = self.get_cdc(scale, date_start, date_end) + chart_data = self.get_cdc(scale, date_start, date_end, prm_id) # Build the chart depending on data calculated result_graph = self.chart_data_prod(chart_data) diff --git a/static/src/js/operation_graph.js b/static/src/js/operation_graph.js index 67fedc506a86a825bd358863c63d65f0890879f1..6663105af49daf2d177ba83f5f8facfa118984e0 100644 --- a/static/src/js/operation_graph.js +++ b/static/src/js/operation_graph.js @@ -83,13 +83,6 @@ odoo.define('enercoop_cdc.operation_graph', function (require) { Object.assign({}, result.line_chart_conso_line, options_line) ); } -// else { -// var chart = new Chart( -// line_conso, -// Object.assign({}, result.line_chart_conso, options) -// ); -// } - console.log(chart); var chart = new Chart( donuts_conso, @@ -100,6 +93,7 @@ odoo.define('enercoop_cdc.operation_graph', function (require) { histo_conso, Object.assign({}, result.histo_chart_conso, options_stacked) ); + console.log(chart); if (result.scale == 'week' || result.scale == 'day'){ var chart = new Chart(