'use client'; import { useState, useEffect, useCallback } from 'react'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Table } from '@/components/ui/Table'; import { createDatevExport, listDatevExports, getDatevDownloadUrl, type DATEVExportResponse, } from '@/lib/datev'; import type { PaginatedResponse } from '@/lib/api'; export function DatevExport() { const [exports, setExports] = useState([]); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const [startDate, setStartDate] = useState(''); const [endDate, setEndDate] = useState(''); const [creating, setCreating] = useState(false); const fetchExports = useCallback(async () => { setLoading(true); setError(null); try { const data: PaginatedResponse = await listDatevExports(); setExports(data.items); setTotal(data.total); } catch (err: unknown) { const apiErr = err as { error?: { message?: string } }; setError(apiErr?.error?.message || 'Failed to load exports'); } finally { setLoading(false); } }, []); useEffect(() => { fetchExports(); }, [fetchExports]); const handleCreateExport = async (e: React.FormEvent) => { e.preventDefault(); setCreating(true); setError(null); setSuccess(null); try { const result = await createDatevExport({ start_date: startDate, end_date: endDate }); setSuccess(`Export erstellt: ${result.total_amount} EUR`); fetchExports(); } catch (err: unknown) { const apiErr = err as { error?: { message?: string } }; setError(apiErr?.error?.message || 'Failed to create export'); } finally { setCreating(false); } }; const columns = [ { key: 'start_date', label: 'Von', render: (row: DATEVExportResponse) => new Date(row.start_date).toLocaleDateString('de-DE'), }, { key: 'end_date', label: 'Bis', render: (row: DATEVExportResponse) => new Date(row.end_date).toLocaleDateString('de-DE'), }, { key: 'total_amount', label: 'Gesamtbetrag', render: (row: DATEVExportResponse) => new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(row.total_amount), }, { key: 'created_at', label: 'Erstellt am', render: (row: DATEVExportResponse) => row.created_at ? new Date(row.created_at).toLocaleString('de-DE') : 'N/A', }, { key: 'actions', label: 'Aktion', render: (row: DATEVExportResponse) => ( CSV herunterladen ), }, ]; return (

DATEV Export

{/* Create export form */}
setStartDate(e.target.value)} required />
setEndDate(e.target.value)} required />
{error && (
{error}
)} {success && (
{success}
)} {loading ? (
Wird geladen...
) : ( row.id} /> )} {total === 0 && !loading && (

Noch keine Exporte vorhanden.

)} ); }