import os import json from config import EXPORT_DIR from data_filter import filter_ticket_data def ensure_export_directory(subdir=None): """Crée le répertoire d'export et ses sous-répertoires si nécessaires""" export_path = EXPORT_DIR if subdir: export_path = os.path.join(EXPORT_DIR, subdir) if not os.path.exists(export_path): os.makedirs(export_path) print(f"Répertoire créé: {export_path}") return export_path def save_tickets_json(tickets, filename, subdir=None): """Sauvegarde une liste de tickets dans un fichier JSON""" if not tickets: print("Aucun ticket à sauvegarder.") return False export_path = ensure_export_directory(subdir) file_path = os.path.join(export_path, f"{filename}.json") try: with open(file_path, 'w', encoding='utf-8') as f: json.dump(tickets, f, indent=4, ensure_ascii=False) print(f"Fichier JSON sauvegardé: {file_path}") return True except Exception as e: print(f"Erreur lors de la sauvegarde du fichier JSON: {str(e)}") return False def organize_tickets_by_stage(tickets): """Organise les tickets par stage_id""" if not tickets: return {} tickets_by_stage = {} for ticket in tickets: if 'stage_id' in ticket and ticket['stage_id']: # stage_id est généralement un tuple (id, name) stage_id = ticket['stage_id'][0] stage_name = ticket['stage_id'][1] stage_key = f"{stage_id}_{stage_name.replace('/', '_').replace(' ', '_')}" if stage_key not in tickets_by_stage: tickets_by_stage[stage_key] = [] tickets_by_stage[stage_key].append(ticket) return tickets_by_stage def save_project_tickets_by_stage(tickets, project_name): """Sauvegarde les tickets d'un projet, organisés par étape""" if not tickets: print("Aucun ticket à sauvegarder.") return False # Sanitize project_name pour l'utiliser comme nom de répertoire safe_project_name = project_name.replace('/', '_').replace(' ', '_') project_dir = f"projet_{safe_project_name}" # Créer le répertoire du projet project_path = ensure_export_directory(project_dir) # Filtrer les tickets avant l'organisation filtered_tickets = [] for ticket in tickets: try: # Vérifier si le ticket est déjà dans le format attendu par filter_ticket_data if 'Champs Simples' in ticket and 'Champs Relationnels' in ticket: filtered_ticket = filter_ticket_data(ticket) else: # Convertir au format attendu converted_ticket = { "ID du Ticket": ticket.get('id', 'N/A'), "Nom": ticket.get('name', 'N/A'), "Code": ticket.get('code', 'N/A') if 'code' in ticket else ticket.get('name', 'N/A'), "Date Limite": ticket.get('date_deadline', 'N/A'), "Champs Simples": { field: ticket.get(field, 'N/A') for field in ['description', 'priority', 'sequence', 'create_date', 'write_date'] if field in ticket }, "Champs Relationnels": {}, "Discussions": [] } # Ajouter les champs relationnels for rel_field in ['stage_id', 'project_id', 'user_id']: if rel_field in ticket and ticket[rel_field]: if isinstance(ticket[rel_field], list) and len(ticket[rel_field]) > 1: converted_ticket["Champs Relationnels"][rel_field] = f"{ticket[rel_field][1]} (ID: {ticket[rel_field][0]})" else: converted_ticket["Champs Relationnels"][rel_field] = ticket[rel_field] filtered_ticket = filter_ticket_data(converted_ticket) # Préserver l'ID et le nom pour l'organisation filtered_ticket['id'] = ticket.get('id') filtered_ticket['name'] = ticket.get('name') filtered_ticket['stage_id'] = ticket.get('stage_id') filtered_tickets.append(filtered_ticket) except Exception as e: print(f"Erreur lors du filtrage du ticket {ticket.get('id', 'inconnu')}: {str(e)}") # Ajouter le ticket non filtré en cas d'erreur filtered_tickets.append(ticket) print(f"Tous les tickets ont été filtrés avec data_filter.py: {len(filtered_tickets)} tickets traités") # Organiser les tickets par étape avec les tickets filtrés tickets_by_stage = organize_tickets_by_stage(filtered_tickets) if not tickets_by_stage: print("Impossible d'organiser les tickets par étape. Vérifiez que les tickets ont un champ stage_id.") # Sauvegarde tous les tickets dans un seul fichier return save_tickets_json(filtered_tickets, "all_tickets", project_dir) # Sauvegarder les tickets par étape for stage_key, stage_tickets in tickets_by_stage.items(): # Créer un sous-répertoire pour cette étape stage_dir = os.path.join(project_dir, stage_key) ensure_export_directory(stage_dir) # Sauvegarder tous les tickets de cette étape dans un fichier save_tickets_json(stage_tickets, "tickets", stage_dir) # Sauvegarder chaque ticket individuellement for ticket in stage_tickets: ticket_id = ticket['id'] ticket_name = ticket.get('name', '').replace('/', '_').replace(' ', '_') if not ticket_name: ticket_name = f"ticket_{ticket_id}" ticket_filename = f"{ticket_id}_{ticket_name}" save_tickets_json([ticket], ticket_filename, stage_dir) print(f"Tous les tickets du projet '{project_name}' ont été sauvegardés par étape.") return True