diff --git a/src/app/admin/analytics/page.tsx b/src/app/admin/analytics/page.tsx new file mode 100644 index 0000000..5d894f9 --- /dev/null +++ b/src/app/admin/analytics/page.tsx @@ -0,0 +1,97 @@ +import { getAnalyticsByYear, getMonthlyCollected, getAvailableYears } from "@/lib/analytics-queries"; +import { YearSelector, MonthlyChart } from "@/components/admin/YearSelector"; + +export const revalidate = 0; + +function fmt(n: number) { + return n.toLocaleString("it-IT", { style: "currency", currency: "EUR", minimumFractionDigits: 2 }); +} + +interface MetricCardProps { + label: string; + value: string; + sub?: string; + accent?: boolean; +} + +function MetricCard({ label, value, sub, accent }: MetricCardProps) { + return ( +
+

+ {label} +

+

+ {value} +

+ {sub && ( +

{sub}

+ )} +
+ ); +} + +export default async function AnalyticsPage({ + searchParams, +}: { + searchParams: Promise<{ year?: string }>; +}) { + const { year: yearParam } = await searchParams; + const year = parseInt(yearParam ?? "") || new Date().getFullYear(); + + const [data, monthly, availableYears] = await Promise.all([ + getAnalyticsByYear(year), + getMonthlyCollected(year), + getAvailableYears(), + ]); + + const collectedPct = data.contracted > 0 + ? Math.round((data.collected / data.contracted) * 100) + : 0; + + return ( +
+ {/* Header */} +
+
+

Statistiche

+

Panoramica finanziaria per anno

+
+ +
+ + {/* Metrics grid */} +
+ + + + +
+ + {/* Monthly chart */} + + + {data.contracted === 0 && ( +

+ Nessun cliente registrato nel {year}. +

+ )} +
+ ); +} \ No newline at end of file diff --git a/src/components/admin/NavBar.tsx b/src/components/admin/NavBar.tsx index 5035761..687e534 100644 --- a/src/components/admin/NavBar.tsx +++ b/src/components/admin/NavBar.tsx @@ -9,12 +9,12 @@ export function NavBar() {