diff --git a/models/acc_operation.py b/models/acc_operation.py
index 5bd35b6739ac82342210aef96285aed09d44beb1..61f41cff512b6a26e98fe620f584427c597ceb65 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -1,10 +1,10 @@
 # Copyright 2021- Le Filament (https://le-filament.com)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from datetime import datetime, time
+from datetime import datetime
 
 from dateutil.relativedelta import relativedelta
 
-from odoo import _, models
+from odoo import _, fields, models
 from odoo.exceptions import ValidationError
 from odoo.osv import expression
 from odoo.tools import date_utils
@@ -47,14 +47,16 @@ class AccOperation(models.Model):
         start_date, end_date = self.get_interval("month", last_record)
         end_date_month = end_date + relativedelta(days=1)
         query = (
-            self._select_clause("month", ["cons", "prod", "autocons"])
+            self._select_clause(
+                date_slot="month", curve_types=["cons", "prod", "autocons"]
+            )
             + self._from_clause()
             + self._where_clause(
-                self.id,
-                start_date,
-                end_date_month,
+                operation_id=self.id,
+                start_date=start_date,
+                end_date=end_date_month,
             )
-            + self._group_clause("month")
+            + self._group_clause(date_slot="month")
             + self._order_clause()
         )
         self.env.cr.execute(query)
@@ -103,9 +105,8 @@ class AccOperation(models.Model):
         """
 
         # Convert end datetime to timezone
-        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)
+        cdc_datetime = fields.Datetime.context_timestamp(self, cdc_record.date_slot)
+        start_month, end_month = date_utils.get_month(cdc_datetime)
 
         if scale == "year":
             end_date = end_month
@@ -114,11 +115,11 @@ class AccOperation(models.Model):
             end_date = end_month
             start_date = start_month
         elif scale == "week":
-            end_date = last_day_end
-            start_date = last_day_end - relativedelta(days=7)
+            end_date = cdc_datetime.date()
+            start_date = cdc_datetime.date() - relativedelta(days=6)
         elif scale == "day":
-            end_date = last_day_end
-            start_date = last_day_start
+            end_date = cdc_datetime.date()
+            start_date = cdc_datetime.date()
         else:
             raise ValueError(
                 _(
@@ -222,8 +223,8 @@ class AccOperation(models.Model):
         Function to build WHERE section of query for retrieving curves
         @param
             int operation_id : id of operation for which curves should be retrieved
-            datetime start_date : first datetime to be retrieved
-            datetime end_date : last datetime to be retrieved
+            date start_date : first date to be retrieved
+            date end_date : last date to be retrieved
             int prm_id : id of PRM to be retrieved (optional)
             char extra_curve_type : extra curve to be retrieved (optional)
                 (allowed values : 'cons', 'autocons', 'allocons',
@@ -236,10 +237,13 @@ class AccOperation(models.Model):
             and not isinstance(end_date, datetime)
         ):
             raise ValidationError(_("WHERE clause parameters incorrect"))
+
+        start_datetime = self._convert_time(start_date)
+        end_datetime = self._convert_time(end_date)
         result = f"""
             WHERE cdc.acc_operation_id = {operation_id}
-            AND cdc.date_slot >= '{start_date}'
-            AND cdc.date_slot < '{end_date}'
+            AND cdc.date_slot >= '{start_datetime}'
+            AND cdc.date_slot < '{end_datetime}'
             """
         if prm_id and isinstance(prm_id, int):
             if extra_curve_type and extra_curve_type in (
@@ -303,13 +307,15 @@ class AccOperation(models.Model):
         data_prod = []
 
         query = (
-            self._select_clause(slot_type, ["cons", "autocons", "prod"])
+            self._select_clause(
+                date_slot=slot_type, curve_types=["cons", "autocons", "prod"]
+            )
             + self._from_clause()
             + self._where_clause(
                 self.id, start_date, end_date, prm_id, "prod", partner_id
             )
             + "AND cdc.comp_data_type IN ('autocons', 'cons', 'prod')"
-            + self._group_clause(slot_type)
+            + self._group_clause(date_slot=slot_type)
             + self._order_clause()
         )
         self.env.cr.execute(query)
@@ -348,10 +354,16 @@ class AccOperation(models.Model):
         data_allocons_histo = []
 
         query = (
-            self._select_clause("day", ["autocons", "allocons"])
+            self._select_clause(date_slot="day", curve_types=["autocons", "allocons"])
             + self._from_clause()
-            + self._where_clause(self.id, start_date, end_date, prm_id, partner_id)
-            + self._group_clause("day")
+            + self._where_clause(
+                operation_id=self.id,
+                start_date=start_date,
+                end_date=end_date,
+                prm_id=prm_id,
+                partner_id=partner_id,
+            )
+            + self._group_clause(date_slot="day")
             + self._order_clause()
         )
 
@@ -389,10 +401,18 @@ class AccOperation(models.Model):
         data_surplus = []
 
         query = (
-            self._select_clause(slot_type, ["autoprod", "surplus"])
+            self._select_clause(
+                date_slot=slot_type, curve_types=["autoprod", "surplus"]
+            )
             + self._from_clause()
-            + self._where_clause(self.id, start_date, end_date, prm_id, partner_id)
-            + self._group_clause(slot_type)
+            + self._where_clause(
+                operation_id=self.id,
+                start_date=start_date,
+                end_date=end_date,
+                prm_id=prm_id,
+                partner_id=partner_id,
+            )
+            + self._group_clause(date_slot=slot_type)
             + self._order_clause()
         )
 
@@ -428,10 +448,16 @@ class AccOperation(models.Model):
         data_surplus_histo = []
 
         query = (
-            self._select_clause("day", ["autoprod", "surplus"])
+            self._select_clause(date_slot="day", curve_types=["autoprod", "surplus"])
             + self._from_clause()
-            + self._where_clause(self.id, start_date, end_date, prm_id, partner_id)
-            + self._group_clause("day")
+            + self._where_clause(
+                operation_id=self.id,
+                start_date=start_date,
+                end_date=end_date,
+                prm_id=prm_id,
+                partner_id=partner_id,
+            )
+            + self._group_clause(date_slot="day")
             + self._order_clause()
         )
         self.env.cr.execute(query)
@@ -477,12 +503,12 @@ class AccOperation(models.Model):
         """
         Fonction appelée pour l'affichage des courbes globales
         sur le portail
-        :param: start_date: date début
-                end_date: date de fin
-                partner_id: données uniquement de ce contact
-                prm_id: données uniquement de ce PRM (mutuellement exclusif de
+        :param: date start_date: date début
+                date end_date: date de fin
+                int partner_id: données uniquement de ce contact
+                int prm_id: données uniquement de ce PRM (mutuellement exclusif de
                     partner_id)
-                data_type: type de courbes à afficher:
+                char data_type: type de courbes à afficher:
                   - "pmo" : vue globale (cons + prod sans filtrage)
                   - "cons" : vue mon suivi conso (avec filtrage possible)
                   - "prod" : vue mon suivi production (avec filtrage possible)
@@ -491,7 +517,7 @@ class AccOperation(models.Model):
         self.ensure_one()
         result_graph = {}
         start_date = datetime.strptime(start_date, "%d/%m/%Y")
-        end_date = datetime.combine(datetime.strptime(end_date, "%d/%m/%Y"), time.max)
+        end_date = datetime.strptime(end_date, "%d/%m/%Y") + relativedelta(days=1)
         display_hourly_curves, step_curve, step_display_curve = self.get_step_from_date(
             start_date=start_date, end_date=end_date
         )