diff --git a/models/acc_operation.py b/models/acc_operation.py
index 6c372a849d6b097c5fe121f4acf57ecc212afb53..6496a27aeaaeebd5da9364a014057bf89058d785 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -15,16 +15,17 @@ from odoo.addons.api_connector.tools.date_utils import utc_to_local
def get_algo_description(algo):
desc = {
"prorata": "La clé de répartition est calculée automatiquement chaque mois,"
- " au prorata de la consommation de chacun des consommateurs.",
+ " au prorata de la consommation de chacun des consommateurs.",
"static": "La clé de répartition est calculée automatiquement chaque mois, "
- "en fonction des coefficients de répartition communiqués "
- "initialement à Enedis.",
+ "en fonction des coefficients de répartition communiqués "
+ "initialement à Enedis.",
"dyn_perso_send": "",
"dyn_perso_compute": "",
}
return desc.get(algo, f"Pas de descritpion associée a {algo}")
+
class AccOperation(models.Model):
_inherit = ["acc.operation"]
@@ -168,18 +169,19 @@ class AccOperation(models.Model):
@api.onchange("type_algo")
def on_change_algo(self):
-
self.algo_description = get_algo_description(self.type_algo)
# ------------------------------------------------------
# CRUD methods (ORM overrides)
# ------------------------------------------------------
def write(self, vals):
-
if vals.get("type_algo"):
- vals.update({'algo_description': get_algo_description(vals.get("type_algo"))})
+ vals.update(
+ {"algo_description": get_algo_description(vals.get("type_algo"))}
+ )
res = super().write(vals)
return res
+
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
@@ -219,6 +221,8 @@ class AccOperation(models.Model):
horodatages = list(OrderedDict.fromkeys(keys))
+ counter_period = self.get_counter_by_period_day(date_list=horodatages)
+
for time_slot in horodatages:
keys = self.env["acc.repartition.counter"].search(
[
@@ -228,17 +232,23 @@ class AccOperation(models.Model):
)
body = []
for key in keys:
- body.append({"id": key.acc_counter_id.name, "key": key.weight})
- data = {"timestamp": time_slot.strftime("%Y%m%dT%H%M%SZ"), "body": body}
- job_description = (
- f"{self.name} - Send repartition key at {data.get('timestamp')}"
- )
- try:
- self.with_delay(description=job_description).send_repartition_key(
- key=data
+ if key.acc_counter_id.name in counter_period.get(
+ time_slot.replace(hour=0, minute=0, second=0)
+ ):
+ body.append({"id": key.acc_counter_id.name, "key": key.weight})
+
+ if body:
+ data = {"timestamp": time_slot.strftime("%Y%m%dT%H%M%SZ"), "body": body}
+
+ job_description = (
+ f"{self.name} - Send repartition key at {data.get('timestamp')}"
)
- except ValidationError as exc:
- raise UserError(_(str(exc))) from exc
+ try:
+ self.with_delay(description=job_description).send_repartition_key(
+ key=data
+ )
+ except ValidationError as exc:
+ raise UserError(_(str(exc))) from exc
def get_repartition_data_for_csv(self):
"""
@@ -340,3 +350,34 @@ class AccOperation(models.Model):
}
)
+ def get_counter_by_period_day(self, date_list):
+ """
+ return counter in period for simple day
+ {
+ day1 : [counter...],
+ day2 : [counter...],
+ }
+ """
+ counter_period = {}
+ res = [
+ datetime.strptime(d, "%d-%m-%y")
+ for d in list(
+ OrderedDict.fromkeys(
+ [h.strftime("%d-%m-%y") for h in date_list]
+ )
+ )
+ ]
+ for date in res:
+ counter_period[date] = (
+ self.env["acc.counter.period"]
+ ._get_periods_from_date(
+ [
+ ("acc_operation_id", "=", self.id),
+ ("prm_type", "=", "delivery"),
+ ],
+ date,
+ )
+ .mapped("acc_counter_id.name")
+ )
+
+ return counter_period