mirror of
https://github.com/Ladebeze66/projetcbaollm.git
synced 2025-12-16 21:27:53 +01:00
145 lines
6.1 KiB
Python
145 lines
6.1 KiB
Python
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 |