From 1edeac6e158ae20831f9bc86073d6b3726b74fd5 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 4 Nov 2025 12:05:21 +0000 Subject: [PATCH] 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 --- ...tent-Atten-1762257823796_1762257823796.txt | 207 ++++++++++++++++++ ...-4EBA-BBA5-4AB2680D9F3F}_1762257806086.png | Bin 0 -> 20795 bytes server/routes.ts | 20 +- 3 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 attached_assets/Pasted-Lines-100-Actions-id-20-title-DLC-content-Atten-1762257823796_1762257823796.txt create mode 100644 attached_assets/{DB0B7998-27E7-4EBA-BBA5-4AB2680D9F3F}_1762257806086.png diff --git a/attached_assets/Pasted-Lines-100-Actions-id-20-title-DLC-content-Atten-1762257823796_1762257823796.txt b/attached_assets/Pasted-Lines-100-Actions-id-20-title-DLC-content-Atten-1762257823796_1762257823796.txt new file mode 100644 index 0000000..b72e794 --- /dev/null +++ b/attached_assets/Pasted-Lines-100-Actions-id-20-title-DLC-content-Atten-1762257823796_1762257823796.txt @@ -0,0 +1,207 @@ +Lines +100 +Actions + + + + + { + + id: 20, + + title: 'DLC', + + content: 'Attention des DLC sont en expiré bientôt ou expiré, il faut s en occuper', + + type: 'success', + + storeId: 2, + + createdBy: 'admin', + + createdAt: 2025-09-24T11:26:13.521Z + + }, + + { + + id: 17, + + title: 'Module Avoir', + + content: "Le module d'avoir est en place", + + type: 'error', + + storeId: 1, + + createdBy: 'admin', + + createdAt: 2025-09-09T07:47:47.650Z + + }, + + { + + id: 16, + + title: 'Mise à jour Prix', + + content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.', + + type: 'success', + + storeId: null, + + createdBy: 'admin', + + createdAt: 2025-08-18T10:45:08.585Z + + }, + + { + + id: 8, + + title: 'Bon de Livraison', + + content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.', + + type: 'info', + + storeId: null, + + createdBy: 'admin_local', + + createdAt: 2025-08-07T11:04:38.123Z + + } + +] + +🔍 [PRODUCTION] Looking for user with username: admin + +🔍 [PRODUCTION] Looking for user with username: admin + +🔍 [PRODUCTION] Looking for user with username: admin + +🔍 [PRODUCTION] Looking for user with username: admin_local + +🔍 [PRODUCTION] Raw messages from DB: 4 items: [ + + { + + id: 20, + + title: 'DLC', + + content: 'Attention des DLC sont en expiré bientôt ou expiré, il faut s en occuper', + + type: 'success', + + storeId: 2, + + createdBy: 'admin', + + createdAt: 2025-09-24T11:26:13.521Z + + }, + + { + + id: 17, + + title: 'Module Avoir', + + content: "Le module d'avoir est en place", + + type: 'error', + + storeId: 1, + + createdBy: 'admin', + + createdAt: 2025-09-09T07:47:47.650Z + + }, + + { + + id: 16, + + title: 'Mise à jour Prix', + + content: 'Merci de mettre vos prix a jour tous les matins, certain magasin ne le font pas.', + + type: 'success', + + storeId: null, + + createdBy: 'admin', + + createdAt: 2025-08-18T10:45:08.585Z + + }, + + { + + id: 8, + + title: 'Bon de Livraison', + + content: 'Lorsque vous rentrez un numéro de bon de livraison, faite le a l identique, même les majuscules. Pour My candy Shop, prendre le numéro de commande.', + + type: 'info', + + storeId: null, + + createdBy: 'admin_local', + + createdAt: 2025-08-07T11:04:38.123Z + + } + +] + +🔍 [PRODUCTION] Looking for user with username: admin + +🔍 [PRODUCTION] Looking for user with username: admin + +🔍 [PRODUCTION] Looking for user with username: admin + +🔍 [PRODUCTION] Looking for user with username: admin_local + +🔍 [PRODUCTION] User search result: Found + +🔍 [PRODUCTION] User search result: Found + +🔍 [PRODUCTION] User search result: Found + +🔍 [PRODUCTION] User search result: Found + +🔍 [PRODUCTION] User search result: Not found + +🔍 [PRODUCTION] User search result: Not found + +❌ [PRODUCTION] User not found with username: admin_local + +❌ [PRODUCTION] User not found with username: admin_local + +🎯 [PRODUCTION] Found announcements: 4 + +🔍 [PRODUCTION] User search result: Found + +🔍 [PRODUCTION] User search result: Found + +GET /api/announcements 304 in 29ms + +🎯 [PRODUCTION] Found announcements: 4 + +GET /api/announcements 304 in 31ms + +GET /api/dlc-products 200 in 31ms + +GET /api/groups 200 in 5ms + +HEAD /api/health 200 in 1ms + diff --git a/attached_assets/{DB0B7998-27E7-4EBA-BBA5-4AB2680D9F3F}_1762257806086.png b/attached_assets/{DB0B7998-27E7-4EBA-BBA5-4AB2680D9F3F}_1762257806086.png new file mode 100644 index 0000000000000000000000000000000000000000..b727ad74c32ee7594283340d20204b49962afc0b GIT binary patch literal 20795 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 KEBWfS_x=O?F!{>> literal 0 HcmV?d00001 diff --git a/server/routes.ts b/server/routes.ts index 9a950e5..f0d38a7 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -503,18 +503,25 @@ export async function registerRoutes(app: Express): Promise { // 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 { .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 { 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 + }); } });