diff --git a/__pycache__/data_filter.cpython-312.pyc b/__pycache__/data_filter.cpython-312.pyc index a4b99e9..5101f40 100644 Binary files a/__pycache__/data_filter.cpython-312.pyc and b/__pycache__/data_filter.cpython-312.pyc differ diff --git a/__pycache__/ticket_manager.cpython-312.pyc b/__pycache__/ticket_manager.cpython-312.pyc index 9ada2db..1ecacbd 100644 Binary files a/__pycache__/ticket_manager.cpython-312.pyc and b/__pycache__/ticket_manager.cpython-312.pyc differ diff --git a/data_filter.py b/data_filter.py index 045ca72..6de835d 100644 --- a/data_filter.py +++ b/data_filter.py @@ -11,29 +11,28 @@ def clean_html(content): def filter_ticket_data(ticket_data): """Filtre les données d'un ticket pour ne garder que les informations essentielles.""" - # Créer un nouveau dictionnaire pour le ticket filtré + + # Vérifier que ticket_data est bien une liste et extraire le premier élément + if isinstance(ticket_data, list) and len(ticket_data) > 0: + ticket_data = ticket_data[0] + else: + return {"Erreur": "Format de ticket invalide"} + filtered_ticket = { - "ID du Ticket": ticket_data["id", "ID non disponible"], - "Nom": ticket_data["Nom"], - "Code": ticket_data.get("Code", "N/A"), - "Date Limite": ticket_data["Date Limite"], - "Champs Simples": ticket_data["Champs Simples"], # Conserver tous les champs simples - "Champs Relationnels": ticket_data["Champs Relationnels"], # Conserver tous les champs relationnels - "Discussions": [] # Initialiser la liste des discussions + "ID du Ticket": ticket_data.get("id", "ID non disponible"), + "Nom": ticket_data.get("name", "Nom inconnu"), + "Code": ticket_data.get("code", "N/A"), + "Date Limite": ticket_data.get("date_deadline", "Non définie"), + "Projet": { + "ID": ticket_data.get("project_id", [None, "Projet inconnu"])[0], + "Nom": ticket_data.get("project_id", [None, "Projet inconnu"])[1] + }, + "Étape": { + "ID": ticket_data.get("stage_id", [None, "Étape inconnue"])[0], + "Nom": ticket_data.get("stage_id", [None, "Étape inconnue"])[1] + }, + "Description": clean_html(ticket_data.get("description", "")), + "Discussions": ticket_data.get("message_ids", []) } - # Nettoyer le champ description dans Champs Simples - if "description" in filtered_ticket["Champs Simples"]: - filtered_ticket["Champs Simples"]["description"] = clean_html(filtered_ticket["Champs Simples"]["description"]) - - # Garder uniquement les discussions nécessaires - for msg in ticket_data["Discussions"]: - filtered_ticket["Discussions"].append({ - "ID Message": msg["ID Message"], - "Sujet": msg["Sujet"], - "Contenu": clean_html(msg["Contenu"]), # Nettoyage du contenu HTML - "Auteur": msg["Auteur"], - "Date": msg["Date"] - }) - - return filtered_ticket \ No newline at end of file + return filtered_ticket diff --git a/exported_tickets/ticket_10908_raw.json b/exported_tickets/ticket_10908_raw.json new file mode 100644 index 0000000..d070535 --- /dev/null +++ b/exported_tickets/ticket_10908_raw.json @@ -0,0 +1,31 @@ +[ + { + "id": 10908, + "name": "TR: MAJ BRGlab", + "code": "T10929", + "stage_id": [ + 5, + "En attente de résolution" + ], + "project_id": [ + 3, + "Demandes" + ], + "date_deadline": false, + "description": "


", + "message_ids": [ + 227288, + 225765, + 225756, + 225755, + 225636, + 225635, + 225634, + 225633, + 225614, + 225613, + 225612, + 225611 + ] + } +] \ No newline at end of file diff --git a/exported_tickets/ticket_T10929_raw.json b/exported_tickets/ticket_T10929_raw.json new file mode 100644 index 0000000..1ba3ba8 --- /dev/null +++ b/exported_tickets/ticket_T10929_raw.json @@ -0,0 +1,3 @@ +[ + 10908 +] \ No newline at end of file diff --git a/ticket_manager.py b/ticket_manager.py index ef11efc..a416062 100644 --- a/ticket_manager.py +++ b/ticket_manager.py @@ -1,5 +1,6 @@ from odoo_connection import OdooConnection import os +import json from utils import save_json, ensure_export_directory, print_error from config import EXPORT_DIR from data_filter import filter_ticket_data @@ -40,6 +41,13 @@ class TicketManager: print_error(f" Erreur inattendue lors de '{method}' sur '{model}': {e}") return None + def save_raw_ticket_data(self, ticket_data, filename="raw_ticket_data.json"): + """Sauvegarde les données brutes du ticket dans un fichier JSON""" + file_path = os.path.join(EXPORT_DIR, filename) + with open(file_path, "w", encoding="utf-8") as f: + json.dump(ticket_data, f, indent=4, ensure_ascii=False) + print(f"Données brutes du ticket sauvegardées dans : {file_path}") + def get_ticket_by_id(self, ticket_id): """ Récupère les détails d'un ticket par son ID et applique le filtre """ fields_to_read = ['id', 'name', 'code', 'stage_id', 'project_id', 'date_deadline', 'description', 'message_ids'] @@ -51,8 +59,10 @@ class TicketManager: 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") # Nettoyer et filtrer les données du ticket - return filter_ticket_data(ticket_data[0]) # Utilisation de data_filter.py + #return filter_ticket_data(ticket_data[0]) # Utilisation de data_filter.py def get_ticket_by_code(self, ticket_code): """Récupérer un ticket via son code""" @@ -62,6 +72,9 @@ class TicketManager: print_error(f"Aucun ticket trouvé avec le code '{ticket_code}'.") return None + # Sauvegarde des données brutes pour analyse + self.save_raw_ticket_data(ticket_ids, f"ticket_{ticket_code}_raw.json") + return self.get_ticket_by_id(ticket_ids[0]) def get_available_projects(self):