diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py index bacea1797f7b6c3727a485e57b06a85072a40eea..c3cb525b888d70069da4b5bdf8b54b304c99336f 100644 --- a/models/enercoop_operation.py +++ b/models/enercoop_operation.py @@ -144,6 +144,8 @@ class EnercoopOperation(models.Model): date_start = date_end - relativedelta(days=6) date_start = date_utils.start_of(date_start, 'day') else: + date_first = date_end - relativedelta(months=1) + date_end = date_utils.end_of(date_first, 'month') date_start = date_utils.start_of(date_end, scale) return date_start, date_end @@ -162,25 +164,35 @@ class EnercoopOperation(models.Model): date_min = first_record.date_slot return date_min - def get_step_from_date(self, date_start, date_end): + def get_step_from_date(self, date_start, date_end, scale=None): """ Fonction retournant le pas des courbes en fonction de 2 dates. :return: step: hour/day/month/year """ # Calculate delta between 2 dates delta = (date_end - date_start).days - if delta <= 1: + if delta < 1: step_display_courbe = 'hour' step = 'hour' - elif delta <= 7: + if not scale: + scale = 'day' + elif delta < 29: step_display_courbe = 'day' step = 'hour' - # elif delta <= 181: + if not scale: + scale = 'week' + elif delta <= 365: + step = 'month' + step_display_courbe = 'month' + if not scale: + scale = 'month' else: step = 'month' step_display_courbe = 'month' + if not scale: + scale = 'year' - return step, step_display_courbe + return scale, step, step_display_courbe def get_cdc_by_query_cons(self, slot_type, date_start, date_end, prm_ids=None): """ @@ -225,9 +237,9 @@ class EnercoopOperation(models.Model): data_allocons.append(int(row[3])) label.append(row[0]) else: - data_autocons.append({'x': row[0], 'y': int(row[1])}) - data_prod.append({'x': row[0], 'y': int(row[2])}) - data_allocons.append({'x': row[0], 'y': int(row[3])}) + data_autocons.append({'x': row[0], 'y': round(row[1], 2)}) + data_prod.append({'x': row[0], 'y': round(row[2], 2)}) + data_allocons.append({'x': row[0], 'y': round(row[3], 2)}) label.append(row[0]) cdc_jour = { @@ -273,8 +285,8 @@ class EnercoopOperation(models.Model): 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])) + data_autocons_histo.append(round(row[1], 2)) + data_allocons_histo.append(round(row[2], 2)) label_histo.append(row[0]) cdc_jour = { @@ -327,12 +339,12 @@ class EnercoopOperation(models.Model): data_surplus.append(int(row[2])) label.append(row[0]) elif slot_type == 'day': - data_autocons_histo.append(int(row[1])) - data_surplus_histo.append(int(row[2])) + data_autocons_histo.append(round(row[1], 2)) + data_surplus_histo.append(round(row[2], 2)) label_histo.append(row[0]) else: - data_autocons.append({'x': row[0], 'y': int(row[1])}) - data_surplus.append({'x': row[0], 'y': int(row[2])}) + data_autocons.append({'x': row[0], 'y': round(row[1], 2)}) + data_surplus.append({'x': row[0], 'y': round(row[2], 2)}) label.append(row[0]) cdc_jour = { @@ -380,8 +392,8 @@ class EnercoopOperation(models.Model): self.env.cr.execute(query, query_params) raw_data = self.env.cr.fetchall() for row in raw_data: - data_autocons_prod_histo.append(int(row[1])) - data_surplus_histo.append(int(row[2])) + data_autocons_prod_histo.append(round(row[1], 2)) + data_surplus_histo.append(round(row[2], 2)) label_histo.append(row[0]) cdc_jour = { @@ -445,12 +457,12 @@ class EnercoopOperation(models.Model): data_autocons_prod.append(int(row[6])) label.append(row[0]) else: - data_cons.append({'x': row[0], 'y': int(row[1])}) - data_autocons.append({'x': row[0], 'y': int(row[2])}) - data_prod.append({'x': row[0], 'y': int(row[3])}) - data_surplus.append({'x': row[0], 'y': int(row[4])}) - data_allocons.append({'x': row[0], 'y': int(row[5])}) - data_autocons_prod.append({'x': row[0], 'y': int(row[6])}) + 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 = { @@ -504,10 +516,10 @@ class EnercoopOperation(models.Model): 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_surplus_histo.append(int(row[2])) - data_allocons_histo.append(int(row[3])) - data_autocons_prod_histo.append(int(row[4])) + 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]) cdc_jour = { @@ -526,7 +538,10 @@ class EnercoopOperation(models.Model): :param chart_data: données à afficher dans les chart (labels et data) :return: un dictionnaire de chart """ - + if scale == 'day': + offsetGridLines = False + else: + offsetGridLines = True result = {} result['line_chart_conso_line'] = { @@ -571,7 +586,7 @@ class EnercoopOperation(models.Model): 'unit': scale, }, 'gridLines': { - 'offsetGridLines': True + 'offsetGridLines': offsetGridLines } }], 'yAxes': [{ @@ -715,7 +730,7 @@ class EnercoopOperation(models.Model): sum_res2 = sum(chart_data['allocons']) tot_res = sum_res1 + sum_res2 - res = [int((sum_res1 * 100) / tot_res), int((sum_res2 * 100) / tot_res)] + res = [(sum_res1 * 100) / tot_res, (sum_res2 * 100) / tot_res] result['donuts_chart_conso'] = { 'type': 'doughnut', @@ -735,6 +750,9 @@ class EnercoopOperation(models.Model): 'cutoutPercentage': 60, 'animation': { 'animateScale': True, + }, + 'plugins': { + }, 'tooltips': { 'backgroundColor': '#f5f5f5', @@ -756,7 +774,10 @@ class EnercoopOperation(models.Model): :param chart_data: données à afficher dans les chart (labels et data) :return: un dictionnaire de chart """ - + if scale == 'day': + offsetGridLines = False + else: + offsetGridLines = True result = {} result['line_chart_prod_line'] = { 'type': 'line', @@ -764,7 +785,7 @@ class EnercoopOperation(models.Model): 'labels': chart_data['label'], 'datasets': [ { - 'label': 'Autoconso', + 'label': 'AutoProd', 'data': chart_data['autocons_prod'], 'backgroundColor': 'rgba(91, 154, 81, 0.4)', 'borderColor': 'rgba(91, 154, 81, 1)', @@ -796,7 +817,7 @@ class EnercoopOperation(models.Model): # 'min': result.date_start, }, 'gridLines': { - 'offsetGridLines': True + 'offsetGridLines': offsetGridLines } }], 'yAxes': [{ @@ -842,12 +863,13 @@ class EnercoopOperation(models.Model): sum_res2 = sum(chart_data['surplus']) tot_res = sum_res1 + sum_res2 - res = [int((sum_res1 * 100) / tot_res), int((sum_res2 * 100) / tot_res)] + # res = [(sum_res1 * 100) / tot_res, (sum_res2 * 100) / tot_res] + res = [sum_res1, sum_res2] result['donuts_chart_prod'] = { 'type': 'doughnut', 'data': { - 'labels': ['Autoconso', 'Surplus'], + 'labels': ['AutoProd', 'Surplus'], 'datasets': [{ 'label': 'Inférieur à 3', 'data': res, @@ -901,7 +923,7 @@ class EnercoopOperation(models.Model): 'labels': data_label, 'datasets': [ { - 'label': 'AutoConso', + 'label': 'AutoProd', 'data': data_autocons, 'backgroundColor': 'rgba(91, 154, 81, 0.4)', 'borderColor': 'rgba(91, 154, 81, 1)', @@ -1014,7 +1036,8 @@ class EnercoopOperation(models.Model): if enercoop_counter_id: counter_ids = self.env['enercoop.counter'].search([('name', '=', enercoop_counter_id)]).ids - step_courbe, step_display_courbe = operation_ids.get_step_from_date(date_start=date_start, date_end=date_end) + 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) @@ -1104,8 +1127,11 @@ class EnercoopOperation(models.Model): result_graph = {} if not date_start and not date_end: date_start, date_end = self.get_last_day(scale) + else: + date_end = date_utils.end_of(date_end, 'day') - step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end) + scale, step_courbe, step_display_courbe = self.get_step_from_date( + date_start=date_start, date_end=date_end, scale=scale) # Get the data to display in chart chart_data = self.get_cdc( scale=scale, step_courbe=step_courbe, date_start=date_start, @@ -1147,7 +1173,8 @@ class EnercoopOperation(models.Model): 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) + scale, step_courbe, step_display_courbe = self.get_step_from_date( + date_start=date_start, date_end=date_end, scale=scale) # Get PRM ids if prm_id: diff --git a/static/src/js/operation_graph.js b/static/src/js/operation_graph.js index 6298c946a7ba90afdb324530ed2c5bc93275defb..39447bcb50eee4b8a2ed2dda7309d7f558a950ab 100644 --- a/static/src/js/operation_graph.js +++ b/static/src/js/operation_graph.js @@ -66,6 +66,18 @@ odoo.define('enercoop_cdc.operation_graph', function (require) { donuts_conso, Object.assign({}, result.donuts_chart_conso) ); +// chart_donuts_conso.config.options.plugins = +// { +// color: "#1f4e56", +// font: { +// weight: "bold", +// size: 16 +// }, +// formatter: (value) => { +// return value + "%"; +// } +// }; +// console.log(chart_donuts_conso); chart_histo_conso = new Chart( histo_conso, @@ -77,7 +89,6 @@ odoo.define('enercoop_cdc.operation_graph', function (require) { line_prod, Object.assign({}, result.line_chart_prod_line) ); - console.log(chart_line_prod); } chart_donuts_prod = new Chart(