mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
Enable admins and directors to send invoices via webhook
Introduce a new backend route `/api/reconciliation/send-invoice-webhook` to proxy invoice data to external webhooks, converting files to base64 and handling CORS issues. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 1e4433b5-47ab-464c-b663-fea2e53367dd Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 6f3c3694-5a67-4b47-b27c-af49da7ad447 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/1e4433b5-47ab-464c-b663-fea2e53367dd/LXHtbOp
This commit is contained in:
1 parent
0f497eb447
commit
cbcef39aa2
4 files changed
+138
-17
No files matched your search
@@ -513,26 +513,37 @@ export default function BLReconciliation() {
|
||||
startProcessingTimer();
|
||||
|
||||
try {
|
||||
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,
|
||||
// Convertir le fichier en base64 pour l'envoyer via notre route backend
|
||||
const fileBase64 = await new Promise<string>((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);
|
||||
});
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
// 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'
|
||||
}
|
||||
};
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Erreur ${response.status}: ${response.statusText}`);
|
||||
// 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');
|
||||
}
|
||||
|
||||
handleCloseWaitingModal();
|
||||
|
||||
Reference in new issue
Block a user