This commit is contained in:
Ladebeze66 2025-03-19 14:06:15 +01:00
parent eaba620782
commit e34c989d34
3 changed files with 23 additions and 49 deletions

View File

@ -0,0 +1,3 @@
[
10157
]

View File

@ -42,18 +42,7 @@ class TicketManager:
except Exception as e:
print_error(f" Erreur inattendue lors de '{method}' sur '{model}': {e}")
return None
def extract_invalid_field(self, error_message):
"""Extrait le nom du champ invalide depuis un message d'erreur RPC"""
print(f"Analyse du message d'erreur : {error_message}") #debug
match = re.search(r"la colonne ([\w.]+) n'existe pas", error_message)
if match:
print(f"Champ détecté comme invalide : {match.group(1)}") #debug
return match.group(1) #Retourne le champ détecté
print("Aucun champ invalide détecté") #debug
return None
def get_model_fields(self, model_name):
"""Récupére tous les champs disponibles pour un modèle donné, en filtrant ceux qui ne sont pas exploitables"""
fields_info = self._safe_execute(model_name, 'fields_get', [], ['name', 'type'])
@ -76,43 +65,25 @@ class TicketManager:
def get_ticket_by_id(self, ticket_id):
"""Récupère les détails d'un ticket par son ID et exclut dynamiquement les champs invalides"""
fields_to_read = self.get_model_fields(self.model_name) # Récupère tous les champs
excluded_fields = set() # Liste des champs à exclure
while True:
try:
# Mise à jour de fields_to_read en supprimant les champs invalides
valid_fields = [field for field in fields_to_read if field not in excluded_fields]
if not valid_fields:
print_error("Aucun champ valide disponible pour la requête.")
return None
# Récupérer les données du ticket avec les champs filtrés
ticket_data = self._safe_execute(self.model_name, 'read', [ticket_id], valid_fields)
if not ticket_data:
print_error(f"Aucun ticket trouvé avec l'ID {ticket_id}")
return None
# Sauvegarde des données brutes pour analyse
self.save_raw_ticket_data(ticket_data, f"ticket_{ticket_id}_raw.json")
return ticket_data[0]
except odoorpc.error.RPCError as e:
error_message = str(e)
print_error(f"Erreur RPC détectée : {error_message}")
# Identifier le champ problématique
invalid_field = self.extract_invalid_field(error_message)
if invalid_field:
print(f"Exclusion du champ invalide : {invalid_field}")
excluded_fields.add(invalid_field)
# Relancer la boucle immédiatement avec le champ exclu
continue
else:
print_error("Impossible d'identifier le champ problématique.")
return None
ticket_data = self._safe_execute(self.model_name, 'read', [ticket_id], fields_to_read)
if ticket_data:
ticket = self.resolve_relational_fields(ticket_data[0])
self.save_raw_ticket_data(ticket, f"ticket_{ticket_id}_raw.json")
return ticket
print_error(f"Aucun ticket trouvé avec l'ID {ticket_id}")
return None
def resolve_relational_fields(self, ticket):
"""Ajoute les valeurs des champs relationnels"""
fields_info = self._safe_execute(self.model_name, 'fields_get', [], ['type'])
for field, info in fields_info.items():
if info.get("type") == "many2one" and isinstance(ticket.get(field), list):
ticket[f"{field}_value"] = ticket[field[1]] #Ajoute la valeur lisible en plus du ID
return ticket
def get_ticket_by_code(self, ticket_code):
"""Récupérer un ticket via son code"""