mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-16 00:06:53 +01:00
130 lines
4.7 KiB
Python
Executable File
130 lines
4.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import json
|
|
import argparse
|
|
from datetime import datetime
|
|
from utils.auth_manager import AuthManager
|
|
from utils.ticket_manager import TicketManager
|
|
from utils.attachment_manager import AttachmentManager
|
|
from utils.message_manager import MessageManager
|
|
from utils.utils import save_json
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Extraction de tickets Odoo")
|
|
parser.add_argument("ticket_code", help="Code du ticket à extraire (ex: T0167)")
|
|
parser.add_argument("--config", default="config.json", help="Chemin vers le fichier de configuration")
|
|
parser.add_argument("--output-dir", help="Répertoire de sortie (par défaut: output/ticket_CODE)")
|
|
parser.add_argument("--verbose", "-v", action="store_true", help="Afficher plus d'informations")
|
|
args = parser.parse_args()
|
|
|
|
# Charger la configuration
|
|
try:
|
|
with open(args.config, "r", encoding="utf-8") as f:
|
|
config = json.load(f)
|
|
|
|
if args.verbose:
|
|
print(f"Configuration chargée depuis {args.config}")
|
|
except Exception as e:
|
|
print(f"Erreur lors du chargement de la configuration: {e}")
|
|
sys.exit(1)
|
|
|
|
# Extraire les informations de connexion
|
|
odoo_config = config.get("odoo", {})
|
|
url = odoo_config.get("url")
|
|
db = odoo_config.get("db")
|
|
username = odoo_config.get("username")
|
|
api_key = odoo_config.get("api_key")
|
|
|
|
if not all([url, db, username, api_key]):
|
|
print("Informations de connexion Odoo manquantes dans le fichier de configuration")
|
|
sys.exit(1)
|
|
|
|
# Définir le répertoire de sortie
|
|
output_dir = args.output_dir or os.path.join(config.get("output_dir", "output"), f"ticket_{args.ticket_code}")
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
# Authentification Odoo
|
|
auth = AuthManager(url, db, username, api_key)
|
|
if not auth.login():
|
|
print("Échec de connexion à Odoo")
|
|
sys.exit(1)
|
|
|
|
# Initialiser les gestionnaires
|
|
ticket_manager = TicketManager(auth)
|
|
attachment_manager = AttachmentManager(auth)
|
|
message_manager = MessageManager(auth)
|
|
|
|
# Récupérer le ticket
|
|
ticket = ticket_manager.get_ticket_by_code(args.ticket_code)
|
|
if not ticket:
|
|
print(f"Ticket {args.ticket_code} non trouvé")
|
|
sys.exit(1)
|
|
|
|
ticket_id = ticket.get('id')
|
|
|
|
# Sauvegarder ticket_info.json
|
|
ticket_info_path = os.path.join(output_dir, "ticket_info.json")
|
|
save_json(ticket, ticket_info_path)
|
|
|
|
if args.verbose:
|
|
print(f"Ticket {args.ticket_code} trouvé (ID: {ticket_id})")
|
|
print(f"Extraction des données vers {output_dir}...")
|
|
|
|
# Récupérer et sauvegarder les messages
|
|
messages = message_manager.get_ticket_messages(ticket_id)
|
|
all_messages_path = os.path.join(output_dir, "all_messages.json")
|
|
save_json(messages, all_messages_path)
|
|
|
|
# Récupérer et sauvegarder les pièces jointes
|
|
attachments = attachment_manager.get_ticket_attachments(ticket_id)
|
|
attachments_info = []
|
|
attachment_dir = os.path.join(output_dir, "attachments")
|
|
os.makedirs(attachment_dir, exist_ok=True)
|
|
|
|
for attachment in attachments:
|
|
file_data = attachment.get("datas")
|
|
if file_data:
|
|
file_name = attachment.get("name", "unnamed_file")
|
|
file_path = os.path.join(attachment_dir, file_name)
|
|
|
|
# Sauvegarder le fichier binaire
|
|
with open(file_path, "wb") as f:
|
|
f.write(base64.b64decode(file_data))
|
|
|
|
# Ajouter l'information de l'attachement à la liste
|
|
attachments_info.append({
|
|
"id": attachment.get("id"),
|
|
"name": file_name,
|
|
"path": file_path,
|
|
"mimetype": attachment.get("mimetype"),
|
|
"create_date": attachment.get("create_date")
|
|
})
|
|
|
|
# Sauvegarder les métadonnées des pièces jointes
|
|
attachments_info_path = os.path.join(output_dir, "attachments_info.json")
|
|
save_json(attachments_info, attachments_info_path)
|
|
|
|
# Génération de structure.json
|
|
structure = {
|
|
"date_extraction": datetime.now().isoformat(),
|
|
"ticket_dir": output_dir,
|
|
"fichiers_json": [
|
|
"ticket_info.json",
|
|
"all_messages.json",
|
|
"attachments_info.json"
|
|
]
|
|
}
|
|
structure_path = os.path.join(output_dir, "structure.json")
|
|
save_json(structure, structure_path)
|
|
|
|
print("Extraction terminée avec succès")
|
|
print(f"- Informations du ticket: {ticket_info_path}")
|
|
print(f"- Messages: {all_messages_path}")
|
|
print(f"- Pièces jointes: {attachments_info_path}")
|
|
print(f"- Structure: {structure_path}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|