#!/usr/bin/env python3 """ Script principal pour récupérer un ticket depuis Odoo et extraire ses données. Ce script fait appel aux utilitaires dans le package utils pour effectuer l'extraction. """ import os import sys import json import argparse from datetime import datetime from odoo.auth_manager import AuthManager from odoo.ticket_manager import TicketManager from core.utils import setup_logging, log_separator from formatters.json_to_markdown import create_markdown_from_json def parse_arguments(): """Parse les arguments de ligne de commande.""" parser = argparse.ArgumentParser(description="Récupère un ticket Odoo par son code et extrait ses données.") parser.add_argument("ticket_code", help="Code du ticket à extraire") parser.add_argument("--output", "-o", help="Répertoire de sortie", default=None) parser.add_argument("--config", "-c", help="Fichier de configuration", default="config.json") parser.add_argument("--verbose", "-v", action="store_true", help="Mode verbeux") parser.add_argument("--no-md", action="store_true", help="Désactiver la génération automatique du fichier Markdown") return parser.parse_args() def load_config(config_file): """Charge le fichier de configuration.""" try: with open(config_file, 'r') as f: return json.load(f) except Exception as e: print(f"Erreur lors du chargement du fichier de configuration: {e}") sys.exit(1) def main(): """Fonction principale du script.""" args = parse_arguments() config = load_config(args.config) # Configurer la journalisation log_level = "DEBUG" if args.verbose else "INFO" setup_logging(log_level) # 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 or os.path.join(config.get("output_dir", "output"), f"ticket_{args.ticket_code}") # Créer le répertoire de sortie spécifique au ticket avec horodatage timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") ticket_dir = os.path.join(output_dir, f"{args.ticket_code}_{timestamp}") os.makedirs(ticket_dir, exist_ok=True) print(f"Extraction du ticket {args.ticket_code}...") try: # Initialiser l'authentification auth_manager = AuthManager( url=url, db=db, username=username, api_key=api_key ) if not auth_manager.login(): print("Échec de l'authentification à Odoo") sys.exit(1) # Extraire les données du ticket ticket_manager = TicketManager(auth_manager) result = ticket_manager.extract_ticket_data(args.ticket_code, ticket_dir) if not result: print(f"Échec de l'extraction du ticket {args.ticket_code}") sys.exit(1) # Générer un rapport de fin summary = { "timestamp": timestamp, "ticket_code": args.ticket_code, "output_directory": ticket_dir, "message_count": result.get("messages_count", 0), "attachment_count": result.get("attachments_count", 0), "files_created": [ os.path.basename(result.get("ticket_info", "")), os.path.basename(result.get("ticket_summary", "")), os.path.basename(result.get("messages_file", "")), os.path.basename(result.get("ticket_data_file", "")) ] } # Générer automatiquement le fichier Markdown si demandé md_file_path = None if not args.no_md: json_file = result.get("messages_file", "") if json_file and os.path.exists(json_file): md_file_path = os.path.join(ticket_dir, "rapport.md") print(f"Génération du rapport Markdown...") if create_markdown_from_json(json_file, md_file_path): print(f"Rapport Markdown créé: {md_file_path}") summary["files_created"].append("rapport.md") else: print("Échec de la génération du rapport Markdown") # Afficher le résumé print("\nExtraction terminée avec succès") print(f"Ticket: {args.ticket_code}") print(f"Répertoire: {ticket_dir}") print(f"Messages traités: {result.get('messages_count', 0)}") print(f"Pièces jointes: {result.get('attachments_count', 0)}") if md_file_path: print(f"Rapport Markdown: {md_file_path}") except Exception as e: print(f"Une erreur est survenue: {e}") sys.exit(1) if __name__ == "__main__": main()