mirror of
https://github.com/Ladebeze66/odoo_toolkit.git
synced 2025-12-15 19:26:55 +01:00
J6-3
This commit is contained in:
parent
ed678e4a2c
commit
d4416f43c3
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
||||
/odtkit
|
||||
/exported_tickets
|
||||
config.py
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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): ")
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user