import { useState, useEffect } from "react"; import { trpc } from "@/lib/trpc"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { Badge } from "@/components/ui/badge"; import { toast } from "sonner"; import { Loader2, Save, Upload, FolderOpen, Mail, Play, Square, Download, Inbox, CheckCircle2, Monitor, FolderOutput } from "lucide-react"; import DashboardLayout from "@/components/DashboardLayout"; export default function ImportSettings() { const { data: settings, isLoading } = trpc.importSettings.get.useQuery(); const { data: emailServiceStatus } = trpc.emailImportService.status.useQuery(); const { data: folderServiceStatus } = trpc.folderImportService.status.useQuery(); const updateMutation = trpc.importSettings.update.useMutation(); const startEmailServiceMutation = trpc.emailImportService.start.useMutation(); const stopEmailServiceMutation = trpc.emailImportService.stop.useMutation(); const checkNowEmailMutation = trpc.emailImportService.checkNow.useMutation(); const utils = trpc.useUtils(); const startFolderServiceMutation = trpc.folderImportService.start.useMutation(); const stopFolderServiceMutation = trpc.folderImportService.stop.useMutation(); // Manual import const [manualImportEnabled, setManualImportEnabled] = useState(true); // Automatic import from folder const [autoImportEnabled, setAutoImportEnabled] = useState(false); const [autoImportSourcePath, setAutoImportSourcePath] = useState(""); const [autoImportFrequency, setAutoImportFrequency] = useState(60); // Email import const [emailImportEnabled, setEmailImportEnabled] = useState(false); const [emailImportAddress, setEmailImportAddress] = useState(""); const [emailImportPassword, setEmailImportPassword] = useState(""); const [emailImportHost, setEmailImportHost] = useState(""); const [emailImportPort, setEmailImportPort] = useState(993); const [emailImportFrequency, setEmailImportFrequency] = useState(30); // Export folder const [exportFolder, setExportFolder] = useState(""); // BAP export mode const [bapExportMode, setBapExportMode] = useState<"browser" | "folder">("browser"); // Initialize form with settings from database useEffect(() => { if (settings) { setManualImportEnabled(settings.manualImportEnabled === 1); setAutoImportEnabled(settings.autoImportEnabled === 1); setAutoImportSourcePath(settings.autoImportSourcePath || ""); setAutoImportFrequency(settings.autoImportFrequency || 60); setEmailImportEnabled(settings.emailImportEnabled === 1); setEmailImportAddress(settings.emailImportAddress || ""); setEmailImportPassword(settings.emailImportPassword || ""); setEmailImportHost(settings.emailImportHost || ""); setEmailImportPort(settings.emailImportPort || 993); setEmailImportFrequency(settings.emailImportFrequency || 30); setExportFolder(settings.exportFolder || ""); setBapExportMode((settings.bapExportMode as "browser" | "folder") || "browser"); } }, [settings]); const handleSave = async () => { try { await updateMutation.mutateAsync({ manualImportEnabled: manualImportEnabled ? 1 : 0, autoImportEnabled: autoImportEnabled ? 1 : 0, autoImportSourcePath: autoImportSourcePath || null, autoImportFrequency: autoImportFrequency, emailImportEnabled: emailImportEnabled ? 1 : 0, emailImportAddress: emailImportAddress || null, emailImportPassword: emailImportPassword || null, emailImportHost: emailImportHost || null, emailImportPort: emailImportPort, emailImportFrequency: emailImportFrequency, exportFolder: exportFolder || null, bapExportMode: bapExportMode, }); toast.success("Paramètres enregistrés avec succès"); } catch (error) { toast.error("Impossible d'enregistrer les paramètres"); } }; if (isLoading) { return (

Chargement des paramètres...

); } return (
{/* Header */}

Paramètres de réception

Configurez les différentes méthodes d'importation de factures

{/* Manual Import */}
Import manuel Autoriser l'upload manuel de fichiers PDF via l'interface
{manualImportEnabled ? "Activé" : "Désactivé"}
{/* Automatic Import from Folder */}
Import automatique depuis dossier Surveiller un dossier et importer automatiquement les nouveaux fichiers PDF
{autoImportEnabled ? "Activé" : "Désactivé"}
{autoImportEnabled && (
setAutoImportSourcePath(e.target.value)} className="h-11" />

Chemin absolu du dossier à surveiller pour les nouveaux fichiers PDF

setAutoImportFrequency(parseInt(e.target.value) || 60)} className="h-11" />

Intervalle de temps entre chaque vérification du dossier (minimum: 1 minute)

{/* Service Control Buttons */}
{folderServiceStatus?.isRunning ? ( <> Service actif ) : ( )}
)}
{/* Email Import */}
Import par email Récupérer automatiquement les factures reçues par email
{emailImportEnabled ? "Activé" : "Désactivé"}
{emailImportEnabled && (
setEmailImportAddress(e.target.value)} className="h-11" />

Adresse email à surveiller pour les factures

setEmailImportPassword(e.target.value)} className="h-11" />

Mot de passe du compte email (stocké de manière sécurisée)

setEmailImportHost(e.target.value)} className="h-11" />

Adresse du serveur IMAP

setEmailImportPort(parseInt(e.target.value) || 993)} className="h-11" />

Port SSL (993 par défaut)

setEmailImportFrequency(parseInt(e.target.value) || 30)} className="h-11" />

Intervalle de temps entre chaque vérification des emails (minimum: 1 minute)

{/* Service Control Buttons */}
{emailServiceStatus?.isRunning ? ( <> Service actif ) : ( )}
)}
{/* Export Folder & BAP Export Mode */}
Export des factures BAP Configurez le mode d'export et le dossier de destination pour les factures validées BAP
{/* BAP Export Mode */}
{/* Export Folder (shown for both modes but required for folder mode) */}
setExportFolder(e.target.value)} className="h-11" />

{bapExportMode === "folder" ? "Chemin absolu obligatoire du dossier où les PDF BAP seront enregistrés" : "Chemin optionnel du dossier d'export (utilisé pour l'export SFTP et l'export groupé)"}

{/* Save Button */}
); }