From c8498fa183c3c0d72f2ddcd122220e3c994bf5a2 Mon Sep 17 00:00:00 2001 From: Julien Ortet <julien@le-filament.com> Date: Mon, 4 Nov 2024 14:14:01 +0100 Subject: [PATCH] [UPD] optimize key creation --- models/acc_operation.py | 30 +++++++++---------- models/acc_priority_group.py | 6 ++-- models/acc_repartition_counter.py | 2 +- wizard/acc_repartition_keys_compute_wizard.py | 4 +-- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/models/acc_operation.py b/models/acc_operation.py index 2bd2454..1b69941 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -100,8 +100,8 @@ class AccOperation(models.Model): repartition = self.env["acc.repartition.keys"].create({"operation_id": self.id}) data = None - for piority in self.acc_priority_group_ids: - data = piority.compute(data) + for priority in self.acc_priority_group_ids: + data = priority.compute(data) if not data: raise ValidationError( @@ -115,36 +115,36 @@ class AccOperation(models.Model): total_affecte = sum(affect.values()) slot_result = {} - for counter in affect: - counter_id = self.env["acc.counter"].search( - [("name", "=", counter)] - ) + for counter_id in affect: if total_affecte == 0: weight = 0.0 else: - weight = round((affect.get(counter) * 100) / total_affecte, 8) + weight = round( + (affect.get(counter_id) * 100) / total_affecte, 8 + ) - slot_result[counter_id.id] = weight + slot_result[counter_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: + slot_line = [] + for counter 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( + if slot_result[counter] == max_value: + slot_result[counter] -= 0.0000001 + slot_line.append( { "acc_repartition_id": repartition.id, "time_slot": slot, - "weight": slot_result[result], - "acc_counter_id": result, + "weight": slot_result[counter], + "acc_counter_id": counter.id, } ) + self.env["acc.repartition.counter"].create(slot_line) # ------------------------------------------------------ # Computed fields / Search Fields diff --git a/models/acc_priority_group.py b/models/acc_priority_group.py index 4aeec6f..7f8b139 100644 --- a/models/acc_priority_group.py +++ b/models/acc_priority_group.py @@ -158,13 +158,11 @@ class AccPriorityGroup(models.Model): if not data.get(slot).get("affect"): data[slot]["affect"] = {} - for counter in self.acc_priority_group_counter_ids.acc_counter_id.mapped( - "name" - ): + for counter in self.acc_priority_group_counter_ids.acc_counter_id: if prod == 0 or priority_counters_conso_sum == 0: part_a_affecter = 0.0 else: - conso_k = data.get(slot).get("conso").get(counter) + conso_k = data.get(slot).get("conso").get(counter.name) part_a_affecter = min( conso_k, prod * (conso_k / priority_counters_conso_sum) ) diff --git a/models/acc_repartition_counter.py b/models/acc_repartition_counter.py index e88844c..dd316bf 100644 --- a/models/acc_repartition_counter.py +++ b/models/acc_repartition_counter.py @@ -7,7 +7,7 @@ class AccRepartitionCounter(models.Model): acc_repartition_id = fields.Many2one("acc.repartition.keys", "Clé", required=True) weight = fields.Float(string="Répartition en pourcentage", required=False) - time_slot = fields.Datetime("Horodatage de la clé") + time_slot = fields.Datetime("Horodatage de la clé", required=True) acc_counter_id = fields.Many2one("acc.counter", string="Compteur", required=True) acc_operation_id = fields.Many2one( comodel_name="acc.operation", compute="_compute_operation_id", store=True diff --git a/wizard/acc_repartition_keys_compute_wizard.py b/wizard/acc_repartition_keys_compute_wizard.py index 5823704..eb7a3fe 100644 --- a/wizard/acc_repartition_keys_compute_wizard.py +++ b/wizard/acc_repartition_keys_compute_wizard.py @@ -49,7 +49,6 @@ 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.") @@ -58,13 +57,13 @@ class AccRepartitionKeysComputeWizard(models.TransientModel): 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( description=job_description @@ -75,7 +74,6 @@ 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.") -- GitLab