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 (
| Beleg-Nr. | Art | Kunde | Vertrag | Betrag | Datum | |
|---|---|---|---|---|---|---|
| {belegNummer(cn)} |
|
{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 ? (
|