// seniorendienst-frontend/src/components/CSVImport.jsx import React, { useRef, useState } from 'react'; import { parse } from 'csv-parse/browser/esm/sync'; const CSVImport = ({ onImport }) => { const fileInputRef = useRef(null); const [isProcessing, setIsProcessing] = useState(false); const handleFileUpload = async (event) => { const file = event.target.files[0]; if (!file) return; setIsProcessing(true); try { const text = await file.text(); // Führendes Semikolon aus jeder Zeile entfernen const cleanedText = text .split('\n') .map(line => line.startsWith(';') ? line.substring(1) : line) .join('\n'); // CSV mit csv-parse parsen const records = parse(cleanedText, { delimiter: ';', skip_empty_lines: true, from_line: 2, // Erste Zeile (Header) überspringen relax_column_count: true, // Erlaubt unterschiedliche Spaltenanzahlen trim: true, }); const entries = records.map(columns => { // Erwartetes Format: Name,Vorname,Straße,PLZ/Ort,Telefon,Email,Anfrage,Termin,Dauer,Fahrtzeit,Strecke,Transport,Bezahlt,Durchgeführt,Bemerkungen return { name: columns[0] || '', firstName: columns[1] || '', street: columns[2] || '', zipCity: columns[3] || '', phone: columns[4] || '', email: columns[5] || '', requestDate: columns[6] ? new Date(columns[6]) : new Date(), appointmentDate: columns[7] ? new Date(columns[7]) : new Date(), workDuration: Number(columns[8]) || 0, travelTime: Number(columns[9]) || 0, distance: Number(columns[10]) || 0, transport: columns[11] || 'Auto', paidAmount: Number(columns[12]) || 0, taskDone: columns[13] || '', remarks: columns[14] || '', }; }); await onImport(entries); alert(`${entries.length} Einträge erfolgreich importiert!`); // Input zurücksetzen if (fileInputRef.current) { fileInputRef.current.value = ''; } } catch (error) { console.error('Fehler beim Import:', error); alert('Fehler beim Importieren der CSV-Datei. Bitte überprüfen Sie das Format.'); } finally { setIsProcessing(false); } }; return (