"use client"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { api } from "@/lib/api"; import type { BillingRate } from "@/lib/types"; import { format } from "date-fns"; import { de } from "date-fns/locale"; import { Loader2, Plus } from "lucide-react"; import { useState } from "react"; import { Breadcrumb } from "@/components/layout/Breadcrumb"; export default function BillingRatesPage() { const queryClient = useQueryClient(); const [showForm, setShowForm] = useState(false); const [rate, setRate] = useState(""); const [validFrom, setValidFrom] = useState(format(new Date(), "yyyy-MM-dd")); const { data, isLoading } = useQuery({ queryKey: ["billing-rates"], queryFn: () => api.get<{ billing_rates: BillingRate[] }>("/billing-rates"), }); const upsertMutation = useMutation({ mutationFn: (input: { rate: number; valid_from: string; currency: string }) => api.put("/billing-rates", input), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["billing-rates"] }); setShowForm(false); setRate(""); }, }); function handleSubmit(e: React.FormEvent) { e.preventDefault(); const rateNum = parseFloat(rate); if (isNaN(rateNum) || rateNum < 0) return; upsertMutation.mutate({ rate: rateNum, valid_from: validFrom, currency: "EUR", }); } const rates = data?.billing_rates ?? []; return (

Stundensaetze

{showForm && (
setRate(e.target.value)} placeholder="z.B. 350.00" className="w-full rounded-md border border-neutral-300 px-3 py-1.5 text-sm focus:border-neutral-500 focus:outline-none" required />
setValidFrom(e.target.value)} className="w-full rounded-md border border-neutral-300 px-3 py-1.5 text-sm focus:border-neutral-500 focus:outline-none" required />
)} {isLoading ? (
) : rates.length === 0 ? (

Noch keine Stundensaetze definiert.

) : (
{rates.map((r) => (

{r.rate.toFixed(2)} {r.currency}/h

{r.user_id ? `Benutzer: ${r.user_id.slice(0, 8)}...` : "Standard (alle Benutzer)"}

Ab{" "} {format(new Date(r.valid_from), "d. MMM yyyy", { locale: de })}

{r.valid_to && (

Bis{" "} {format(new Date(r.valid_to), "d. MMM yyyy", { locale: de })}

)}
))}
)}
); }