From bfcc05ccb9555a3b3dc88135b19445475dd305af Mon Sep 17 00:00:00 2001
From: Julien - Le Filament <julien@le-filament.com>
Date: Mon, 4 Nov 2024 11:56:42 +0100
Subject: [PATCH] 16.0 review

---
 models/acc_operation.py                       | 35 ++++++++++---------
 wizard/acc_repartition_keys_compute_wizard.py | 19 ++++++++++
 2 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/models/acc_operation.py b/models/acc_operation.py
index f43c4c3..2bd2454 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -108,10 +108,13 @@ class AccOperation(models.Model):
                 _("Pas de données brute pour le mois précedent présente")
             )
         # todo : ajouter la verification de coherence des données
+
         for slot in data:
             affect = data.get(slot).get("affect")
             if affect:
                 total_affecte = sum(affect.values())
+
+                slot_result = {}
                 for counter in affect:
                     counter_id = self.env["acc.counter"].search(
                         [("name", "=", counter)]
@@ -120,29 +123,29 @@ class AccOperation(models.Model):
                         weight = 0.0
                     else:
                         weight = round((affect.get(counter) * 100) / total_affecte, 8)
+
+                    slot_result[counter_id.id] = weight
+
+                total_weight = sum(slot_result.values())
+                max_value = None
+                if total_weight > 100.0:
+                    max_value = max(slot_result.values())
+
+                for result in slot_result:
+                    if max_value is not None:
+                        if slot_result[result] == max_value:
+                            slot_result[result] -= 0.0000001
+
                     self.env["acc.repartition.counter"].create(
                         {
                             "acc_repartition_id": repartition.id,
                             "time_slot": slot,
-                            "weight": weight,
-                            "acc_counter_id": counter_id.id,
-                        }
-                    )
-            else:
-                # aucune consommation n a été affecté, on envoi des clé a zero
-                for counter in data.get(slot).get("conso"):
-                    counter_id = self.env["acc.counter"].search(
-                        [("name", "=", counter)]
-                    )
-                    self.env["acc.repartition.counter"].create(
-                        {
-                            "acc_repartition_id": repartition.id,
-                            "time_slot": slot,
-                            "weight": 0,
-                            "acc_counter_id": counter_id.id,
+                            "weight": slot_result[result],
+                            "acc_counter_id": result,
                         }
                     )
 
+
     # ------------------------------------------------------
     # Computed fields / Search Fields
     # ------------------------------------------------------
diff --git a/wizard/acc_repartition_keys_compute_wizard.py b/wizard/acc_repartition_keys_compute_wizard.py
index e4e830e..5823704 100644
--- a/wizard/acc_repartition_keys_compute_wizard.py
+++ b/wizard/acc_repartition_keys_compute_wizard.py
@@ -49,9 +49,21 @@ class AccRepartitionKeysComputeWizard(models.TransientModel):
     # ------------------------------------------------------
 
     def send_keys(self):
+
+        if not self.operation_id.acc_priority_group_ids:
+            raise ValidationError(
+                _("Aucune priorité n'est définie pour cette opération.")
+            )
+
         self.operation_id.action_send_repartition_keys()
 
     def get_csv(self):
+
+        if not self.operation_id.acc_priority_group_ids:
+            raise ValidationError(
+                _("Aucune priorité n'est définie pour cette opération.")
+            )
+
         job_description = f"{self.operation_id.name} - Generate repartition CSV "
         try:
             self.operation_id.with_delay(
@@ -63,7 +75,14 @@ class AccRepartitionKeysComputeWizard(models.TransientModel):
         return {"type": "ir.actions.act_window_close"}
 
     def compute_keys(self):
+
+        if not self.operation_id.acc_priority_group_ids:
+            raise ValidationError(
+                _("Aucune priorité n'est définie pour cette opération.")
+            )
+
         job_description = f"{self.operation_id.name} - Generate repartition key "
+
         try:
             self.operation_id.with_delay(
                 description=job_description
-- 
GitLab