diff --git a/models/acc_operation.py b/models/acc_operation.py
index 9bfe32e10e6975e13a67d45dcc14104d23a77a2a..4acd9227321c3e87c3dd92050a25386d50c44f8c 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -9,8 +9,6 @@ from odoo.exceptions import ValidationError
 from odoo.osv import expression
 from odoo.tools import date_utils
 
-DEFAULT_MONTH_RANGE = 3
-
 
 class AccOperation(models.Model):
     _inherit = "acc.operation"
@@ -49,7 +47,9 @@ class AccOperation(models.Model):
         start_date, end_date = self.get_interval("month", last_record)
         query = """
             SELECT
-                date_trunc('month', cdc.date_slot) AS date_slot,
+                date_trunc('month',
+                    cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
+                    ) AS date_slot,
                 (SUM( (CASE
                     WHEN cdc.comp_data_type = 'cons' THEN cdc.power
                     ELSE 0 END) )/2) / 1000 as conso_tot,
@@ -67,7 +67,8 @@ class AccOperation(models.Model):
                 cdc.acc_operation_id = %s
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
-            GROUP BY date_trunc('month', cdc.date_slot);
+            GROUP BY date_trunc('month',
+                cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris');
         """
         query_params = (
             self.id,
@@ -78,18 +79,19 @@ class AccOperation(models.Model):
         raw_data = self.env.cr.fetchone()
         return raw_data[1], raw_data[2], raw_data[3], start_date
 
-    def get_last_cdc_record(self):
+    def get_last_cdc_record(self, partner_id=None):
         """
         @returns: last acc.enedis.cdc record in operations
         """
+        domain = [("acc_operation_id", "in", self.ids)]
+        if partner_id:
+            domain = expression.AND([domain, [("partner_id", "=", partner_id)]])
         # Get last date slot recorded
         last_record = (
             self.env["acc.enedis.cdc"]
             .sudo()
             .search(
-                [
-                    ("acc_operation_id", "in", self.ids),
-                ],
+                domain,
                 limit=1,
                 order="date_slot DESC",
             )
@@ -100,7 +102,7 @@ class AccOperation(models.Model):
 
         return last_record
 
-    def get_interval(self, scale, last_record):
+    def get_interval(self, scale, cdc_record):
         """
         Fonction retournant une date de début et une date de fin.
         Ces dates sont calculées en fonction de l'échelle choisie et du dernier
@@ -114,14 +116,14 @@ class AccOperation(models.Model):
                 date de début = début de l'année du dernier jour de données
         :param str scale: type d'affichage des graphes
                        (day/week/month/year)
-        :param object last_record: Dernier enregistrement dans la base
+        :param object cdc_record: courbe de charge (table acc.enedis.cdc)
         @returns: une date de début et une date de fin
         """
 
         # Convert end datetime to timezone
-        last_day_start = datetime.combine(last_record.date_slot, time.min)
-        last_day_end = datetime.combine(last_record.date_slot, time.max)
-        start_month, end_month = date_utils.get_month(last_record.date_slot)
+        last_day_start = datetime.combine(cdc_record.date_slot, time.min)
+        last_day_end = datetime.combine(cdc_record.date_slot, time.max)
+        start_month, end_month = date_utils.get_month(cdc_record.date_slot)
 
         if scale == "year":
             end_date = end_month
@@ -160,13 +162,13 @@ class AccOperation(models.Model):
         step_display_curve = "hour"
         # Calculate delta between 2 dates
         delta = (end_date - start_date).days
-        if delta > 1 and delta < 32:
+        if delta > 0 and delta < 31:
             step_display_curve = "day"
             display_hourly_curves = True
-        elif delta >= 32 and delta <= 366:
+        elif delta >= 31 and delta <= 365:
             step = "month"
             step_display_curve = "month"
-        elif delta > 366:
+        elif delta > 365:
             step = "year"
             step_display_curve = "year"
 
@@ -194,7 +196,9 @@ class AccOperation(models.Model):
 
         query = """
             SELECT
-                date_trunc(%s, cdc.date_slot) AS date_slot,
+                date_trunc(%s,
+                    cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
+                    ) AS date_slot,
                 (SUM( (CASE
                     WHEN cdc.comp_data_type = 'cons'
                     THEN cdc.power ELSE 0 END) )/2) / 1000 as cons,
@@ -213,7 +217,8 @@ class AccOperation(models.Model):
                 AND ( cdc.acc_counter_id IN %s OR cdc.comp_data_type = 'prod' )
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
-            GROUP BY date_trunc(%s, cdc.date_slot)
+            GROUP BY date_trunc(%s,
+                cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
             ORDER BY date_slot ASC;
             """
         query_params = (
@@ -258,7 +263,9 @@ class AccOperation(models.Model):
 
         query = """
             SELECT
-                date_trunc('day', cdc.date_slot) AS date_slot,
+                date_trunc('day',
+                    cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
+                    ) AS date_slot,
                 (SUM( (CASE
                     WHEN cdc.comp_data_type = 'autocons'
                     THEN cdc.power ELSE 0 END) )/2) / 1000 as autocons,
@@ -275,7 +282,8 @@ class AccOperation(models.Model):
                     AND cdc.acc_counter_id IN %s
                     AND cdc.date_slot >= %s
                     AND cdc.date_slot <= %s
-                GROUP BY date_trunc('day', cdc.date_slot)
+                GROUP BY date_trunc('day',
+                    cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
                 ORDER BY date_slot ASC;
             """
         query_params = (
@@ -316,7 +324,9 @@ class AccOperation(models.Model):
 
         query = """
             SELECT
-                date_trunc(%s, cdc.date_slot) AS date_slot,
+                date_trunc(%s,
+                    cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
+                ) AS date_slot,
                 ((SUM((CASE
                     WHEN cdc.comp_data_type = 'prod' THEN cdc.power
                     ELSE 0 END))
@@ -334,7 +344,8 @@ class AccOperation(models.Model):
                 AND cdc.acc_operation_id IN %s
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
-            GROUP BY date_trunc(%s, cdc.date_slot)
+            GROUP BY date_trunc(%s,
+                cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
             ORDER BY date_slot ASC;
             """
         query_params = (
@@ -375,7 +386,9 @@ class AccOperation(models.Model):
 
         query = """
             SELECT
-                date_trunc('day', cdc.date_slot) AS date_slot,
+                date_trunc('day',
+                    cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris'
+                    ) AS date_slot,
                 ((SUM((CASE
                     WHEN cdc.comp_data_type = 'prod' THEN cdc.power
                     ELSE 0 END))
@@ -393,7 +406,8 @@ class AccOperation(models.Model):
                 AND cdc.acc_operation_id IN %s
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
-            GROUP BY date_trunc('day', cdc.date_slot)
+            GROUP BY date_trunc('day',
+                cdc.date_slot AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/Paris')
             ORDER BY date_slot ASC;
                 """
         query_params = (
@@ -416,11 +430,19 @@ class AccOperation(models.Model):
         }
         return cdc_jour
 
-    def get_date_min_max(self):
+    def get_date_min_max(self, partner_id=None):
         self.ensure_one()
-        last_record = self.get_last_cdc_record()
+        last_record = self.get_last_cdc_record(partner_id)
         date_max = last_record.date_slot.strftime("%d/%m/%Y")
-        date_min = self.date_start_contract.strftime("%d/%m/%Y")
+        if partner_id:
+            first_date = self.env["acc.counter.period"].search(
+                [("acc_operation_id", "=", self.id), ("partner_id", "=", partner_id)],
+                order="start_date ASC",
+                limit=1,
+            )
+            date_min = first_date.start_date.strftime("%d/%m/%Y")
+        else:
+            date_min = self.date_start_contract.strftime("%d/%m/%Y")
         return {"date_min": date_min, "date_max": date_max}
 
     # ------------------------------------------------------
@@ -495,7 +517,7 @@ class AccOperation(models.Model):
             chart_data.update(chart_data_prod)
 
         result_graph["chart_data"] = chart_data
-        result_graph.update(self.get_date_min_max())
+        result_graph.update(self.get_date_min_max(partner_id))
         result_graph.update(
             {
                 "start_date": start_date,