diff --git a/src/app/api/v1/reports/financial/route.ts b/src/app/api/v1/reports/financial/route.ts index 997d32c1..23336372 100644 --- a/src/app/api/v1/reports/financial/route.ts +++ b/src/app/api/v1/reports/financial/route.ts @@ -14,6 +14,7 @@ import { getRecentPayments, getRefundLog, getExpenseLedger, + financialHasData, } from '@/lib/services/reports/financial.service'; /** @@ -65,6 +66,7 @@ export const GET = withAuth( recentPayments, refundLog, expenseLedger, + hasData, ] = await Promise.all([ getFinancialKpis(ctx.portId, range), getRevenueByMonth(ctx.portId, range), @@ -76,6 +78,7 @@ export const GET = withAuth( getRecentPayments(ctx.portId, range), getRefundLog(ctx.portId, range), getExpenseLedger(ctx.portId, range), + financialHasData(ctx.portId), ]); return NextResponse.json({ @@ -90,6 +93,7 @@ export const GET = withAuth( recentPayments, refundLog, expenseLedger, + hasData, range: { from: range.from.toISOString(), to: range.to.toISOString() }, }, }); diff --git a/src/lib/services/reports/financial.service.ts b/src/lib/services/reports/financial.service.ts index 1e9199fa..6dd7100b 100644 --- a/src/lib/services/reports/financial.service.ts +++ b/src/lib/services/reports/financial.service.ts @@ -630,3 +630,23 @@ export async function getExpenseLedger( } return out; } + +/** + * Window-independent existence check: does this port have any payment OR + * expense? Drives the Financial report-level empty state. + */ +export async function financialHasData(portId: string): Promise { + const [pay, exp] = await Promise.all([ + db + .select({ one: sql`1` }) + .from(payments) + .where(eq(payments.portId, portId)) + .limit(1), + db + .select({ one: sql`1` }) + .from(expenses) + .where(eq(expenses.portId, portId)) + .limit(1), + ]); + return pay.length > 0 || exp.length > 0; +}