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