Merge pull request #520 from R0m1k3/1.1

Update invoice sending to use direct webhook requests with timeouts
This commit is contained in:
LogiFlow authored and GitHub committed 2025-11-04 16:13:26 +01:00
commit 3939b16788
3 files changed
+17 -28

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+17 -28
View File
@@ -513,37 +513,26 @@ export default function BLReconciliation() {
startProcessingTimer(); startProcessingTimer();
try { try {
// Convertir le fichier en base64 pour l'envoyer via notre route backend const formData = new FormData();
const fileBase64 = await new Promise<string>((resolve, reject) => { formData.append('file', selectedFile);
const reader = new FileReader(); formData.append('supplier', selectedDeliveryForInvoice.supplier?.name || '');
reader.onload = () => { formData.append('blNumber', selectedDeliveryForInvoice.blNumber || '');
const base64 = (reader.result as string).split(',')[1]; // Retirer le préfixe data:... formData.append('type', 'Facture');
resolve(base64);
}; // Créer un AbortController pour gérer le timeout
reader.onerror = reject; const controller = new AbortController();
reader.readAsDataURL(selectedFile); 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 clearTimeout(timeoutId);
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'
}
};
// Envoyer via la route backend proxy (évite les problèmes CORS) if (!response.ok) {
const response = await apiRequest('/api/reconciliation/send-invoice-webhook', 'POST', payload); throw new Error(`Erreur ${response.status}: ${response.statusText}`);
if (!response || !response.success) {
throw new Error(response?.error || 'Erreur lors de l\'envoi');
} }
handleCloseWaitingModal(); handleCloseWaitingModal();