diff --git a/attached_assets/{053E4C93-A4BA-4106-8530-38501E1EADEE}_1762269064399.png b/attached_assets/{053E4C93-A4BA-4106-8530-38501E1EADEE}_1762269064399.png new file mode 100644 index 0000000..cc88b9a Binary files /dev/null and b/attached_assets/{053E4C93-A4BA-4106-8530-38501E1EADEE}_1762269064399.png differ diff --git a/attached_assets/{20F16595-1D55-42B5-B63C-FBB1B8C893E8}_1762269074780.png b/attached_assets/{20F16595-1D55-42B5-B63C-FBB1B8C893E8}_1762269074780.png new file mode 100644 index 0000000..41c2842 Binary files /dev/null and b/attached_assets/{20F16595-1D55-42B5-B63C-FBB1B8C893E8}_1762269074780.png differ diff --git a/client/src/pages/BLReconciliation.tsx b/client/src/pages/BLReconciliation.tsx index 0cafb19..aa2299f 100644 --- a/client/src/pages/BLReconciliation.tsx +++ b/client/src/pages/BLReconciliation.tsx @@ -513,37 +513,26 @@ export default function BLReconciliation() { startProcessingTimer(); try { - // Convertir le fichier en base64 pour l'envoyer via notre route backend - const fileBase64 = await new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onload = () => { - const base64 = (reader.result as string).split(',')[1]; // Retirer le préfixe data:... - resolve(base64); - }; - reader.onerror = reject; - reader.readAsDataURL(selectedFile); + const formData = new FormData(); + formData.append('file', selectedFile); + formData.append('supplier', selectedDeliveryForInvoice.supplier?.name || ''); + formData.append('blNumber', selectedDeliveryForInvoice.blNumber || ''); + formData.append('type', 'Facture'); + + // Créer un AbortController pour gérer le timeout + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 60000); // 60 secondes + + const response = await fetch(selectedDeliveryForInvoice.group.webhookUrl, { + method: 'POST', + body: formData, + signal: controller.signal, }); - // Préparer les données pour la route backend proxy - const payload = { - webhookUrl: selectedDeliveryForInvoice.group.webhookUrl, - formDataFields: { - file: { - base64: fileBase64, - filename: selectedFile.name, - contentType: selectedFile.type - }, - supplier: selectedDeliveryForInvoice.supplier?.name || '', - blNumber: selectedDeliveryForInvoice.blNumber || '', - type: 'Facture' - } - }; + clearTimeout(timeoutId); - // Envoyer via la route backend proxy (évite les problèmes CORS) - const response = await apiRequest('/api/reconciliation/send-invoice-webhook', 'POST', payload); - - if (!response || !response.success) { - throw new Error(response?.error || 'Erreur lors de l\'envoi'); + if (!response.ok) { + throw new Error(`Erreur ${response.status}: ${response.statusText}`); } handleCloseWaitingModal();