From e08df31909cf9ce74bd9fd667c0ce9d9a3428eca Mon Sep 17 00:00:00 2001 From: Manus Date: Wed, 30 Sep 2026 14:39:43 +0000 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Ajout=20du=20d=C3=A9clenchement?= =?UTF-8?q?=20manuel=20pour=20les=20connecteurs=20web=20SFR=20:=20confirma?= =?UTF-8?q?tion=20explicite,=20automate=20Chromium=20c=C3=B4t=C3=A9=20serv?= =?UTF-8?q?eur,=20r=C3=A9cup=C3=A9ration=20des=20PDF=20par=20session=20aut?= =?UTF-8?q?hentifi=C3=A9e=20et=20injection=20dans=20le=20flux=20existant?= =?UTF-8?q?=20de=20stockage/d=C3=A9doublonnage/analyse.=20Le=20bouton=20es?= =?UTF-8?q?t=20d=C3=A9sactiv=C3=A9=20pour=20les=20types=20sans=20moteur=20?= =?UTF-8?q?r=C3=A9ellement=20livr=C3=A9.=20Le=20r=C3=A9sultat=20affiche=20?= =?UTF-8?q?factures=20import=C3=A9es=20et=20doublons,=20sans=20cr=C3=A9er?= =?UTF-8?q?=20de=20planification.=20Chromium=20et=20playwright-core=20sont?= =?UTF-8?q?=20int=C3=A9gr=C3=A9s=20=C3=A0=20l=E2=80=99image.=20Validation?= =?UTF-8?q?=20locale=20:=2077=20tests,=20TypeScript=20et=20build.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 1 + client/src/pages/WebImportSources.tsx | 53 ++++++++++- package.json | 1 + pnpm-lock.yaml | 10 ++ server/manualWebImport.test.ts | 28 ++++++ server/manualWebImport.ts | 129 ++++++++++++++++++++++++++ server/routers.ts | 34 +++++++ todo.md | 5 + 8 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 server/manualWebImport.test.ts create mode 100644 server/manualWebImport.ts diff --git a/Dockerfile b/Dockerfile index af31c49..4529523 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,6 +43,7 @@ RUN apt-get update && apt-get install -y \ poppler-utils \ libvips42 \ curl \ + chromium \ && rm -rf /var/lib/apt/lists/* WORKDIR /app diff --git a/client/src/pages/WebImportSources.tsx b/client/src/pages/WebImportSources.tsx index 6245ead..9845a72 100644 --- a/client/src/pages/WebImportSources.tsx +++ b/client/src/pages/WebImportSources.tsx @@ -25,7 +25,7 @@ import { AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; -import { Globe, Plus, Pencil, Trash2, Key, CheckCircle, XCircle, Clock, RefreshCw } from "lucide-react"; +import { Globe, Plus, Pencil, Trash2, Key, CheckCircle, XCircle, Clock, RefreshCw, Play } from "lucide-react"; import { toast } from "sonner"; const CONNECTOR_TYPES = [ @@ -85,6 +85,7 @@ export default function WebImportSources() { const [showForm, setShowForm] = useState(false); const [editSource, setEditSource] = useState(null); const [deleteId, setDeleteId] = useState(null); + const [manualImportId, setManualImportId] = useState(null); const [showToken, setShowToken] = useState(null); const [form, setForm] = useState(emptyForm); @@ -124,6 +125,21 @@ export default function WebImportSources() { onError: (e) => toast.error("Erreur", { description: e.message }), }); + const runManualMutation = trpc.webImportSources.runManual.useMutation({ + onSuccess: (result) => { + toast.success("Import manuel terminé", { + description: `${result.imported} facture(s) importée(s), ${result.duplicates} doublon(s) ignoré(s).`, + }); + setManualImportId(null); + refetch(); + }, + onError: (e) => { + toast.error("Import manuel en erreur", { description: e.message }); + setManualImportId(null); + refetch(); + }, + }); + function openCreate() { setForm(emptyForm); setEditSource(null); @@ -253,6 +269,21 @@ export default function WebImportSources() {
+