From de001a036821f2822d1b9a5ef50cd2bfc4787a3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Tue, 26 Dec 2023 13:39:33 +0100
Subject: [PATCH] [FIX] manage errors
---
models/acc_operation.py | 72 ++++++++++++++++++++++++-----------------
1 file changed, 42 insertions(+), 30 deletions(-)
diff --git a/models/acc_operation.py b/models/acc_operation.py
index 4c203b2..80300be 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"])
--
GitLab