llm_ticket3/docs/odoo/exemples.py
2025-04-09 16:13:20 +02:00

180 lines
5.8 KiB
Python

#!/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")