From 1617267128769376e79bc77b0874f860ad30a1ba Mon Sep 17 00:00:00 2001 From: Manus Date: Fri, 2 Oct 2026 21:10:42 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20expliciter=20le=20r=C3=A9sultat=20des=20?= =?UTF-8?q?imports=20manuels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/Upload.tsx | 35 ++++++++++++++++++++++++------ server/importResultSummary.test.ts | 23 ++++++++++++++++++++ shared/importResultSummary.ts | 17 +++++++++++++++ 3 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 server/importResultSummary.test.ts create mode 100644 shared/importResultSummary.ts diff --git a/client/src/pages/Upload.tsx b/client/src/pages/Upload.tsx index 4be9ee1..c1b5ad8 100644 --- a/client/src/pages/Upload.tsx +++ b/client/src/pages/Upload.tsx @@ -17,6 +17,7 @@ import { } from "lucide-react"; import { toast } from "sonner"; import { useLocation } from "wouter"; +import { parseImportResultSummary } from "@shared/importResultSummary"; interface UploadedFile { name: string; @@ -24,6 +25,9 @@ interface UploadedFile { status: "pending" | "processing" | "completed" | "error"; progress?: string; invoicesDetected?: number; + importedCount?: number; + duplicateCount?: number; + errorCount?: number; } export default function Upload() { @@ -66,11 +70,15 @@ export default function Upload() { prev.map((f) => { if (f.sourceFileId !== sf.id) return f; if (f.status === sf.processingStatus) return f; + const summary = parseImportResultSummary(sf.processingProgress); return { ...f, status: (sf.processingStatus ?? "pending") as UploadedFile["status"], progress: sf.processingProgress ?? undefined, invoicesDetected: sf.totalInvoicesDetected ?? undefined, + importedCount: summary?.importedCount, + duplicateCount: summary?.duplicateCount, + errorCount: summary?.errorCount, }; }) ); @@ -165,6 +173,10 @@ export default function Upload() { const processingCount = uploadedFiles.filter( (f) => f.status === "processing" || f.status === "pending" ).length; + const importedInvoiceCount = uploadedFiles.reduce( + (total, file) => total + (file.importedCount ?? 0), + 0, + ); return ( @@ -282,8 +294,11 @@ export default function Upload() {
Fichiers importés - {completedCount > 0 && ( - {completedCount} terminé(s) + {completedCount > 0 && importedInvoiceCount > 0 && ( + {importedInvoiceCount} facture(s) créée(s) + )} + {completedCount > 0 && importedInvoiceCount === 0 && ( + {completedCount} terminé(s), aucune facture créée )} {processingCount > 0 && ( {processingCount} en cours @@ -294,7 +309,7 @@ export default function Upload() {
- {completedCount > 0 && ( + {importedInvoiceCount > 0 && (