diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py
index c1d1ca825741314d263f0893afde8784469b8459..334b752b4fd5a3fe21b1a34e3657c43ffed1a118 100644
--- a/models/enercoop_operation.py
+++ b/models/enercoop_operation.py
@@ -240,6 +240,50 @@ class EnercoopOperation(models.Model):
         }
         return cdc_jour
 
+    def get_cdc_by_query_histo_cons(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_histo = []
+        data_allocons_histo = []
+
+        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 = '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)
+        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]))
+            label_histo.append(row[0])
+
+        cdc_jour = {
+            'autocons_histo': data_autocons_histo,
+            'allocons_histo': data_allocons_histo,
+            'label_histo': label_histo,
+        }
+        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
@@ -463,7 +507,7 @@ class EnercoopOperation(models.Model):
             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]))
+            data_autocons_prod_histo.append(int(row[4]))
             label_histo.append(row[0])
 
         cdc_jour = {
@@ -940,10 +984,51 @@ class EnercoopOperation(models.Model):
             })
 
         return result_graph
+
+    # ------------------------------------------------------
+    # Functions to manage route
+    # ------------------------------------------------------
+    def build_graph_data_options(self, chart_data, step_display_courbe=None, scale=None, step_courbe=None):
+        result_graph = {}
+        result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe)
+        result_graph.update(result_graph_line)
+        result_graph_histo = self.chart_data_histo_prod(chart_data, step_display_courbe, scale)
+        result_graph.update(result_graph_histo)
+        result_graph_donuts = self.chart_data_donuts_prod(chart_data, step_courbe)
+        result_graph.update(result_graph_donuts)
+
+        result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
+        result_graph.update(result_graph_line)
+        result_graph_histo = self.chart_data_histo_cons(chart_data, step_display_courbe, scale)
+        result_graph.update(result_graph_histo)
+        result_graph_donuts = self.chart_data_donuts_cons(chart_data, step_courbe)
+        result_graph.update(result_graph_donuts)
+        return result_graph
+
+    def build_graph_data_options_prod(self, chart_data, step_display_courbe=None, scale=None, step_courbe=None):
+        result_graph = {}
+        result_graph_line = self.chart_data_line_prod(chart_data, step_display_courbe)
+        result_graph.update(result_graph_line)
+        result_graph_histo = self.chart_data_histo_prod(chart_data, step_display_courbe, scale)
+        result_graph.update(result_graph_histo)
+        result_graph_donuts = self.chart_data_donuts_prod(chart_data, step_courbe)
+        result_graph.update(result_graph_donuts)
+        return result_graph
+
+    def build_graph_data_options_cons(self, chart_data, step_display_courbe=None, scale=None, step_courbe=None):
+        result_graph = {}
+        result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
+        result_graph.update(result_graph_line)
+        result_graph_histo = self.chart_data_histo_cons(chart_data, step_display_courbe, scale)
+        result_graph.update(result_graph_histo)
+        result_graph_donuts = self.chart_data_donuts_cons(chart_data, step_courbe)
+        result_graph.update(result_graph_donuts)
+        return result_graph
+
     # ------------------------------------------------------
     # Functions to manage route
     # ------------------------------------------------------
-    def graph_view_conso(self, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None):
+    def graph_view_global(self, scale=None, date_start=None, date_end=None):
         """
         Fonction appelée pour l'affichage des courbes consommation
         sur le portail
@@ -957,31 +1042,16 @@ class EnercoopOperation(models.Model):
         if not date_start and not date_end:
             date_start, date_end = self.get_last_day(scale)
 
-        # Get the step to display courbe in chart
-        step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
+        counter_ids = self.env['enercoop.counter'].search([('enercoop_operation_ids', 'in', self.enercoop_delivery_operation_ids.ids)]).ids
 
-        # New code implementation
-        # 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)
-        elif partner_id:
-            enercoop_counter_ids = self.env['enercoop.counter'].search([('partner_id', '=', partner_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_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)
+        step_courbe, step_display_courbe = self.get_step_from_date(date_start=date_start, date_end=date_end)
+        # Get the data to display in chart
+        chart_data = self.get_cdc(
+            scale=scale, step_courbe=step_courbe, date_start=date_start,
+            date_end=date_end, prm_ids=counter_ids)
 
         # Build the chart with data and options
-        result_graph_line = self.chart_data_line_cons(chart_data, step_display_courbe)
-        result_graph.update(result_graph_line)
-        result_graph_histo = self.chart_data_histo_cons(chart_data, step_display_courbe, scale)
-        result_graph.update(result_graph_histo)
-        result_graph_donuts = self.chart_data_donuts_cons(chart_data, step_courbe)
-        result_graph.update(result_graph_donuts)
+        result_graph = self.build_graph_data_options(chart_data, step_display_courbe=step_display_courbe, scale=scale, step_courbe=step_courbe)
 
         date_deb, date_max = self.get_last_day('day')
         date_max = date_max.strftime("%d/%m/%Y")
@@ -997,44 +1067,80 @@ class EnercoopOperation(models.Model):
         })
         return result_graph
 
-    def graph_view_prod(self, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None):
+    # ------------------------------------------------------
+    # Functions to manage route
+    # ------------------------------------------------------
+    def get_graph_data(self, type=None, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None):
+
+        if scale:
+            graph_datas = self.graph_view_type(type, scale, prm_id, partner_id)
+        elif date_start and date_end:
+            graph_datas = self.graph_view_type(
+                type=type,
+                date_start=datetime.strptime(date_start, '%Y-%m-%d'),
+                date_end=datetime.strptime(date_end, '%Y-%m-%d'),
+                prm_id=prm_id,
+                partner_id=partner_id
+            )
+        else:
+            graph_datas = self.graph_view_type(
+                type=type, scale='week', prm_id=prm_id, partner_id=partner_id)
+        if prm_id:
+            graph_datas['name'] = "PRM n° " + self.env['enercoop.counter'].sudo().browse(prm_id).name
+        if partner_id:
+            graph_datas['name'] = self.env['res.partner'].sudo().browse(partner_id).name
+        graph_datas['prm_id'] = prm_id
+        graph_datas['partner_id'] = partner_id
+        return graph_datas
+
+    def graph_view_type(self, type=None, scale=None, date_start=None, date_end=None, prm_id=None, partner_id=None):
         """
-        Fonction appelée pour l'affichage des courbes production
+        Fonction appelée pour l'affichage des courbes consommation
         sur le portail
         :param  scale: type d'affichage des graphes
                        (day/week/month/semestre/year)
                         défini par le clic bouton
         :return: dictionnaire pour la construction des graphes
         """
+
         result_graph = {}
-        # Get the step to display courbe in chart
-        if not date_start and not date_end:
+        if scale:
             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)
 
-        # New code implementation
-        # enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id) if prm_id else None
+        # Get PRM ids
         if prm_id:
             enercoop_counter_ids = self.env['enercoop.counter'].browse(prm_id)
         elif partner_id:
             enercoop_counter_ids = self.env['enercoop.counter'].search([('partner_id', '=', partner_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 type == 'cons':
+                enercoop_counter_ids = self.env['enercoop.counter'].search(
+                    [('enercoop_operation_ids', 'in', self.enercoop_delivery_operation_ids.ids)])
+            else:
+                enercoop_counter_ids = self.env['enercoop.counter'].search(
+                    [('enercoop_operation_ids', 'in', self.enercoop_injection_operation_ids.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_prod('day', date_start, date_end, enercoop_counter_ids)
-            chart_data.update(chart_data_histo)
+        if type == 'cons':
+            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_cons('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)
-        result_graph.update(result_graph_line)
-        result_graph_histo = self.chart_data_histo_prod(chart_data, step_display_courbe, scale)
-        result_graph.update(result_graph_histo)
-        result_graph_donuts = self.chart_data_donuts_prod(chart_data, step_courbe)
-        result_graph.update(result_graph_donuts)
+            # Build the chart with data and options
+            result_graph = self.build_graph_data_options_cons(chart_data, step_display_courbe=step_display_courbe,
+                                                             scale=scale, step_courbe=step_courbe)
+        else:
+            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_prod('day', date_start, date_end, enercoop_counter_ids)
+                chart_data.update(chart_data_histo)
 
+            # Build the chart with data and options
+            result_graph = self.build_graph_data_options_prod(chart_data, step_display_courbe=step_display_courbe,
+                                                              scale=scale, step_courbe=step_courbe)
         date_deb, date_max = self.get_last_day('day')
         date_max = date_max.strftime("%d/%m/%Y")
         date_min = self.get_first_day()
@@ -1047,5 +1153,4 @@ class EnercoopOperation(models.Model):
             'date_max': date_max,
             'scale': scale
         })
-
         return result_graph