Skip to content
Extraits de code Groupes Projets
Valider c8498fa1 rédigé par Julien - Le Filament's avatar Julien - Le Filament
Parcourir les fichiers

[UPD] optimize key creation

parent bfcc05cc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!14[UPD] optimize key creation
...@@ -100,8 +100,8 @@ class AccOperation(models.Model): ...@@ -100,8 +100,8 @@ class AccOperation(models.Model):
repartition = self.env["acc.repartition.keys"].create({"operation_id": self.id}) repartition = self.env["acc.repartition.keys"].create({"operation_id": self.id})
data = None data = None
for piority in self.acc_priority_group_ids: for priority in self.acc_priority_group_ids:
data = piority.compute(data) data = priority.compute(data)
if not data: if not data:
raise ValidationError( raise ValidationError(
...@@ -115,36 +115,36 @@ class AccOperation(models.Model): ...@@ -115,36 +115,36 @@ class AccOperation(models.Model):
total_affecte = sum(affect.values()) total_affecte = sum(affect.values())
slot_result = {} slot_result = {}
for counter in affect: for counter_id in affect:
counter_id = self.env["acc.counter"].search(
[("name", "=", counter)]
)
if total_affecte == 0: if total_affecte == 0:
weight = 0.0 weight = 0.0
else: 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()) total_weight = sum(slot_result.values())
max_value = None max_value = None
if total_weight > 100.0: if total_weight > 100.0:
max_value = max(slot_result.values()) 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 max_value is not None:
if slot_result[result] == max_value: if slot_result[counter] == max_value:
slot_result[result] -= 0.0000001 slot_result[counter] -= 0.0000001
slot_line.append(
self.env["acc.repartition.counter"].create(
{ {
"acc_repartition_id": repartition.id, "acc_repartition_id": repartition.id,
"time_slot": slot, "time_slot": slot,
"weight": slot_result[result], "weight": slot_result[counter],
"acc_counter_id": result, "acc_counter_id": counter.id,
} }
) )
self.env["acc.repartition.counter"].create(slot_line)
# ------------------------------------------------------ # ------------------------------------------------------
# Computed fields / Search Fields # Computed fields / Search Fields
......
...@@ -158,13 +158,11 @@ class AccPriorityGroup(models.Model): ...@@ -158,13 +158,11 @@ class AccPriorityGroup(models.Model):
if not data.get(slot).get("affect"): if not data.get(slot).get("affect"):
data[slot]["affect"] = {} data[slot]["affect"] = {}
for counter in self.acc_priority_group_counter_ids.acc_counter_id.mapped( for counter in self.acc_priority_group_counter_ids.acc_counter_id:
"name"
):
if prod == 0 or priority_counters_conso_sum == 0: if prod == 0 or priority_counters_conso_sum == 0:
part_a_affecter = 0.0 part_a_affecter = 0.0
else: else:
conso_k = data.get(slot).get("conso").get(counter) conso_k = data.get(slot).get("conso").get(counter.name)
part_a_affecter = min( part_a_affecter = min(
conso_k, prod * (conso_k / priority_counters_conso_sum) conso_k, prod * (conso_k / priority_counters_conso_sum)
) )
......
...@@ -7,7 +7,7 @@ class AccRepartitionCounter(models.Model): ...@@ -7,7 +7,7 @@ class AccRepartitionCounter(models.Model):
acc_repartition_id = fields.Many2one("acc.repartition.keys", "Clé", required=True) acc_repartition_id = fields.Many2one("acc.repartition.keys", "Clé", required=True)
weight = fields.Float(string="Répartition en pourcentage", required=False) 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_counter_id = fields.Many2one("acc.counter", string="Compteur", required=True)
acc_operation_id = fields.Many2one( acc_operation_id = fields.Many2one(
comodel_name="acc.operation", compute="_compute_operation_id", store=True comodel_name="acc.operation", compute="_compute_operation_id", store=True
......
...@@ -49,7 +49,6 @@ class AccRepartitionKeysComputeWizard(models.TransientModel): ...@@ -49,7 +49,6 @@ class AccRepartitionKeysComputeWizard(models.TransientModel):
# ------------------------------------------------------ # ------------------------------------------------------
def send_keys(self): def send_keys(self):
if not self.operation_id.acc_priority_group_ids: if not self.operation_id.acc_priority_group_ids:
raise ValidationError( raise ValidationError(
_("Aucune priorité n'est définie pour cette opération.") _("Aucune priorité n'est définie pour cette opération.")
...@@ -58,13 +57,13 @@ class AccRepartitionKeysComputeWizard(models.TransientModel): ...@@ -58,13 +57,13 @@ class AccRepartitionKeysComputeWizard(models.TransientModel):
self.operation_id.action_send_repartition_keys() self.operation_id.action_send_repartition_keys()
def get_csv(self): def get_csv(self):
if not self.operation_id.acc_priority_group_ids: if not self.operation_id.acc_priority_group_ids:
raise ValidationError( raise ValidationError(
_("Aucune priorité n'est définie pour cette opération.") _("Aucune priorité n'est définie pour cette opération.")
) )
job_description = f"{self.operation_id.name} - Generate repartition CSV " job_description = f"{self.operation_id.name} - Generate repartition CSV "
try: try:
self.operation_id.with_delay( self.operation_id.with_delay(
description=job_description description=job_description
...@@ -75,7 +74,6 @@ class AccRepartitionKeysComputeWizard(models.TransientModel): ...@@ -75,7 +74,6 @@ class AccRepartitionKeysComputeWizard(models.TransientModel):
return {"type": "ir.actions.act_window_close"} return {"type": "ir.actions.act_window_close"}
def compute_keys(self): def compute_keys(self):
if not self.operation_id.acc_priority_group_ids: if not self.operation_id.acc_priority_group_ids:
raise ValidationError( raise ValidationError(
_("Aucune priorité n'est définie pour cette opération.") _("Aucune priorité n'est définie pour cette opération.")
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter