odoo_toolkit/menu_handlers.py
2025-03-18 11:24:17 +01:00

130 lines
5.5 KiB
Python

from ticket_manager import TicketManager
from utils import get_user_choice
# Initialisation de l'objet
ticket_manager = TicketManager()
def handle_list_models():
"""Gère l'affichage de la liste des modèles"""
ticket_manager.list_models()
def handle_list_model_fields():
"""Gère l'affichage des champs d'un modèle"""
model_name = input("\nEntrez le nom du modèle: ")
if not model_name:
print("Aucun nom de modèle fourni.")
return
ticket_manager.list_model_fields(model_name)
def handle_export_model_fields_to_json():
"""Gère l'exportation des informations des champs d'un modèle en JSON"""
model_name = input("\nEntrez le nom du modèle: ")
if not model_name:
print("Aucun nom de modèle fourni.")
return
filename = input("Entrez le nom du fichier pour l'exportation: ")
if not filename:
print("Aucun nom de fichier fourni.")
return
ticket_manager.export_model_fields_to_json(model_name, filename)
def handle_project_tickets_by_stage():
"""Gère l'exportation des tickets d'un projet par étape"""
# Récupérer la liste des projets disponibles
projects = ticket_manager.get_available_projects()
if not projects:
print("Aucun projet disponible. Impossible de continuer.")
return
# Demander à l'utilisateur de choisir un projet
project_id_input = input("\nEntrez l'ID du projet (ou 'q' pour quitter): ")
if project_id_input.lower() == 'q':
return
try:
project_id = int(project_id_input)
if project_id not in projects:
print(f"Aucun projet trouvé avec l'ID: {project_id}")
return
except ValueError:
print("L'ID du projet doit être un nombre entier.")
return
# Récupérer les étapes (stage_id) du projet
print(f"\nRécupération des étapes du projet: {projects[project_id]} (ID: {project_id})")
stages = ticket_manager.get_project_stages(project_id)
if not stages:
print("Aucune étape trouvée pour ce projet. Impossible de continuer.")
return
# Afficher les étapes disponibles
print("\nÉtapes disponibles:")
for stage_id, stage_name in stages.items():
print(f"ID: {stage_id} - {stage_name}")
# Demander à l'utilisateur s'il veut sélectionner ou exclure des étapes
selection_mode = input("\nSouhaitez-vous:\n1. Exporter toutes les étapes\n2. Sélectionner des étapes spécifiques par ID\n3. Exclure certaines étapes par ID\nVotre choix (1/2/3): ")
selected_stage_ids = None
if selection_mode == '2':
# Sélectionner des étapes spécifiques par ID
stage_id_input = input("Entrez les IDs des étapes à inclure (séparés par des virgules): ")
try:
selected_stage_ids = [int(x.strip()) for x in stage_id_input.split(',') if x.strip()]
# Vérifier que les IDs existent dans les étapes disponibles
valid_ids = [stage_id for stage_id in selected_stage_ids if stage_id in stages]
invalid_ids = [stage_id for stage_id in selected_stage_ids if stage_id not in stages]
selected_stage_ids = valid_ids
if invalid_ids:
print(f"Attention: Les IDs suivants ne sont pas valides et seront ignorés: {', '.join(map(str, invalid_ids))}")
if not selected_stage_ids:
print("Aucun ID d'étape valide sélectionné. Exportation annulée.")
return
print(f"Étapes sélectionnées: {', '.join([f'{stages[stage_id]} (ID: {stage_id})' for stage_id in selected_stage_ids])}")
except ValueError:
print("Erreur dans la sélection des étapes. Format attendu: 1,2,3,...")
return
elif selection_mode == '3':
# Exclure certaines étapes par ID
stage_id_input = input("Entrez les IDs des étapes à exclure (séparés par des virgules): ")
try:
excluded_stage_ids = [int(x.strip()) for x in stage_id_input.split(',') if x.strip()]
# Vérifier que les IDs existent dans les étapes disponibles
valid_excluded_ids = [stage_id for stage_id in excluded_stage_ids if stage_id in stages]
invalid_ids = [stage_id for stage_id in excluded_stage_ids if stage_id not in stages]
excluded_stage_ids = valid_excluded_ids
if invalid_ids:
print(f"Attention: Les IDs suivants ne sont pas valides et seront ignorés: {', '.join(map(str, invalid_ids))}")
# Sélectionner toutes les étapes sauf les exclues
selected_stage_ids = [stage_id for stage_id in stages.keys() if stage_id not in excluded_stage_ids]
if not selected_stage_ids:
print("Toutes les étapes ont été exclues. Exportation annulée.")
return
print(f"Étapes sélectionnées: {', '.join([f'{stages[stage_id]} (ID: {stage_id})' for stage_id in selected_stage_ids])}")
except ValueError:
print("Erreur dans la sélection des étapes. Format attendu: 1,2,3,...")
return
# Confirmer l'action
confirmation = input(f"\nVoulez-vous exporter les tickets du projet {projects[project_id]}? (o/n): ")
if confirmation.lower() != 'o':
print("Exportation annulée.")
return
# Exporter les tickets
ticket_manager.export_tickets_by_project_and_stage(project_id, selected_stage_ids)