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