'use client'; import { Building2, Users, CalendarDays, BookOpen, Euro, TrendingUp, } from 'lucide-react'; import { formatNumber, formatCurrencyAmount } from '@kit/shared/formatters'; import { Badge } from '@kit/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; interface HierarchyReportProps { summary: { total_orgs: number; total_active_members: number; total_members: number; new_members_this_year: number; total_upcoming_events: number; total_active_courses: number; total_open_invoices: number; total_open_invoice_amount: number; total_sepa_batches_this_year: number; }; report: Array<{ org_id: string; org_name: string; org_slug: string | null; depth: number; active_members: number; inactive_members: number; total_members: number; new_members_this_year: number; active_courses: number; upcoming_events: number; open_invoices: number; open_invoice_amount: number; sepa_batches_this_year: number; }>; } function getDepthLabel(depth: number) { switch (depth) { case 0: return 'Verband'; case 1: return 'Unterverband'; default: return 'Verein'; } } function getDepthVariant(depth: number) { switch (depth) { case 0: return 'default' as const; case 1: return 'secondary' as const; default: return 'outline' as const; } } export function HierarchyReport({ summary, report }: HierarchyReportProps) { return (
Organisationen
{formatNumber(summary.total_orgs)}
Aktive Mitglieder
{formatNumber(summary.total_active_members)}
von {formatNumber(summary.total_members)} gesamt
Neue Mitglieder (Jahr)
{formatNumber(summary.new_members_this_year)}
Anstehende Termine
{formatNumber(summary.total_upcoming_events)}
Aktive Kurse
{formatNumber(summary.total_active_courses)}
Offene Rechnungen
{formatCurrencyAmount(summary.total_open_invoice_amount)}
{formatNumber(summary.total_open_invoices)} Rechnungen
Die Hierarchie enthält noch keine Organisationen.
| Name | Ebene | Aktive Mitgl. | Gesamt | Neu (Jahr) | Kurse | Termine | Offene Rechn. | Offener Betrag |
|---|---|---|---|---|---|---|---|---|
| {row.org_name} |
|
{formatNumber(row.active_members)} | {formatNumber(row.total_members)} | {formatNumber(row.new_members_this_year)} | {formatNumber(row.active_courses)} | {formatNumber(row.upcoming_events)} | {formatNumber(row.open_invoices)} | {formatCurrencyAmount(row.open_invoice_amount)} |