diff --git a/models/acc_operation.py b/models/acc_operation.py index 4c203b27e6a0af90508a1f10f0f971305820b4c4..80300be7817fb4d8678d29b7719310b9e92f7c66 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -7,7 +7,7 @@ from dateutil import tz from dateutil.relativedelta import relativedelta from odoo import _, fields, models -from odoo.exceptions import UserError +from odoo.exceptions import UserError, ValidationError _logger = logging.getLogger(__name__) @@ -280,7 +280,7 @@ class AccOperation(models.Model): list_injection = [] list_soutirage = [] - for usage_point in usage_points: + for usage_point in sorted(usage_points, key=lambda p: date.fromisoformat(p["start"])): usage_point_start = date.fromisoformat(usage_point["start"]) usage_point_end = ( date.fromisoformat(usage_point["end"]) @@ -303,7 +303,6 @@ class AccOperation(models.Model): ) counter_id = self.env["acc.counter"].search( [ - ("acc_operation_id", "=", self.id), ("name", "=", usage_point["usage_point_id"]), ] ) @@ -328,18 +327,25 @@ class AccOperation(models.Model): "fin différente, mise à jour date de fin<br/>" ) else: - self.env["acc.counter.period"].create( - { - "acc_counter_id": counter_id.id, - "prm_type": usage_point_prm_type, - "acc_operation_id": self.id, - "date_start": usage_point_start, - "date_end": usage_point_end, - } - ) - message += ( - "période inexistante avec les mêmes dates : création<br/>" - ) + try: + self.env["acc.counter.period"].create( + { + "acc_counter_id": counter_id.id, + "prm_type": usage_point_prm_type, + "acc_operation_id": self.id, + "date_start": usage_point_start, + "date_end": usage_point_end, + } + ) + message += ( + "période inexistante avec les mêmes dates : création<br/>" + ) + except ValidationError as e: + message += ( + "<strong>erreur lors de la tentative de création d'une nouvelle période, à vérifier manuellement :</strong><br/>" + + str(e) + "<br/>" + ) + elif len(counter_id) > 1: message += "Plusieurs PRMs trouvés avec ce numéro - pas de modif<br/>" else: @@ -353,21 +359,27 @@ class AccOperation(models.Model): or self.date_start_contract > usage_point_start ): self.date_start_contract = usage_point_start - counter_id = self.env["acc.counter"].create( - { - "name": usage_point["usage_point_id"], - } - ) - self.env["acc.counter.period"].create( - { - "acc_counter_id": counter_id.id, - "prm_type": usage_point_prm_type, - "acc_operation_id": self.id, - "date_start": usage_point_start, - "date_end": usage_point_end, - } - ) - message += "Fin de la création du PRM<br/>" + try: + counter_id = self.env["acc.counter"].create( + { + "name": usage_point["usage_point_id"], + } + ) + self.env["acc.counter.period"].create( + { + "acc_counter_id": counter_id.id, + "prm_type": usage_point_prm_type, + "acc_operation_id": self.id, + "date_start": usage_point_start, + "date_end": usage_point_end, + } + ) + message += "Fin de la création du PRM<br/>" + except ValidationError as e: + message += ( + "<strong>erreur lors de la tentative de création d'un PRM et/ou " + "d'une nouvelle période, à vérifier manuellement :<strong><br/>" + str(e) + "<br/>" + ) if usage_point_prm_type == "injection": if usage_point["usage_point_id"] not in list_injection: list_injection.append(usage_point["usage_point_id"])