Improve error handling and logging for Excel export functionality

Enhance the error handling and logging for the Excel export route, including detailed console logs for request parameters, user information, and potential errors during XLSX module import and workbook creation. Also adds conditional error stack tracing for development environments.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 1e4433b5-47ab-464c-b663-fea2e53367dd
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: c050afd1-ec0c-4486-a949-a2b54ef8f939
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/1e4433b5-47ab-464c-b663-fea2e53367dd/GjEDOGr
This commit is contained in:
michaelschal committed 2025-11-04 12:05:21 +00:00
1 parent a9de7d7951
commit 1edeac6e15
3 files changed
+225 -2

No files matched your search

+18 -2
View File
@@ -503,18 +503,25 @@ export async function registerRoutes(app: Express): Promise<Server> {
// Route pour exporter l'échéancier vers Excel
app.post('/api/payment-schedule/export', isAuthenticated, async (req: any, res) => {
try {
console.log('📊 [EXPORT] Début de l\'export Excel');
const userId = req.user?.claims?.sub || req.user?.id;
if (!userId) {
console.error('❌ [EXPORT] Utilisateur non authentifié');
return res.status(401).json({ error: 'Utilisateur non authentifié' });
}
const user = await storage.getUser(userId);
console.log(`🔍 [EXPORT] Utilisateur: ${user?.username} (${user?.role})`);
if (!user || (user.role !== 'admin' && user.role !== 'directeur')) {
console.error('❌ [EXPORT] Accès refusé');
return res.status(403).json({ error: 'Accès refusé - Admin ou Directeur uniquement' });
}
// Récupérer les paramètres d'export
const { groupId, month, paymentMethods, includeHT, includeTTC } = req.body;
console.log('📋 [EXPORT] Paramètres:', { groupId, month, paymentMethods, includeHT, includeTTC });
// Validation
const groupIdSchema = z.coerce.number().int().positive();
@@ -583,8 +590,11 @@ export async function registerRoutes(app: Express): Promise<Server> {
.sort((a: any, b: any) => a.dueDate.getTime() - b.dueDate.getTime());
// Générer le fichier Excel
console.log('📦 [EXPORT] Import du module xlsx...');
const XLSX = await import('xlsx');
console.log('✅ [EXPORT] Module xlsx importé avec succès');
const workbook = XLSX.utils.book_new();
console.log('📄 [EXPORT] Workbook créé');
// Préparer les données pour Excel
const headers = ['Date d\'échéance', 'Fournisseur', 'Facture', 'Mode de paiement'];
@@ -644,8 +654,14 @@ export async function registerRoutes(app: Express): Promise<Server> {
console.log(`📊 Export Excel généré: ${schedules.length} échéances pour ${group.name}`);
} catch (error: any) {
console.error('❌ Erreur export Excel:', error);
res.status(500).json({ error: 'Erreur lors de l\'export', details: error.message });
console.error('❌ [EXPORT] Erreur export Excel:', error);
console.error('❌ [EXPORT] Message:', error.message);
console.error('❌ [EXPORT] Stack:', error.stack);
res.status(500).json({
error: 'Erreur lors de l\'export',
details: error.message,
stack: process.env.NODE_ENV === 'development' ? error.stack : undefined
});
}
});