import { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { Link } from 'react-router-dom'; import { Receipt, Search, FileText, ChevronLeft, ChevronRight } from 'lucide-react'; import { creditNoteApi } from '../services/api'; import { fileUrl } from '../utils/fileUrl'; import { formatDate } from '../utils/dateFormat'; import Badge from '../components/ui/Badge'; import Input from '../components/ui/Input'; import { useAuth } from '../context/AuthContext'; import type { CreditNoteListItem } from '../types'; function euro(n: number, currency = 'EUR') { return new Intl.NumberFormat('de-DE', { style: 'currency', currency }).format(n || 0); } function isLieferschein(cn: CreditNoteListItem) { return cn.type === 'SACHWERT' && cn.amountGross === 0; } function belegNummer(cn: CreditNoteListItem) { return (isLieferschein(cn) ? cn.deliveryNoteNumber : cn.number) ?? `#${cn.id}`; } function customerName(c: CreditNoteListItem['contract']['customer']) { return c.companyName || `${c.firstName} ${c.lastName}`; } export default function CreditNotesOverview() { const { hasPermission, isCustomer } = useAuth(); const canSeeCustomers = hasPermission('customers:read') && !isCustomer; const [search, setSearch] = useState(''); const [page, setPage] = useState(1); const { data, isLoading } = useQuery({ queryKey: ['credit-notes-overview', search, page], queryFn: () => creditNoteApi.listAll({ search: search || undefined, page, limit: 50 }), }); const items = data?.data?.items ?? []; const pagination = data?.data?.pagination; return (

Gutschriften & Lieferscheine

{ setSearch(e.target.value); setPage(1); }} placeholder="Suche: Nummer, Kunde, Vertrag, Sachwert …" className="pl-9" />
{isLoading ? (
Laden …
) : items.length === 0 ? (
Keine Belege gefunden.
) : (
{items.map((cn) => { const ls = isLieferschein(cn); return ( ); })}
Beleg-Nr. Art Kunde Vertrag Betrag Datum PDF
{belegNummer(cn)} {ls ? 'Lieferschein' : 'Gutschrift'} {canSeeCustomers ? ( {customerName(cn.contract.customer)} ) : ( customerName(cn.contract.customer) )} {cn.contract.customer.customerNumber} {cn.contract.contractNumber} {ls ? ohne Betrag : {euro(cn.amountGross, cn.currency)}} {formatDate(cn.creditDate)} {cn.pdfPath ? ( PDF ) : ( )}
)}
{pagination && pagination.totalPages > 1 && (
{pagination.total} Belege · Seite {pagination.page} / {pagination.totalPages}
)}
); }