#!/usr/bin/env python3 """ Exemples d'utilisation du module Odoo pour extraire des tickets. Ces exemples montrent comment utiliser les fonctions principales depuis un script Python. """ import sys import os import json import logging from datetime import datetime # Ajouter le répertoire parent au chemin de recherche des modules sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../'))) from odoo.auth_manager import AuthManager from odoo.ticket_manager import TicketManager from odoo.batch_ticket_manager import BatchTicketManager from odoo.retrieve_ticket import retrieve_ticket from odoo.retrieve_tickets_batch import retrieve_tickets_batch, list_projects, list_stages from core.utils import setup_logging def load_config(config_file="config.json"): """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}") return {} def exemple_extraction_ticket_unique(): """Exemple d'extraction d'un ticket unique""" print("\n=== Exemple d'extraction d'un ticket unique ===\n") # Code du ticket à extraire ticket_code = "TS-1234" # Remplacer par un code de ticket réel # Appel de la fonction d'extraction result = retrieve_ticket( ticket_code=ticket_code, output=None, # Utiliser le répertoire par défaut config_file="config.json", verbose=True ) if result: print(f"Extraction réussie! Données sauvegardées dans: {result}") else: print("L'extraction a échoué. Vérifiez les logs pour plus de détails.") def exemple_extraction_par_lot(): """Exemple d'extraction d'un lot de tickets par projet""" print("\n=== Exemple d'extraction d'un lot de tickets ===\n") # ID du projet (à remplacer par un ID réel) project_id = 1 # Critères de recherche domain = [ ["project_id", "=", project_id], ["stage_id", "in", [1, 2, 3]] # Tickets dans les étapes 1, 2 ou 3 ] # Appel de la fonction d'extraction par lot result = retrieve_tickets_batch( domain=domain, limit=10, offset=0, output=None, # Utiliser le répertoire par défaut config_file="config.json", verbose=True, skip_existing=True ) if result and result.get("status") != "error": print(f"Extraction réussie! {result.get('processed')} tickets traités.") print(f"Données sauvegardées dans: {result.get('batch_dir')}") else: print("L'extraction a échoué. Vérifiez les logs pour plus de détails.") def exemple_lister_projets(): """Exemple pour lister les projets disponibles""" print("\n=== Liste des projets disponibles ===\n") projects = list_projects("config.json") if projects: print(f"{len(projects)} projets trouvés:") for project in projects: print(f" - ID: {project['id']}, Nom: {project['name']}") else: print("Aucun projet trouvé ou erreur lors de la récupération.") def exemple_lister_etapes(): """Exemple pour lister les étapes disponibles""" print("\n=== Liste des étapes disponibles ===\n") stages = list_stages("config.json") if stages: print(f"{len(stages)} étapes trouvées:") for stage in stages: print(f" - ID: {stage['id']}, Nom: {stage['name']}") else: print("Aucune étape trouvée ou erreur lors de la récupération.") def exemple_api_directe(): """Exemple d'utilisation directe des classes d'API""" print("\n=== Exemple d'utilisation directe de l'API ===\n") config = load_config() odoo_config = config.get("odoo", {}) if not all([odoo_config.get(k) for k in ["url", "db", "username", "api_key"]]): print("Configuration Odoo incomplète.") return # Initialiser les gestionnaires auth_manager = AuthManager( url=odoo_config.get("url"), db=odoo_config.get("db"), username=odoo_config.get("username"), api_key=odoo_config.get("api_key") ) if not auth_manager.login(): print("Échec de l'authentification à Odoo.") return # Exemple d'utilisation de TicketManager ticket_manager = TicketManager(auth_manager) # Rechercher un ticket par son code ticket_code = "TS-1234" # Remplacer par un code de ticket réel ticket_data = ticket_manager.get_ticket_by_code(ticket_code) if ticket_data: print(f"Ticket trouvé: {ticket_data.get('name')}") # Afficher quelques informations print(f" - Projet: {ticket_data.get('project_id_name')}") print(f" - Statut: {ticket_data.get('stage_id_name')}") print(f" - Assigné à: {ticket_data.get('user_id_name')}") else: print(f"Ticket {ticket_code} non trouvé.") # Exemple d'utilisation de BatchTicketManager batch_manager = BatchTicketManager(ticket_manager) # Compter les tickets ouverts open_tickets_domain = [["stage_id.name", "ilike", "ouvert"]] open_count = batch_manager.get_ticket_count(open_tickets_domain) print(f"\nNombre de tickets ouverts: {open_count}") if __name__ == "__main__": # Configurer la journalisation setup_logging(logging.INFO) # Exécuter les exemples print("\n" + "="*60) print("EXEMPLES D'UTILISATION DU MODULE ODOO") print("="*60) # Lister les projets et étapes exemple_lister_projets() exemple_lister_etapes() # Extraire un ticket unique # exemple_extraction_ticket_unique() # Extraire un lot de tickets # exemple_extraction_par_lot() # Utiliser l'API directement # exemple_api_directe() print("\n" + "="*60) print("FIN DES EXEMPLES") print("="*60 + "\n")