From 6913d697f0eac8e56acf60d8e97f67ce63f5f883 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Mon, 11 Sep 2023 14:55:42 +0200
Subject: [PATCH] [UPD]Update function find date

---
 models/acc_operation.py | 62 ++++++++++++++++++++++++++++-------------
 1 file changed, 42 insertions(+), 20 deletions(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index fcbc99a..1dbfd7c 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -16,13 +16,14 @@ class AccOperation(models.Model):
     _inherit = "acc.operation"
 
     def prepare_values(self):
+        last_record = self.get_the_last_day()
 
-        date_day_start, date_day_end = self.get_last_day("day")
+        date_day_start, date_day_end = self.get_last_day("day", last_record)
         last_day = date_day_start.strftime("%d %B %Y")
         date_day_start = date_day_start.strftime("%Y-%m-%d")
         date_day_end = date_day_end.strftime("%Y-%m-%d")
 
-        date_week_start, date_week_end = self.get_last_day("week")
+        date_week_start, date_week_end = self.get_last_day("week", last_record)
         last_week = (
             date_week_start.strftime("%d %B %Y")
             + "-"
@@ -31,7 +32,7 @@ class AccOperation(models.Model):
         date_week_start = date_week_start.strftime("%Y-%m-%d")
         date_week_end = date_week_end.strftime("%Y-%m-%d")
 
-        date_month_start, date_month_end = self.get_last_day("month")
+        date_month_start, date_month_end = self.get_last_day("month", last_record)
         last_month = (
             date_month_start.strftime("%d %B %Y")
             + "-"
@@ -40,7 +41,7 @@ class AccOperation(models.Model):
         date_month_start = date_month_start.strftime("%Y-%m-%d")
         date_month_end = date_month_end.strftime("%Y-%m-%d")
 
-        date_semestre_start, date_semestre_end = self.get_last_day("semestre")
+        date_semestre_start, date_semestre_end = self.get_last_day("semestre", last_record)
         last_semester = (
             date_semestre_start.strftime("%d %B %Y")
             + "-"
@@ -49,7 +50,7 @@ class AccOperation(models.Model):
         date_semestre_start = date_semestre_start.strftime("%Y-%m-%d")
         date_semestre_end = date_semestre_end.strftime("%Y-%m-%d")
 
-        date_year_start, date_year_end = self.get_last_day("year")
+        date_year_start, date_year_end = self.get_last_day("year", last_record)
         last_year = (
             date_year_start.strftime("%d %B %Y")
             + "- "
@@ -107,7 +108,8 @@ class AccOperation(models.Model):
         :return: la somme de l'autoconso totale de tous les consommateurs
         """
         # Récupère les dates du dernier mois disponible
-        date_start, date_end = self.get_last_day("month")
+        last_record = self.get_the_last_day()
+        date_start, date_end = self.get_last_day("month", last_record)
         # Conso Totale
         autoconso_ids = self.env["acc.enedis.cdc"].search(
             [
@@ -131,7 +133,8 @@ class AccOperation(models.Model):
                 la date de début de mois
         """
         # Récupère les dates du dernier mois disponible
-        date_start, date_end = self.get_last_day("month")
+        last_record = self.get_the_last_day()
+        date_start, date_end = self.get_last_day("month", last_record)
         query = """
             SELECT
                 date_trunc('month', A.date_slot) AS date_slot,
@@ -176,7 +179,26 @@ class AccOperation(models.Model):
 
         return puiss_tot
 
-    def get_last_day(self, scale):
+    def get_the_last_day(self):
+        """
+        Fonction retournant la date du dernier enregistrement
+        """
+
+        # Get last date slot recorded
+        last_record = self.env["acc.enedis.cdc"].search(
+            [
+                ("acc_operation_id", "in", self.ids),
+            ],
+            limit=1,
+            order="date_slot DESC",
+        )
+
+        if not last_record:
+            raise ValidationError(_("L'opération ne possède pas de données"))
+
+        return last_record
+
+    def get_last_day(self, scale, last_record):
         """
         Fonction retournant une date de début et une date de fin.
         Ces dates sont calculées en fonction de l'échelle choisie
@@ -205,16 +227,16 @@ class AccOperation(models.Model):
         """
 
         # Get last date slot recorded
-        last_record = self.env["acc.enedis.cdc"].search(
-            [
-                ("acc_operation_id", "in", self.ids),
-            ],
-            limit=1,
-            order="date_slot DESC",
-        )
-
-        if not last_record:
-            raise ValidationError(_("L'opération ne possède pas de données"))
+        # last_record = self.env["acc.enedis.cdc"].search(
+        #     [
+        #         ("acc_operation_id", "in", self.ids),
+        #     ],
+        #     limit=1,
+        #     order="date_slot DESC",
+        # )
+        #
+        # if not last_record:
+        #     raise ValidationError(_("L'opération ne possède pas de données"))
         # Convert end datetime to timezone
         last_day_start = last_record.date_slot.replace(hour=0, minute=0, second=0)
         last_day_end = last_day_start + relativedelta(days=1)
@@ -630,8 +652,8 @@ class AccOperation(models.Model):
             chart_data.update(chart_data_prod)
 
         result_graph["chart_data"] = chart_data
-
-        date_deb, date_max = self.get_last_day("day")
+        last_record = self.get_the_last_day()
+        date_deb, date_max = self.get_last_day("day", last_record)
         date_max = date_max.strftime("%d/%m/%Y")
         date_min = self.get_first_day()
         date_min = date_min.strftime("%d/%m/%Y")
-- 
GitLab