This commit is contained in:
Ladebeze66 2025-03-18 15:55:09 +01:00
parent ebc199362e
commit 12e34b9a7a
6 changed files with 70 additions and 24 deletions

View File

@ -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
return filtered_ticket

View File

@ -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": "<p><br></p>",
"message_ids": [
227288,
225765,
225756,
225755,
225636,
225635,
225634,
225633,
225614,
225613,
225612,
225611
]
}
]

View File

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

View File

@ -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):