mirror of
https://github.com/Ladebeze66/projetcbaollm.git
synced 2025-12-16 14:37:49 +01:00
123 lines
6.1 KiB
Python
123 lines
6.1 KiB
Python
from data_filter import filter_ticket_data
|
|
import os
|
|
import json
|
|
from config import EXPORT_DIR
|
|
|
|
class TicketClassification:
|
|
def classify_tickets_by_field(self, tickets, field_name):
|
|
"""Classe les tickets par un champ donné et crée des répertoires."""
|
|
classified_tickets = {}
|
|
for ticket in tickets:
|
|
ticket = filter_ticket_data(ticket)
|
|
field_value = ticket["Champs Simples"].get(field_name) or ticket["Champs Relationnels"].get(field_name)
|
|
|
|
if field_value is not None:
|
|
str_value = str(field_value).replace("/", "_").replace("\\", "_")
|
|
if str_value not in classified_tickets:
|
|
classified_tickets[str_value] = []
|
|
classified_tickets[str_value].append(ticket)
|
|
|
|
return classified_tickets
|
|
|
|
def save_tickets_by_stage(self, tickets, project_name=None):
|
|
"""Sauvegarde les tickets dans des répertoires selon leur stage_id"""
|
|
if not tickets:
|
|
print("Aucun ticket à sauvegarder.")
|
|
return
|
|
|
|
# Créer un dictionnaire pour classifier les tickets par stage_id
|
|
tickets_by_stage = {}
|
|
|
|
for ticket in tickets:
|
|
# Appliquer le filtre pour nettoyer les données
|
|
try:
|
|
# Vérifier le format du ticket et appliquer le filtre approprié
|
|
if 'Champs Simples' in ticket and 'Champs Relationnels' in ticket:
|
|
# Le ticket est déjà dans le format attendu par filter_ticket_data
|
|
filtered_ticket = filter_ticket_data(ticket)
|
|
else:
|
|
# Convertir le ticket au format attendu, puis filtrer
|
|
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)
|
|
|
|
# Conserver les données originales pour la classification
|
|
filtered_ticket['id'] = ticket.get('id')
|
|
filtered_ticket['name'] = ticket.get('name')
|
|
filtered_ticket['stage_id'] = ticket.get('stage_id')
|
|
except Exception as e:
|
|
print(f"Erreur lors du filtrage du ticket {ticket.get('id', 'inconnu')}: {str(e)}")
|
|
# Continuer avec le ticket non filtré en cas d'erreur
|
|
filtered_ticket = ticket
|
|
|
|
# Vérifier si stage_id existe et a une valeur
|
|
if 'stage_id' in filtered_ticket and filtered_ticket['stage_id']:
|
|
stage_id = filtered_ticket['stage_id'][0] # L'ID du stage
|
|
stage_name = filtered_ticket['stage_id'][1] # Le nom du stage
|
|
|
|
# Créer une clé propre pour le nom du répertoire
|
|
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(filtered_ticket)
|
|
|
|
# Créer le répertoire principal pour l'export
|
|
base_dir = EXPORT_DIR
|
|
if not os.path.exists(base_dir):
|
|
os.makedirs(base_dir)
|
|
|
|
# Créer un sous-répertoire pour ce projet spécifique si fourni
|
|
if project_name:
|
|
base_dir = os.path.join(base_dir, f"projet_{project_name.replace('/', '_').replace(' ', '_')}")
|
|
if not os.path.exists(base_dir):
|
|
os.makedirs(base_dir)
|
|
|
|
# Sauvegarder les tickets dans leurs répertoires respectifs
|
|
for stage_key, stage_tickets in tickets_by_stage.items():
|
|
# Créer un répertoire pour cette étape
|
|
stage_dir = os.path.join(base_dir, stage_key)
|
|
if not os.path.exists(stage_dir):
|
|
os.makedirs(stage_dir)
|
|
|
|
# Sauvegarder tous les tickets de cette étape dans un fichier JSON
|
|
all_tickets_file = os.path.join(stage_dir, "all_tickets.json")
|
|
with open(all_tickets_file, 'w', encoding='utf-8') as f:
|
|
json.dump(stage_tickets, f, indent=4, ensure_ascii=False)
|
|
|
|
# Sauvegarder chaque ticket dans un fichier individuel
|
|
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}"
|
|
|
|
file_path = os.path.join(stage_dir, f"{ticket_id}_{ticket_name}.json")
|
|
|
|
with open(file_path, 'w', encoding='utf-8') as f:
|
|
json.dump(ticket, f, indent=4, ensure_ascii=False)
|
|
|
|
print(f"Sauvegardé {len(stage_tickets)} tickets dans {stage_dir}")
|
|
|
|
return tickets_by_stage |