This commit is contained in:
Ladebeze66 2025-03-19 15:11:29 +01:00
parent ed678e4a2c
commit d4416f43c3
7 changed files with 71 additions and 4 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
/odtkit
/exported_tickets
config.py

View File

@ -4,6 +4,27 @@ from utils import get_user_choice, print_error
# Initialisation de l'objet
ticket_manager = TicketManager()
def handle_list_models():
"""Affiche et sauvegarde la liste des modèles disponibles"""
models = ticket_manager.get_all_models()
if models:
print("\n Modèles disponibles:")
for model, name in models.items():
print(f"- {model} : {name}")
def handle_list_model_fields():
"""Demande à l'utilisateur un modèle et affiche ses champs avec leur type."""
model_name = input("\nEntrez le nom du modèle à inspecter (ou 'q' pour quitter): ")
if model_name.lower() == 'q':
return
fields = ticket_manager.get_model_fields_with_types(model_name)
if fields:
print(f"\nChamps du modèle '{model_name}':")
for field, info in fields.items():
relation_info = f" (relation avec {info['relation']})" if info["relation"] else ""
print(f"- {field} : {info['type']}{relation_info}")
def handle_search_ticket_by_id():
"""Gère la recherche d'un ticket par ID"""
ticket_id_input = input("Entrez l'ID du ticket(ou 'q' pour quitter): ")

View File

@ -1,7 +1,9 @@
from menu_handlers import (
handle_project_tickets_by_stage,
handle_search_ticket_by_id,
handle_search_ticket_by_code
handle_search_ticket_by_code,
handle_list_models,
handle_list_model_fields
)
def display_main_menu():
@ -10,8 +12,10 @@ def display_main_menu():
print("1. Exporter les tickets d'un project_id par étape")
print("2. Rechercher un ticket par ID")
print("3. Rechercher un ticket par Code")
print("4. Quitter")
return input("\nChoisissez une option (1-4): ")
print("4. Afficher la liste des modèles disponibles")
print("5. Afficher les champs d'un modèle donné")
print("6. Quitter")
return input("\nChoisissez une option (1-6): ")
def run_menu():
@ -25,6 +29,10 @@ def run_menu():
elif choice == '3':
handle_search_ticket_by_code()
elif choice == '4':
handle_list_models()
elif choice == '5':
handle_list_model_fields()
elif choice == '6':
print("Au revoir!")
break
else:

View File

@ -61,7 +61,43 @@ class TicketManager:
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_all_models(self):
"""Récupérer et sauvegarder tous les modèles disponibles"""
models = self._safe_execute('ir.model', 'search_read', [], ['model', 'name'] )
if not models:
print_error("Impossible de récupérer la liste des modèles.")
return None
#Convertir en dictionnaire {nom_du_modèle: description}
models_dict = {model['model']: model['name'] for model in models}
#Sauvegarder dans un fichier JSON
self.save_raw_ticket_data(models_dict, "all_models.json")
print(f"Liste des modèles sauvegardée dans 'available_models.json")
return models_dict
def get_model_fields_with_types(self, model_name):
"""Récupère et sauvegarde les champs d'un modèle avec leurs types"""
fields_info = self._safe_execute(model_name, 'fields_get', [], ['name', 'type', 'relation'])
if not fields_info:
print_error(f"Impossible de récupérer les champs pour {model_name}")
return {}
# Construire un dictionnaire {champ: {type, relation (si relationnel)}}
fields_dict = {
field: {
"type": info["type"],
"relation": info.get("relation", None)
}
for field, info in fields_info.items()
}
# Sauvegarde en JSON
self.save_raw_ticket_data(fields_dict, f"fields_{model_name}.json")
print(f"Liste des champs du modèle '{model_name}' sauvegardée dans 'fields_{model_name}.json'")
return fields_dict
def get_ticket_by_id(self, ticket_id):
"""Récupère les détails d'un ticket par son ID et exclut dynamiquement les champs invalides"""
fields_to_read = self.get_model_fields(self.model_name) # Récupère tous les champs
@ -79,7 +115,7 @@ class TicketManager:
"""Ajoute les valeurs des champs relationnels"""
fields_info = self._safe_execute(self.model_name, 'fields_get', [], ['type'])
for field, info in fields_info.items():
for field, info in fields_info.items(): # type: ignore
if info.get("type") == "many2one" and isinstance(ticket.get(field), list):
ticket[f"{field}_value"] = ticket[field][1] if len(ticket[field]) > 1 else None #Ajoute la valeur lisible en plus du ID
return ticket