mirror of
https://github.com/Ladebeze66/odoo_toolkit.git
synced 2025-12-17 04:57:49 +01:00
J5-6
This commit is contained in:
parent
31688639f8
commit
2538c63b9d
Binary file not shown.
@ -1,3 +0,0 @@
|
|||||||
[
|
|
||||||
10908
|
|
||||||
]
|
|
||||||
@ -1,9 +1,11 @@
|
|||||||
from odoo_connection import OdooConnection
|
from odoo_connection import OdooConnection
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
from utils import save_json, ensure_export_directory, print_error
|
from utils import save_json, ensure_export_directory, print_error
|
||||||
from config import EXPORT_DIR
|
from config import EXPORT_DIR
|
||||||
from data_filter import filter_ticket_data
|
from data_filter import filter_ticket_data
|
||||||
|
import odoorpc
|
||||||
|
|
||||||
class TicketManager:
|
class TicketManager:
|
||||||
"""Gestionnaire de tickets simplifié avec seulement les fonctionnalités essentielles"""
|
"""Gestionnaire de tickets simplifié avec seulement les fonctionnalités essentielles"""
|
||||||
@ -41,13 +43,23 @@ class TicketManager:
|
|||||||
print_error(f" Erreur inattendue lors de '{method}' sur '{model}': {e}")
|
print_error(f" Erreur inattendue lors de '{method}' sur '{model}': {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def extract_invalid_field(self, error_message):
|
||||||
|
"""Extrait le nom du champ invalide depuis un message d'erreur RPC"""
|
||||||
|
match = re.search(r"la colonne ([\w.]+) n'existe pas", error_message)
|
||||||
|
if match:
|
||||||
|
return match.group(1) #Retourne le champ détecté
|
||||||
|
return None
|
||||||
def get_model_fields(self, model_name):
|
def get_model_fields(self, model_name):
|
||||||
"""Récupére tous les champs disponibles pour un modèle donné"""
|
"""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'])
|
fields_info = self._safe_execute(model_name, 'fields_get', [], ['name', 'type'])
|
||||||
if not fields_info:
|
if not fields_info:
|
||||||
print_error(f"Impossible de récupérer les champs pour {model_name}")
|
print_error(f"Impossible de récupérer les champs pour {model_name}")
|
||||||
return []
|
return []
|
||||||
return list(fields_info.keys()) #Retourne la liste des champs
|
|
||||||
|
#On filtre les champs qui ne sont pas exploitables
|
||||||
|
invalid_types = []
|
||||||
|
valid_fields = [field for field, info in fields_info.items() if info.get("type") not in invalid_types]
|
||||||
|
return valid_fields #Retourne la liste des champs exploitables
|
||||||
|
|
||||||
def save_raw_ticket_data(self, ticket_data, filename="raw_ticket_data.json"):
|
def save_raw_ticket_data(self, ticket_data, filename="raw_ticket_data.json"):
|
||||||
"""Sauvegarde les données brutes du ticket dans un fichier JSON"""
|
"""Sauvegarde les données brutes du ticket dans un fichier JSON"""
|
||||||
@ -59,18 +71,34 @@ class TicketManager:
|
|||||||
def get_ticket_by_id(self, ticket_id):
|
def get_ticket_by_id(self, ticket_id):
|
||||||
""" Récupère les détails d'un ticket par son ID et applique le filtre """
|
""" Récupère les détails d'un ticket par son ID et applique le filtre """
|
||||||
fields_to_read = self.get_model_fields(self.model_name) #Récupère tous les champs disponibles pour le modèle
|
fields_to_read = self.get_model_fields(self.model_name) #Récupère tous les champs disponibles pour le modèle
|
||||||
|
excluded_fields = set() # Liste des champs à exlure
|
||||||
# Récupérer les données du ticket
|
|
||||||
ticket_data = self._safe_execute(self.model_name, 'read', [ticket_id], fields_to_read)
|
|
||||||
|
|
||||||
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]
|
while True:
|
||||||
|
try:
|
||||||
|
#Récupérer les données du ticket avec les champs filtrés
|
||||||
|
valid_fields = [field for field in fields_to_read if field not in excluded_fields]
|
||||||
|
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)
|
||||||
|
else:
|
||||||
|
print_error(f"Impossible d'identifier le champ problématique. Arrêt de la récupération des données.")
|
||||||
|
return None
|
||||||
|
|
||||||
def get_ticket_by_code(self, ticket_code):
|
def get_ticket_by_code(self, ticket_code):
|
||||||
"""Récupérer un ticket via son code"""
|
"""Récupérer un ticket via son code"""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user