From b414ed145bd314c739f106144c0fbcf33e704b52 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Tue, 19 Oct 2021 16:04:29 +0200
Subject: [PATCH] [UPD]Update curve calcul

---
 models/enercoop_operation.py | 323 ++++++++++++++++++++++-------------
 1 file changed, 203 insertions(+), 120 deletions(-)

diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py
index 3bae7eb..7af2c92 100644
--- a/models/enercoop_operation.py
+++ b/models/enercoop_operation.py
@@ -172,12 +172,10 @@ class EnercoopOperation(models.Model):
         elif delta <= 7:
             step_display_courbe = 'day'
             step = 'hour'
-        elif delta <= 181:
+        # elif delta <= 181:
+        else:
             step = 'month'
             step_display_courbe = 'month'
-        else:
-            step = 'year'
-            step_display_courbe = 'year'
 
         return step, step_display_courbe
 
@@ -239,6 +237,113 @@ class EnercoopOperation(models.Model):
         }
         return cdc_jour
 
+    def get_cdc_by_query_prod(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 pour les consommateurs
+        :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_surplus = []
+        label_histo = []
+        data_autocons_histo = []
+        data_surplus_histo = []
+
+        query = """
+            SELECT
+                date_trunc(%s, A.date_slot) AS date_slot,
+                ((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,
+                (SUM((CASE WHEN comp_data_type = 'prod' AND A.enercoop_counter_id IN %s THEN A.power ELSE 0 END)) / 2) / 
+                    (SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) * 
+                    (SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 END)) / 2) / 1000 as surplus
+            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 date_trunc(%s, A.date_slot)
+            ORDER BY date_slot ASC;
+                """
+        query_params = (slot_type, tuple(prm_ids.ids), 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_autocons.append(int(row[1]))
+                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]))
+                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])})
+                label.append(row[0])
+
+        cdc_jour = {
+            'autocons_prod': data_autocons,
+            'label': label,
+            'surplus': data_surplus,
+            'autocons_histo': data_autocons_histo,
+            'label_histo': label_histo,
+            'surplus_histo': data_surplus_histo,
+        }
+        return cdc_jour
+
+    def get_cdc_by_query_histo_prod(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 pour les consommateurs
+        :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_prod_histo = []
+        data_surplus_histo = []
+
+        query = """
+            SELECT
+                date_trunc(%s, A.date_slot) AS date_slot,
+                ((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,
+                (SUM((CASE WHEN comp_data_type = 'prod' AND A.enercoop_counter_id IN %s THEN A.power ELSE 0 END)) / 2) / 
+                    (SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) * 
+                    (SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 END)) / 2) / 1000 as surplus
+            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 date_trunc(%s, A.date_slot)
+            ORDER BY date_slot ASC;
+                """
+        query_params = (slot_type, tuple(prm_ids.ids), 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_prod_histo.append(int(row[1]))
+            data_surplus_histo.append(int(row[2]))
+            label_histo.append(row[0])
+
+        cdc_jour = {
+            'autocons_prod_histo': data_autocons_prod_histo,
+            'label_histo': label_histo,
+            'surplus_histo': data_surplus_histo,
+        }
+        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
@@ -251,52 +356,36 @@ class EnercoopOperation(models.Model):
         """
         label = []
         data_autocons = []
+        data_autocons_prod = []
         data_allocons = []
         data_cons = []
         data_prod = []
         data_surplus = []
 
-        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,
-                    (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
-                        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 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), tuple(prm_ids.ids), date_start, date_end, slot_type)
-        else:
-            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,
-                    (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
-                        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 date_trunc(%s, A.date_slot)
-                        ORDER BY date_slot ASC;
-                    """
-            query_params = (slot_type, tuple(self.ids), date_start, date_end, slot_type)
+        # 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 = 'prod' THEN A.power ELSE 0 END)) / 2) / 
+                    (SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) * 
+                    (SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 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 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 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:
@@ -306,6 +395,7 @@ class EnercoopOperation(models.Model):
                 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': int(row[1])})
@@ -313,10 +403,12 @@ class EnercoopOperation(models.Model):
                 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])})
                 label.append(row[0])
 
         cdc_jour = {
             'autocons': data_autocons,
+            'autocons_prod': data_autocons_prod,
             'cons': data_cons,
             'prod': data_prod,
             'surplus': data_surplus,
@@ -337,58 +429,45 @@ class EnercoopOperation(models.Model):
         """
         label_histo = []
         data_autocons_histo = []
+        data_autocons_prod_histo = []
         data_allocons_histo = []
         data_surplus_histo = []
 
-        if prm_ids:
-            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
-                        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 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), tuple(prm_ids.ids), date_start, date_end, slot_type)
-        else:
-            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
-                        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 date_trunc(%s, A.date_slot)
-                        ORDER BY date_slot ASC;
-                    """
-            query_params = (slot_type, tuple(self.ids), date_start, date_end, slot_type)
+        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 = 'prod' THEN A.power ELSE 0 END)) / 2) / 
+                    (SUM((CASE WHEN comp_data_type = 'prod' THEN A.power ELSE 1 END)) / 2) * 
+                    (SUM((CASE WHEN comp_data_type = 'surplus' THEN A.power ELSE 1 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 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 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(int(row[1]))
             data_surplus_histo.append(int(row[2]))
             data_allocons_histo.append(int(row[3]))
+            data_allocons_histo.append(int(row[3]))
             label_histo.append(row[0])
 
         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
@@ -462,6 +541,20 @@ class EnercoopOperation(models.Model):
                     }
                 },
             }
+        result['line_chart_prod_prm'] = {
+            'type': 'line',
+            'data': {
+                'labels': chart_data['label'],
+                'datasets': [
+                    {
+                        'label': 'Production solaire',
+                        'data': chart_data['prod'],
+                        'backgroundColor': 'rgba(244, 165, 25, 0)',
+                        'borderColor': 'rgba(244, 165, 25, 1)',
+                    },
+                ],
+            },
+        }
         return result
 
     def chart_data_histo_cons(self, chart_data, scale, scale_spe):
@@ -604,7 +697,7 @@ class EnercoopOperation(models.Model):
                     },
                     {
                         'label': 'Autoconso',
-                        'data': chart_data['autocons'],
+                        'data': chart_data['autocons_prod'],
                         'backgroundColor': 'rgba(91, 154, 81, 0.4)',
                         'borderColor': 'rgba(91, 154, 81, 1)',
                         'borderWidth': 2,
@@ -642,20 +735,6 @@ class EnercoopOperation(models.Model):
                 }
             },
         }
-        result['line_chart_prod_prm'] = {
-            'type': 'line',
-            'data': {
-                'labels': chart_data['label'],
-                'datasets': [
-                    {
-                        'label': 'Production solaire',
-                        'data': chart_data['prod'],
-                        'backgroundColor': 'rgba(244, 165, 25, 0)',
-                        'borderColor': 'rgba(244, 165, 25, 1)',
-                    },
-                ],
-            },
-        }
         return result
 
     def chart_data_donuts_prod(self, chart_data, scale):
@@ -668,10 +747,10 @@ class EnercoopOperation(models.Model):
 
         result = {}
         if scale == 'hour':
-            sum_res1 = sum(int(item['y']) for item in chart_data['autocons'])
+            sum_res1 = sum(int(item['y']) for item in chart_data['autocons_prod'])
             sum_res2 = sum(int(item['y']) for item in chart_data['surplus'])
         else:
-            sum_res1 = sum(chart_data['autocons'])
+            sum_res1 = sum(chart_data['autocons_prod'])
             sum_res2 = sum(chart_data['surplus'])
 
         tot_res = sum_res1 + sum_res2
@@ -705,11 +784,11 @@ class EnercoopOperation(models.Model):
 
         result = {}
         if scale_spe == 'week':
-            data_autocons = chart_data['autocons_histo']
+            data_autocons = chart_data['autocons_prod_histo']
             data_surplus = chart_data['surplus_histo']
             data_label = chart_data['label_histo']
         else:
-            data_autocons = chart_data['autocons']
+            data_autocons = chart_data['autocons_prod']
             data_surplus = chart_data['surplus']
             data_label = chart_data['label']
 
@@ -784,10 +863,10 @@ class EnercoopOperation(models.Model):
         :return: un dictionnaire de données
                 (labels et data pour les charts à afficher)
         """
-
-        enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_ids) if prm_ids else None
+        enercoop_counter_ids = self.env['enercoop.counter'].search([])
 
         chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
+
         if scale == 'week':
             chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
             chart_data.update(chart_data_histo)
@@ -813,10 +892,13 @@ class EnercoopOperation(models.Model):
             if first_day and last_day:
                 date_start = fields.Datetime.to_datetime(first_day)
                 date_end = fields.Datetime.to_datetime(last_day)
+                date_end = date_utils.end_of(date_end, 'day')
             elif first_day:
                 date_start, date_end = operation_ids.get_last_day('day')
+                date_end = date_utils.end_of(date_end, 'day')
             else:
                 date_start, date_end = operation_ids.get_last_day('month')
+                date_end = date_utils.end_of(date_end, 'day')
 
             counter_ids = None
             if enercoop_counter_id:
@@ -876,18 +958,17 @@ class EnercoopOperation(models.Model):
         step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
 
         # New code implementation
-        enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
-
-        if enercoop_counter_ids:
-            chart_data = self.get_cdc_by_query_cons(step_courbe, date_start, date_end, enercoop_counter_ids)
-            if scale == 'week':
-                chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
-                chart_data.update(chart_data_histo)
+        # enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
+        if prm_id:
+            enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id)
         else:
-            chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
-            if scale == 'week':
-                chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
-                chart_data.update(chart_data_histo)
+            # enercoop_counter_op_ids = self.enercoop_injection_operation_ids
+            enercoop_counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_delivery_operation_ids.ids)])
+
+        chart_data = self.get_cdc_by_query_cons(step_courbe, date_start, date_end, enercoop_counter_ids)
+        if scale == 'week':
+            chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
+            chart_data.update(chart_data_histo)
 
         # Build the chart with data and options
         result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
@@ -928,14 +1009,16 @@ class EnercoopOperation(models.Model):
         step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
 
         # New code implementation
-        enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
+        # enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
+        if prm_id:
+            enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id)
+        else:
+            # enercoop_counter_op_ids = self.enercoop_injection_operation_ids
+            enercoop_counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_injection_operation_ids.ids)])
 
-        # if enercoop_counter_ids:
-        #     chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
-        # else:
-        chart_data = self.get_cdc_by_query(step_courbe, date_start, date_end, enercoop_counter_ids)
+        chart_data = self.get_cdc_by_query_prod(step_courbe, date_start, date_end, enercoop_counter_ids)
         if scale == 'week':
-            chart_data_histo = self.get_cdc_by_query_histo('day', date_start, date_end, enercoop_counter_ids)
+            chart_data_histo = self.get_cdc_by_query_histo_prod('day', date_start, date_end, enercoop_counter_ids)
             chart_data.update(chart_data_histo)
 
         result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe)
-- 
GitLab